我可以在 find 中禁用命令执行吗

我可以在 find 中禁用命令执行吗

我被要求向外部发现工具提供对 RedHat EL 服务器堆栈的访问(“否”不是一个选项)。该工具需要通过 sudo 访问命令列表。其中大多数都是简单的列表,或者可以锁定为一个选项。但是,它们还需要 sudo /usr/bin/find。

显然我对此并不满意,因为 find 允许通过 -exec 和朋友执行任何命令,以及删除随机文件。这与提供不受限制的 root 访问权限一样好。

我认为简单的 sudo 命令别名也没有帮助,因为它必须包含路径通配符(第一个参数),这也将允许任何后续参数。使用 sudo 执行时禁用 /usr/bin/find 中的不安全命令是否可能/可行?

总结一下:

  • 让正常的发现发生:例如

    /usr/bin/sudo /usr/bin/find /some/path/or/other -mtime +3 -print
    /usr/bin/sudo /usr/bin/find /home -executable -ls
    
  • 阻止使用 exec/execdir/delete:例如

    /usr/bin/sudo /usr/bin/find /some/path/or/other -name '*' -type f -exec /bin/rm -f {} \;
    /usr/bin/sudo /usr/bin/find / -ctime -1 -delete
    

答案1

您提到您必须通过 提供对命令的访问权限sudo,因此您绝对可以做一些事情来要求sudo更多有害的意图来解决规则。它不是完成这项工作的完美工具,因为它试图在授予访问权限后锁定访问权限,而不是允许来自其他 RBAC 实现中的默认拒绝位置的特定访问。

我永远不会信任可以不受限制访问的审计员。他们的工作是尝试破坏您的安全配置文件并找出任何漏洞。您的系统越安全,他们以及任何不法分子就越难撬开您的锁。

由于sudo通过按顺序应用规则来工作,因此从允许它们运行的​​命令开始,然后添加限制这些命​​令的各种选项的规则。您可以修改该sudoers文件以使用以下内容:

%auditor ALL = /usr/bin/lsattr,
               /usr/bin/find, 
               ! /usr/bin/find *-exec*,
               ! /usr/bin/find *-ok*,
               ! /usr/bin/find *-delete*

这将允许审核员运行 find,而不允许他们使用 -exec、-execdir、-ok、-okdir 或 -delete 运行它。您可能还需要考虑阻止-fprint,-fprintf-fls谓词,这将允许用任何内容覆盖任何文件。

请注意,它还会阻止诸如find no-execution.txt或 之类的命令find . -name '*-ok*'

tom@evil:~$ sudo id
uid=0(root) gid=0(root) groups=0(root),999(lightsd)

tom@evil:~$ sudo find . -mtime -50
.
./.bashrc
./.kshrc
./.bash_history
./.bash_logout
./.profile

tom@evil:~$ sudo find . -mtime 5 -exec ls -la {} \;
Sorry, user tom is not allowed to execute '/usr/bin/find . -mtime 5 -exec ls -la {} ;' as root on localhost.

tom@evil:~$ sudo find . -mtime -5 -name .kshrc -delete
Sorry, user tom is not allowed to execute '/usr/bin/find . -mtime -5 -name .kshrc -delete' as root on localhost.

这是一种建立和维护良好的 sudoers 配置文件的 PITA,但我认为值得付出努力,尤其是在合规环境中。

答案2

如果您必须授予可以升级为 root 的部分受信任的用户访问权限,请重点关注日志记录 - 并明确表示不推荐使用“sudo su”的某些变体来逃避日志记录,并被视为恶意操作。

登录到远程日志服务器,该服务器对部分受信任的用户是禁止的,并且还让日志服务器监视与受监督的计算机的连续网络连接(因此不能通过中断网络来简单地抑制日志条目)。

相关内容