SUID 权限 - 哪个是正确的?

csi*_*csi 3 linux security setuid

试图保护 Linux 服务器并且对 SUID 几乎没有经验。执行后

find / -perm +4000
Run Code Online (Sandbox Code Playgroud)

发现了许多程序。我在这里这里看到关于应该启用什么和不启用什么的相互矛盾的建议。

SUID 已启用
/bin/su
/usr/bin/passwd
/usr/bin/gpasswd
/sbin/unix_chkpwd

SUID 禁用
/usr/bin/crontab
/usr/bin/newgrp
/bin/ping
/bin/ping6
/bin/umount
/bin/mount
/usr/bin/chsh
/usr/bin/chfn
/usr/libexec/pt_chown
/usr/bin/sudo
/usr/bin/sudoedit
/usr/bin/chage
/usr/sbin/userhelper
/usr/sbin/usernetctl
/usr/sbin/suexec

不确定
/usr/libexec/openssh/ssh-keysign
/sbin/pam_timestamp_check

服务器将托管多个站点,而 Linux / SFTP 用户很少。
应该改变什么?另外,我应该如何测试?

Gil*_*il' 6

除非您确定自己知道自己在做什么,否则让您的发行版随心所欲。你需要问这个问题的事实表明你还不够了解。所以别管它。

哪些程序需要 setuid 取决于您的发行版上的设置方式。例如,Fedora已经用 setcap 替换了 setuid 的大部分用途。例如,ping 需要CAP_NET_RAWIO能够打开原始套接字的能力;它可以通过成为setcap CAP_NET_RAWIO(更好的特权隔离)或通过成为 setuid root(传统方法,不需要 setcap 可执行文件)来获得。

您列出的程序旨在由普通用户执行,但需要额外的权限才能运行。如果您删除它们的 setuid 位,您将破坏您的系统。例如,ping将停止工作(除非您以 root 身份登录)。您将能够成为 root withsu但不能成为with sudo,这完全解决了sudo. 用户将无法设置 crontab。等等。

在专用服务器上,您破坏的某些东西可能无关紧要。但是,只有在您知道自己在做正确的事情时才应该更改发行版的默认值,而不是相反。请记住,可用性是安全性的一部分。如果您将自己锁定在服务器之外或使自己无法诊断和修复问题,那么您就破坏了自己的安全。


Ulr*_*gel 5

我个人不会打扰,因为您列出的程序通常被认为是安全的。例如,sudo没有设置 suid 位是没有意义的。chsh chfn等等也是如此。如果你真的想保护你的服务器,我只会给以下可执行文件 suid 权限:

  • ping/ping6出于诊断原因。
  • suexec 在不同用户下运行 cgi 脚本
  • su 或者 sudo
  • pt_chown 如果你没有 devpts

您可以从中删除 suid 位,ssh-keysign因为它仅用于根据http://lists.freebsd.org/pipermail/freebsd-stable/2006-October/029737.html 的基于主机的身份验证

您还应该确保您的用户没有获得 shell 访问权限并将他们的目录 chroot。

如果你真的想保护你的服务器,你应该考虑研究SELinux