为什么普通用户如果在passwd上设置了suid位,则无法更改其他人的密码

时间:2014-11-19 11:41:03

标签: unix

根据suid概念,如果在任何文件/可执行文件上设置suid位,并且普通用户执行该命令。命令将以该文件/命令的所有者的权限执行。

suid bit设置在" passwd" command和root是passwd的所有者。现在,如果普通用户说" user1"执行命令' passwd'它将以root权限执行。但是,他只能更改密码而不能更改其他密码。为什么这样?

2 个答案:

答案 0 :(得分:2)

/usr/bin/passwd程序将检查两个条件:

  1. 当前实际用户ID是否等于密码项/输入项的UID;
  2. 当前用户是否是root用户。

仅满足两个条件之一,该过程才能修改密码。

因此,阻止您修改其他用户密码的是/usr/bin/passwd程序,而不是suid权限。您对suid权限的理解是正确的。

查看链接: https://www.linuxquestions.org/questions/linux-newbie-8/passwd-cmd-with-suid-still-i-can%27t-change-other-user-passwd-why-4175608631/

顺便说一句,原谅我可怜的英语,我正在寻找一种改善它的好方法。

答案 1 :(得分:0)

suid位并不会使某些内容以root身份运行。它只是允许某些东西进行setuid系统调用,以提升它的特权。

passwd需要root权限才能更新用户凭据。但它非常谨慎地做到了 - 它从用户上下文开始,验证内容,然后升级权限以使系统发生变化。设置setuid并不会对此产生任何影响 - 它只是允许它执行此操作。

如果要完成非root密码更改,则应该使用sudo以root身份运行passwd

如果你真的想要,你可以编写自己的嵌入setuid系统调用的命令,但sudo可能是更好的方法。