I've just been banging my head against lurker (mailing list program we
use on hantslug) as it had stopped working.
I've diagnosed what's wrong, but have very little clue as to _why_.
The box runs exim as a mailserver and that runs as the Debian-exim user:
$ id Debian-exim
uid=102(Debian-exim) gid=102(Debian-exim)
groups=102(Debian-exim),105(lurker),106(greylist)
After the upgrade and reboot (no nscd installed BTW), we had this
lurker issue so I shoved this little naff wrapper around the process:
ps -ef >> /tmp/apb.$$
/usr/bin/id >> /tmp/apb.$$
strace -f -o /tmp/strace.$$ /usr/bin/lurker-index "$@"
This shows:
* exim and this process running as Debian-exim
* id reports "uid=102(Debian-exim) gid=102(Debian-exim)"
** what on earth happened to the other groups!
* strace shows permission denied (see above)
How on earth is it dropping those other groups? The only thing I can
think of is that exim's use of setgid/setpgid is doing it. I'll
certainly admit that reading those manpages can get your head in a
twist so I wondered if anyone can shine a light on it?
I've just dug out my copy of Stevens and it says (bottom of P241):
"The supplementary group IDs are not affected by setgid, setregid or
setegid".
$ grep et exim.strace |grep id |grep -v pid
11552 geteuid32() = 102
11552 geteuid32() = 0
11552 getuid32() = 102
11552 getgid32() = 102
11552 getegid32() = 102
11552 geteuid32() = 0
11552 geteuid32() = 0
11552 getegid32() = 102
11552 setgid32(102) = 0
11552 setuid32(0) = 0
11552 setgid32(102) = 0
11553 geteuid32() = 0
11553 getegid32() = 102
11553 setgid32(102) = 0
11553 setuid32(102) = 0
11554 setpgid(0, 0) = 0
11554 getuid32() = 102
11554 getgid32() = 102
11554 geteuid32() = 102
11554 getegid32() = 102
11555 geteuid32() = 102
11557 geteuid32() = 102
11557 getuid32() = 102
11557 getegid32() = 102
11557 getgid32() = 102
11558 geteuid32() = 102
11558 getuid32() = 102
11558 getegid32() = 102
11558 getgid32() = 102
11559 geteuid32() = 102
11559 getuid32() = 102
11559 getegid32() = 102
11559 getgid32() = 102
11561 geteuid32() = 102
11561 getuid32() = 102
11561 getegid32() = 102
11561 getgid32() = 102
11562 geteuid32() = 102
11562 getuid32() = 102
11562 getegid32() = 102
11562 getgid32() = 102
11563 getuid32() = 102
11563 getgid32() = 102
11563 geteuid32() = 102
11563 getuid32() = 102
11563 geteuid32() = 102
11563 getuid32() = 102
11552 geteuid32() = 0
11552 getegid32() = 102
11552 setgid32(102) = 0
11552 setuid32(102) = 0
Adrian
--
bitcube.co.uk - Expert Linux infrastructure consultancy
Puppet, Debian, Red Hat, Ubuntu, CentOS