我有一个setuid程序(getpwd),只有在root拥有时才会按预期运行。
-rwsr-xr-x 1 root root 7981 2011-11-17 18:28 getpwd*
换句话说,当用户“alice”在命令行执行我的程序时,一切正常
程序打开目录/home/secure
中的文件并将内容打印到屏幕。
alice@devbox:/home/alice/tmp$ ./getpwd
setuid is working
但是,当我更改所有权并设置文件的setuid时:
chown secure:users getpwd
chmod 4755 getpwd
-rwsr-xr-x 1 secure users 7981 2011-11-17 18:28 getpwd*
当用户“alice”执行时,程序不会运行。
alice@devbox:/home/alice/tmp$ ./getpwd
cannot open file /home/secure/test ...
为什么会这样?
ls -ld /home/ /home/secure/
drwx--x--x 2 secure users 280 Nov 18 11:16 /home/secure/
ls -ld /home/secure/*
-rw------- 1 secure users 33 Nov 15 14:35 /home/secure/test
答案 0 :(得分:3)
如何确保只有用户“alice”才能运行安全所拥有的setuid程序?
有两种可能的方法。一个只使用传统的Unix权限,另一个使用新的ACL。
创建一个新组;可能是ALICE
或与alice
用户帐户明显不同的内容。确保alice
是ALICE
中group(5)
的成员。 (vigr(8)
是修改group(5)
文件的好方法。)设置getpwd
计划secure:ALICE
和删除世界执行权限的所有权文件。然后,只有secure
和ALICE
组的成员才能执行setuid getpwd
计划。
如果alice
只是潜在更大群体的替身,那么可以将群组命名为SECURE
。 (大写对我的描述来说很方便。你不必坚持大写。)
setfacl -m u:alice:x getpwd
setfacl(1)
程序有点复杂,但它允许您创建比传统Unix权限更复杂的权限。因为这些是非常不同的,所以我看到的大多数系统默认情况下没有打开它们 - 在安装文件系统时需要acl
选项mount(8)
。您需要将acl
添加到/etc/fstab
中需要额外权限的文件系统中。 (您不需要重新启动以使其可用;只要文件系统已挂载,mount /file/system -oremount,acl
就足够了 - 通常直到重新启动。)
我建议坚持使用传统的Unix方法。