根据 suid 概念,如果在任何文件/可执行文件上设置了 suid 位,并且普通用户执行该命令。命令将以该文件/命令的所有者的权限执行。
suid 位在“passwd”命令上设置,root 是 passwd 的所有者。现在,如果普通用户说“user1”执行命令“passwd”,它将以root权限执行。但是,他只能更改自己的密码,而不能更改其他人的密码。为什么这样?
最佳答案
/usr/bin/passwd
程序将检查两个条件:
- 当前真实用户ID是否等于密码项/条目的UID;
- 当前用户是否为 root。
只有满足两个条件之一,进程才能修改密码。
因此,阻止你修改其他用户密码的是/usr/bin/passwd
程序,而不是suid
权限。您对 suid
权限的理解是正确的。
请参阅link 。以下是 Jjanel 的回答:
google: passwd.c
https://github.com/shadow-maint/shadow/blob/master/src/passwd.c
see lines 1056-1069:
Code:
/*
* If the UID of the user does not match the current real UID,
* check if I'm root.
*/
if (!amroot && (pw->pw_uid != getuid ())) {
(void) fprintf (stderr,
_("%s: You may not view or modify password information for %s.\n"),
Prog, name);
SYSLOG ((LOG_WARN,
"%s: can't view or modify password information for %s",
Prog, name));
closelog ();
exit (E_NOPERM);
}
顺便说一句,请原谅我糟糕的英语,我正在寻找提高英语水平的好方法。
关于unix - 为什么如果在 passwd 上设置了 suid 位,普通用户无法更改其他人的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27015968/