限制来自 sudo 用户的文件

Jef*_*ine 2 linux permissions centos sudo

(这里的开发人员 - 系统管理员世界中的相对新手)。

有谁知道可以限制 sudo 用户的文件(无读取、写入或执行访问权限)的方法吗?

关于这种情况的一点背景:我们目前正在寻找一种方法来为某些用户提供 sudo 访问,同时仍然限制对一组文件的访问。除非实现这一点,否则 sudo 访问将不是一个选项,我们将根据用户请求将文件/命令列入白名单(或将它们包装在脚本中)。

正如您所料,白名单选项需要更多的维护和延迟,因为用户要等待系统管理员团队响应请求。

daw*_*wud 5

我通常实施这种限制的方式需要满足几个条件,否则很容易绕过限制:

  • 该用户不属于该wheel组,唯一被授权使用的用户su(通过 PAM 强制执行)。
  • 用户获得了一个正确保护 rbash的只读PATH指向 private ~/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*
    
    Run Code Online (Sandbox Code Playgroud)
  • 给用户一个受限的只读环境(想想诸如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
    
    Run Code Online (Sandbox Code Playgroud)

    此外,/etc/security/namespace.init使所有骨架文件对用户只读并归root.

通过这种方式,您可以选择是否$USER可以代表他/她自己(通过私有~/bin目录中的链接,通过 提供/etc/skel,如上所述),代表其他用户(通过sudo)或根本不执行任何命令。

关于“访问一组文件”,您没有指定它是只读访问还是读写访问。

在任何情况下,这都可以通过sudo规则进行设置。我将实施规则来授予对文件的只读访问权限rview和读写权限rvim,后者通常使用文件中的editor指令进行配置sudoers

Defaults editor=/usr/bin/rvim
Run Code Online (Sandbox Code Playgroud)

所以用户可以sudoedit允许文件。

使用您选择的配置管理工具可以相当容易地实施此解决方案。

新命令可以~/bin非常快速地添加到私有目录中(因为它们只是从命名空间逻辑管理的符号链接)。新sudo规则也可以用同样的方式管理。