Hi Michael,

I'm not sure I understand what the problem is.

In normal situations setgid() is called first - that changes the
process's real+effective group ID - then initgroups() may be used
afterward to add any additional groups the user is a member of.

If used in that order, your testcase seems to work as expected on
GNU/kFreeBSD:

> pw_name=steven
> pw_uid=1000
> pw_gid=1000
> uid=0(root) gid=0(root) groups=0(root)

then after setgid(1000) :

> uid=0(root) gid=1000(steven) groups=0(root),1000(steven)

then after initgroups(1000, 1000) :

> uid=0(root) gid=1000(steven) 
> groups=0(root),1000(steven),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev)

then after setuid(1000) :

> uid=1000(steven) gid=1000(steven) 
> groups=1000(steven),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev)


I'm not sure why you were seeing egid=27, but user 'michael' was already
a member of that group.

Only the superuser can use initgroups()...  so I'm not sure this is a
security problem?

Regards,
-- 
Steven Chamberlain
ste...@pyro.eu.org


-- 
To UNSUBSCRIBE, email to debian-bsd-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/51059363.4020...@pyro.eu.org

Reply via email to