我在 Linux 机器上有一组存储目录,全部为 770/root:root (perms/owner:group),我使用 ACL 来管理用户访问。 (我无法使用 unix 组,因为目录是通过网络共享的,其中组是通过 LDAP 进行管理的,而我不是管理员)。
对于每个目录,一个用户通过 ACL 具有完全 rwx 访问权限,所有其他用户通过 ACL 具有 rx 访问权限。
目前,我必须手动响应添加/删除用户的请求,并且我希望将这种能力传递给“rwx”用户以获取他们拥有的目录(因为我自然是一个懒惰的系统管理员)。
我能想到的最好的解决方案是创建一个带有 root setuid 的脚本/程序,检查给定目录上调用用户的“rwx”ACL 状态,并允许他们添加/删除“rx”ACL 用户,如下所示:
$ modify_acls.sh [--remove] [--add] <my_directory> <other_user>
有没有更简单的方法,或者上面的解决方案会因某种原因不起作用?
答案1
考虑启用特定脚本,而不是 setuid shell 脚本sudo
。
尽管这种方式最常用,但sudo
并不限于“允许某人以 root 身份执行任何程序”。您可以轻松地在/etc/sudoers
.man sudoers
详情请参阅。
使用 setuid 脚本代替并没有真正的优势sudo
,除了在出于安全原因完全禁用 setuid 脚本的系统上,第二种替代方案根本不起作用。您仍然可以编写自定义 setuid 二进制文件,但是当您想要添加或删除用户时,插入一行sudoers
会更简单、更快且更容易更改。
答案2
使用 shell 脚本可能不起作用,因为 Linux 上通常不支持 setuid shell 脚本。
解决方法是用 C 语言编写一个小型可执行文件来提供所需的功能,并设置该可执行文件的 uid root。