尝试保护 Linux 服务器并且对 SUID 缺乏经验。执行后
find / -perm +4000
发现了许多程序。我看到了相互矛盾的建议这里和这里应该启用什么,不应该启用什么。
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 用户。
应该改变什么?另外,我应该如何测试?
答案1
让你的发行版做它想做的事,除非你确信你知道自己在做什么。你要问这个问题,说明你还不够了解。所以别管它。
哪些程序需要 setuid 取决于您的发行版上的设置方式。例如,费多拉已将 setuid 的大部分用途替换为 setcap。例如,ping 需要CAP_NET_RAWIO
能够打开原始套接字的能力;它可以通过成为setcap CAP_NET_RAWIO
(更好的权限隔离)或通过 setuid root(传统方法,不需要 setcap 可执行文件)来获得它。
您列出的程序旨在由普通用户执行,但需要额外的权限才能运行。如果您删除它们的 setuid 位,您将破坏您的系统。例如,ping
将停止工作(除非您以 root 身份登录)。你将能够成为root,su
但不能成为root sudo
,这违背了整个要点sudo
。用户将无法设置 crontab。等等。
在专用服务器上,您破坏的一些东西可能并不重要。但是,只有当您知道自己正在做正确的事情时,才应该更改发行版的默认设置,而不是相反。请记住,可用性是安全性的一部分。如果您将自己锁定在服务器之外或使自己无法诊断和修复问题,那么您就破坏了自己的安全性。
答案2
我个人不会打扰,因为您列出的程序通常被认为是安全可靠的。例如,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 访问权限并且他们的目录没有被 chrooted。
如果你真的想保护你的服务器,你应该考虑考虑SELinux。
答案3
selinux 会处理很多事情(在那些拥有它的系统上)。因此,如果您使用 selinux,我会保留所有 setuid 内容,它不应该拥有比 selinux 策略赋予它更多的权限。