setuid程序由非root用户拥有

时间:2011-11-18 08:10:41

标签: setuid

我有一个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

1 个答案:

答案 0 :(得分:3)

  

如何确保只有用户“alice”才能运行安全所拥有的setuid程序?

有两种可能的方法。一个只使用传统的Unix权限,另一个使用新的ACL。

传统Unix

创建一个新组;可能是ALICE或与alice用户帐户明显不同的内容。确保aliceALICEgroup(5)的成员。 (vigr(8)是修改group(5)文件的好方法。)设置getpwd计划secure:ALICE删除世界执行权限的所有权文件。然后,只有secureALICE组的成员才能执行setuid getpwd计划。

如果alice只是潜在更大群体的替身,那么可以将群组命名为SECURE。 (大写对我的描述来说很方便。你不必坚持大写。)

Newfangled ACL

setfacl -m u:alice:x getpwd

setfacl(1)程序有点复杂,但它允许您创建比传统Unix权限更复杂的权限。因为这些是非常不同的,所以我看到的大多数系统默认情况下没有打开它们 - 在安装文件系统时需要acl选项mount(8)。您需要将acl添加到/etc/fstab中需要额外权限的文件系统中。 (您不需要重新启动以使其可用;只要文件系统已挂载,mount /file/system -oremount,acl就足够了 - 通常直到重新启动。)

我建议坚持使用传统的Unix方法。