gul*_*lam 11 linux security root permissions
Linux 怎么知道它必须只将 euid 0(root 的 uid)提供给某些进程,例如 passwd、setuid 等。
如果一个进程能够获得root权限,会不会导致Linux平台潜在的安全漏洞?
例如,如果我编写一个可以获取像 passwd 这样的 root 用户权限的程序,我可能会损坏像 /etc/passwd、/etc/groups 这样的重要系统文件。
Linux 如何仍然保持安全?
Rol*_*lig 17
该passwd
程序设置了setuid位,您可以使用ls -l
以下命令查看:
-rwsr-xr-x 1 root root 39104 2009-12-06 05:35 /usr/bin/passwd
Run Code Online (Sandbox Code Playgroud)
它是s
(该行的第四个字符)。
设置了此权限位的所有程序都以该程序的所有者身份运行。在此示例中,用户是root
(该行的第三个单词)。
这些 setuid 程序需要确保它们不会损坏任何东西,因为系统的每个用户都可以使用有效的 root 权限运行它们。这就是为什么您只能更改自己的密码。Linux 和其他类似的操作系统仍然是安全的,因为这些 setuid 程序的作者非常小心。
例如,参见Apache Web Server 中的suexec.c,这是一个流行的 setuid 程序。在那个源代码中有异常多的注释。
作为 Roland Illig 回答的附录,完全有可能编写一个程序,当授予 root 权限时,它会以各种方式破坏系统文件和/或危害您的系统。
问题在于,仅仅写入它并不意味着它会自动以 root 身份运行——它需要将其所有者设置为 root,然后必须设置 Roland 所指的 setuid 位——并且只有 root 拥有这样做的权利。
简而言之:是的,每个设置了 setuid 位的二进制文件至少都有潜在的安全风险。利用启用了 setuid 的二进制文件中的缺陷来获得 root 权限是所谓的权限提升攻击的最常见来源,并且当它们发生时往往是一个大问题。因此,使用 setuid 的软件相对较少,并且存在的软件往往受到严格审查。