我注意到,在所有 Linux 系统ArchLinux中*
,某些setuid
程序都带有相当不寻常的权限:
-r-sr-xr-x 根 根 /bin/su* ---s--x--x 根 根 /usr/bin/sudo*
问题是,为什么sudo
二进制文件设置为仅 root 可读?这样做有什么意义?为什么不能这样su
?
编辑:重新安装后sudo
,它也无法读/写。
(*
我敢发誓我在 Debian 中看到过同样的事情。但显然没有。)
答案1
我想到的第一个问题是为什么sudo
root具有写权限?
总体而言,suid 程序非常危险,您应该授予它们尽可能少的权限。除了执行权限之外,您没有比这更严格的限制了!
如果你能读取一个文件,你就能反汇编它。如果你能反汇编它,你就能查找安全漏洞,从而让发现攻击媒介变得更容易一些。
sudo
比传统方式更容易受到攻击,su
因为您不需要总是提供密码才能获得某些资源的特权访问权限(具体取决于设置方式)。这可能需要更严格的安全性。
答案2
在我的计算机 Ubuntu 9.04 上,权限没有区别。
-rwsr-xr-x 2 root root /usr/bin/sudo
-rwsr-xr-x 1 root root /bin/su
在您的机器上,它可能被设置为不可读,以阻止人们使用它?它可能以某种方式被编辑了?这两个文件的权限没有理由不同。在 Ubuntu 上,root 帐户被锁定 - 您无论如何都无法以 root 身份登录(除非您采取措施启用它)。
也许这里存在操作系统差异。您在示例中使用的是哪种操作系统?
答案3
我质疑你的前提。为什么 sudo 应该像 su 一样?
su 仅在您 (a) 已经拥有特权或 (b) 经过身份验证可获得特权时才授予特权。
sudo 根据规则库授予权限;例如,它可以被告知在 joe 要求时向“joe”授予 root 权限,而无需密码。“man sudoers” - 它非常强大。
因此 sudo 有能力做 su 不能做的事情。
人们可以以某种方式践踏 sudo 可执行文件,使其始终向任何询问的人授予 root 权限 - 忽略 sudoers 文件并仅使用内部的“硬连线”。
因此,比起保护 su,对它的保护更加有意义;让其变得难以保护也是有道理的。阅读或写入 sudo 可执行文件本身。