根据suid的概念,如果在任何文件/可执行文件上设置suid位,并且普通用户执行该命令。命令将以该文件/命令的所有者的权限执行。
suid位设置在" passwd“命令上,root是passwd的所有者。现在,如果普通用户说"user1“,执行命令'passwd‘,它将使用根权限执行。但是,他只能更改密码,而不能更改他人的密码。为什么会这样?
发布于 2020-07-09 05:37:13
/usr/bin/passwd程序将检查两个条件:
只有满足这两个条件中的一个,进程才能修改密码。
因此,阻止您修改其他用户密码的是/usr/bin/passwd程序,而不是suid权限。您对suid权限的理解是正确的。
见链接。以下是Jjanel的回答:
谷歌: passwd.c https://github.com/shadow-maint/shadow/blob/master/src/passwd.c 见第1056-1069行: 代码:
/*
* 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);
}顺便说一句,原谅我糟糕的英语,我找到了一个很好的办法来弥补它。
发布于 2014-11-19 11:45:21
suid位并不能使某些东西以root的形式运行。它只允许进行setuid系统调用,提高它的特权。
passwd需要根特权来更新用户凭据。但是,它非常谨慎地这样做--它从用户上下文开始,验证内容,然后升级特权以使系统更改。setuid对此没有任何影响--它只是允许它这样做。
如果您想要完成非根密码的更改,您可能应该使用sudo作为root运行passwd。
如果确实需要,可以编写自己的命令,嵌入setuid系统调用,但sudo可能是更好的方法。
https://stackoverflow.com/questions/27015968
复制相似问题