'passwd' 命令如何获得 root 用户权限?

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 程序。在那个源代码中有异常多的注释。


Sha*_*dur 5

作为 Roland Illig 回答的附录,完全有可能编写一个程序,当授予 root 权限时,它会以各种方式破坏系统文件和/或危害您的系统。

问题在于,仅仅写入它并不意味着它会自动以 root 身份运行——它需要将其所有者设置为 root,然后必须设置 Roland 所指的 setuid 位——并且只有 root 拥有这样做的权利。

简而言之:是的,每个设置了 setuid 位的二进制文件至少都有潜在的安全风险。利用启用了 setuid 的二进制文件中的缺陷来获得 root 权限是所谓的权限提升攻击的最常见来源,并且当它们发生时往往是一个大问题。因此,使用 setuid 的软件相对较少,并且存在的软件往往受到严格审查。