(这里的开发人员——系统管理领域的相对新手)。
有谁知道如何限制 sudo 用户的文件(无读取、写入或执行访问权限)?
简单介绍一下情况:我们目前正在寻找一种方法,为某些用户提供 sudo 访问权限,同时仍限制对一组文件的访问。除非实现这一点,否则 sudo 访问权限将不是一种选择,我们将根据需要将文件/命令列入白名单(或将它们包装在脚本中)以响应用户请求。
正如您所料,白名单选项需要更多的维护和延迟,因为用户需要等待系统管理员团队响应请求。
答案1
我通常实施此类限制的方式需要满足几个条件,否则很容易规避限制:
- 该用户不属于该
wheel
组,只有该组才有权使用su
(通过 PAM 强制执行)。 用户将获得妥善保护
rbash
PATH
该目录具有指向私有的只读属性~/bin
,其中~/bin/
包含指向简单实用程序的链接:$ ll ~/bin total 0 lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear* lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep* lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep* lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo* lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail* lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
为用户提供了一个受限制的只读环境(想想诸如
LESSSECURE
、、变量TMOUT
之类的东西HISTFILE
)。- 可选地,将用户映射到 SELinux 用户
staff_u
,并根据需要通过 授予其以其他用户身份执行命令的权限sudo
。 用户的
/home
,/tmp
并且可能/var/tmp
通过 进行多实例化/etc/security/namespace.conf
:/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root /var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root $HOME $HOME/$USER.inst/ tmpdir:create root
此外,
/etc/security/namespace.init
使所有骨架文件对于用户而言都是只读的,并归所有root
。
这样,您可以选择是否$USER
可以代表自己执行任何命令(通过私人~/bin
目录中的链接,通过 提供/etc/skel
,如上所述),代表其他用户执行任何命令(通过sudo
),或者根本不执行任何命令。
关于“访问一组文件”,您没有指定它是只读访问还是读写访问。
无论如何,这可以通过sudo
规则来设置。我将实施规则以通过 授予对文件的只读访问权限rview
和通过 授予读写访问权限rvim
,后者通常使用文件editor
中的指令进行配置sudoers
:
Defaults editor=/usr/bin/rvim
因此用户可以sudoedit
允许文件。
使用您选择的配置管理工具可以相当容易地实现该解决方案。
可以非常快速地将新命令添加到私有~/bin
目录中(因为它们只是从命名空间逻辑管理的符号链接)。sudo
也可以用同样的方式管理新规则。