Linux如何知道它必须只将euid 0(root的uid)给某些进程,如passwd、setuid等等。
如果一个进程可以获得根权限,那么它不会导致Linux平台中潜在的安全漏洞吗?
例如,如果我编写的程序可以获得根用户权限(如passwd ),则可能损坏重要的系统文件,如/etc/passwd、/etc/group。
Linux是如何管理仍然是安全的?
发布于 2013-11-09 14:11:42
passwd
程序设置了setuid位,您可以在ls -l
中看到这一点:
-rwsr-xr-x 1 root root 39104 2009-12-06 05:35 /usr/bin/passwd
这是s
(行的第四个字符)。
具有此权限位设置的所有程序都以该程序的所有者身份运行。在本例中,用户是root
(行的第三个字)。
这些setuid程序需要确保它们不会损坏任何东西,因为系统的每个用户都可以使用有效的根权限运行它们。这就是为什么你只能更改你自己的密码。Linux和其他类似的操作系统仍然是安全的,因为这些setuid程序的作者非常小心。
例如,请参见Apache中的suexec.c,这是一个流行的setuid程序。在该源代码中有异常多的注释。
发布于 2014-12-08 14:04:43
作为Roland答案的补充,完全有可能编写一个程序,当给定根权限时,它会以各种方式破坏系统文件和/或损害您的系统。
问题是,仅仅编写它并不意味着它会自动作为root运行--它需要将其所有者设置为root,然后必须设置Roland引用的setuid位--只有root才有权这样做。
简而言之:是的,每个设置setuid位的二进制文件至少都有潜在的安全风险。利用启用setuid的二进制文件中的漏洞来获取根权限是所谓特权提升攻击的最常见来源,当它们发生时往往是一件大事。正因为如此,使用setuid的软件相对较少,而存在的软件往往受到严格的审查。
https://unix.stackexchange.com/questions/101467
复制相似问题