SUID 权限 - 哪个是正确的?

SUID 权限 - 哪个是正确的?

尝试保护 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 策略赋予它更多的权限。

相关内容