非 root 帐户的 passwd 命令如何成功

非 root 帐户的 passwd 命令如何成功

我正在尝试以非 root 用户身份更改密码:

passwd 

数据在 /etc/shadow 中更新,但检查我获得的权限:

---------- 1 root root 6076 Jan 27 17:14 /etc/shadow
cat /etc/shadow
cat: /etc/shadow: Permission denied

显然,即使 passwd 命令成功,任何人都没有该文件的权限,并且我间接将数据更新到非特权资源(影子文件)!那么谁能解释一下后台更新的机制?参考系统调用的解释将非常有用。

答案1

passwd实用程序已安装setuid,这意味着当它运行时,它会运行作为拥有该文件的用户,而不是调用它的用户。在本例中,passwd属于root,因此该setuid位会导致程序以 root 权限运行。因此它能够对passwdshadow文件进行更改。

如果您查看该实用程序的权限passwd,您将看到如下内容:

-r-sr-xr-x  2 root  wheel   8.2K 19 Jan 17:24 /usr/bin/passwd

这是来自我的 FreeBSD 系统 - 您看到的内容取决于您使用的操作系统。s所有者执行位置(第 4 列)中的 表示该位setuid

为了进一步参考,系统调用是setuid,并且是标准 C 库的一部分。

相关内容