/etc/shadow - 只读时如何编辑

Noo*_*oob 6 linux unix filesystems permissions file-permissions

我正在尝试更改 /etc/shadow 文件的内容,但意识到它是只读的

sghk1> ls -l /etc/shadow
-r--------   1 root     sys         4045 Aug 19 16:13 /etc/shadow
Run Code Online (Sandbox Code Playgroud)

/etc/shadow 文件权限是只读的。在这种情况下, /usr/bin/passwd 如何更改其内容?

e.g. passwd -x 30 username
Run Code Online (Sandbox Code Playgroud)

cha*_*aos 7

即使未设置写入标志,linux/unix 系统中的 root 用户也可以写入文件。因此,他可以/etc/shadow独立于其权限更改或任何其他文件的内容。

passwd实用程序设置了 setuid 位。见:

ls -la /usr/bin/passwd
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

-rwsr-xr-x 1 root root 42824 Sep 13  2012 /usr/bin/passwd
Run Code Online (Sandbox Code Playgroud)

请注意s文件所有者权限中的 。这表示setuid 位。如果普通用户现在执行该passwd实用程序,则它是在文件所有者的许可下执行的;在这种情况下根。

setuid 位获得临时提升的权限来运行特定任务,例如更改系统文件中的内容,例如/etc/shadow/etc/passwd.

setuid 位必须小心处理。如果在错误的二进制文件上设置,该机制可用于多个漏洞。想象一下,该/bin/bash实用程序会设置 setuid 位;所以系统中的每个用户都可以启动一个 root shell!

  • @Noob `:q!` 强制退出,不保存,即使文件是只读的,`:w!` 也强制保存。`:wq!` 与 `:w!` 相同 + 关闭编辑器。 (2认同)