我正在尝试更改 /etc/shadow 文件的内容,但意识到它是只读的
sghk1> ls -l /etc/shadow
-r-------- 1 root sys 4045 Aug 19 16:13 /etc/shadow
/etc/shadow 文件权限是只读。在这种情况下,/usr/bin/passwd 如何更改其内容?
e.g. passwd -x 30 username
答案1
即使未设置写入标志,Linux/Unix 系统中的 root 用户也可以写入文件。因此,他可以更改文件的内容/etc/shadow
或任何其他文件,而不受其权限的限制。
该passwd
实用程序已设置 setuid 位。请参阅:
ls -la /usr/bin/passwd
它看起来应该是这样的:
-rwsr-xr-x 1 root root 42824 Sep 13 2012 /usr/bin/passwd
注意s
文件所有者权限中的 。这表示setuid 位。如果普通用户现在执行该passwd
实用程序,则它将以文件所有者的权限执行;在本例中为 root。
setuid 位获得临时提升的权限来运行特定任务,例如更改系统文件中的内容,例如/etc/shadow
或/etc/passwd
。
必须小心处理 setuid 位。如果在错误的二进制文件上设置,该机制可用于多个漏洞。想象一下,该/bin/bash
实用程序会设置 setuid 位;因此系统中的每个用户都可以启动 root shell!