我知道文件setuid
上的位/bin/passwd
允许我们(非 root 用户)以root
用户身份运行该命令。运行passwd
命令需要root
更改/etc/shadow
文件的权限。
我的问题是,如果我正在运行passwd
命令,为什么我在运行该命令时root
无法更改密码?root
root
edward@ArchLinux:~$ passwd root
passwd: You may not view or modify password information for root.
是不是passwd
不允许非root用户修改密码的命令?我可以编写passwd
带有 setuid 位的恶意命令来更改任何用户的密码吗?
(从逻辑上讲,我知道这将是灾难性的,但我想知道它在后台是如何工作的)
答案1
passwd(1)
检查调用它的人的凭据,如果不是,root
则不允许更改其他用户的相关条目。
您所描述的场景正是必须极其小心地编写 SUID/SGID 程序的原因,以避免它们被欺骗做一些意想不到的事情或以某种方式受到损害。