Package: sudo Version: 1.6.8p7-1 Severity: normal Hello,
When running a command, sudo checks for existence of the target executable and it being an executable file. However, this is done only under the UID of the runas_pw, not also under its GID. This means that when the runas user has access to the executable only through its group, sudo fails to stat() the executable. This is a regression from an older version - I recently upgraded sudo and encountered the problem. Consider this setup (id is a copy of /usr/bin/id): #sudoers: test2 saytrin=(test1) NOPASSWD: /tmp/test/id and: # ls -ld /tmp/test drwxr-x--- 2 root test1 60 Apr 5 12:52 /tmp/test # ls -l /tmp/test/id -rwxr-xr-x 1 root root 15992 Apr 5 12:51 /tmp/test/id This means that the user test1 can enter the directory /tmp/test, since its group (test1) has access to that dir. However, when running from test2: [EMAIL PROTECTED]:~$ sudo -u test1 /tmp/test/id sudo: /tmp/test/id: command not found and a strace shows that: .... getcwd("/tmp", 4096) = 5 setreuid32(-1, 0) = 0 setuid32(0) = 0 setreuid32(-1, 1006) = 0 stat64("/tmp/test/id", 0xbffff76c) = -1 EACCES (Permission denied) setreuid32(-1, 0) = 0 setuid32(0) = 0 setregid32(-1, 1007) = 0 setreuid32(0, 1007) = 0 stat64("/tmp/test/id", 0xbffff76c) = -1 EACCES (Permission denied) ... Here 1006 is test1's uid and 1007 test2's uid. As you can see, only uid changes are done, not also gid. Digging through the sources, I found out that main() calls init_vars(). Here is the fragment of code, starting at line 627 of sudo.c, in function init_vars(): if (ISSET(sudo_mode, MODE_RUN)) { /* XXX - default_runas may be modified during parsing of sudoers */ set_perms(PERM_RUNAS); rval = find_path(NewArgv[0], &user_cmnd, user_stat, user_path); set_perms(PERM_ROOT); if (rval != FOUND) { /* Failed as root, try as invoking user. */ set_perms(PERM_USER); rval = find_path(NewArgv[0], &user_cmnd, user_stat, user_path); set_perms(PERM_ROOT); } } The problem is that the definition of set_perms(PERM_RUNAS) changes only the uid of process, not its gid also. So I think that here, either: * set_perms(PERM_RUNAS) does also a setegid/setgid, but this raises another question - should suplementary groups, or * init_vars does a set_pers(PERM_RUNAS_WITHGROUPS) (to be implemented; I don't think PERM_FULL_RUNAS is appropriate, since it does extra stuff), or * init_vars allows to skip the path checking Thanks, Iustin Pop -- System Information: Debian Release: 3.1 Architecture: i386 (i686) Kernel: Linux 2.6.11.6 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Versions of packages sudo depends on: ii libc6 2.3.2.ds1-20 GNU C Library: Shared libraries an ii libpam-modules 0.76-22 Pluggable Authentication Modules f ii libpam0g 0.76-22 Pluggable Authentication Modules l -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]