setuid and setgid leaves user in 0 (wheel) group

by petr999 (Acolyte)
 on Dec 17, 2010 at 10:59 UTC Need Help??

petr999 has asked for the wisdom of the Perl Monks concerning the following question:

Hello, I do setgid the way I'm aware of. But user is still in 0 group after that:
```uid=20020(fcgi) gid=20020(fcgi) groups=20020(fcgi),0(wheel)
```
of course it is not included in 0 group in /etc/groups
```use POSIX;
my( \$uid, \$gid ) = qw/20020 20020/;
setgid( \$gid ); \$) = \$gid; \$( = \$gid; die "Set group (\$gid): \$!"
if ( \$( != \$gid ) or ( \$) != \$gid );
setuid( \$uid ); \$> = \$uid; \$< = \$uid; die "Set user (\$uid): \$!"
if ( \$< != \$uid ) or ( \$> != \$uid );
print `id`;
There are definitely things I'm missing here. Is it possible to avoid any other group from to appear on getgroups() ?
Thank you.
Peter Vereshagin peter@vereshagin.org http://vereshagin.org

Replies are listed 'Best First'.
Re: setuid and setgid leaves user in 0 (wheel) group
by bingos (Vicar) on Dec 17, 2010 at 12:21 UTC

According to perlvar for \$):

The first number sets the effective gid, and the rest (if any) are passed to setgroups(). To get the effect of an empty list for setgroups(), just repeat the new effective gid

So:

```\$) = "\$gid \$gid";

The following code on my machine (NetBSD):

```use strict;
use warnings;
use POSIX;
my( \$uid, \$gid ) = qw/32767 32766/;
setgid( \$gid ); \$) = "\$gid \$gid"; \$( = \$gid; die "Set group (\$gid): \$!
+"
if ( \$( != \$gid ) or ( \$) != \$gid );
setuid( \$uid ); \$> = \$uid; \$< = \$uid; die "Set user (\$uid): \$!"
if ( \$< != \$uid ) or ( \$> != \$uid );
print `id`;

Produces:

```uid=32767(nobody) gid=32766(nogroup) groups=32766(nogroup)
```\$) = "\$gid \$gid"
Cool, it works, thanks!

Create A New User
Node Status?
node history
Node Type: perlquestion [id://877616]
Front-paged by Arunbear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (10)
As of 2021-04-23 12:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?