首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在passwd上设置suid位,普通用户为什么不能更改其他用户的密码

问如果在passwd上设置suid位,普通用户为什么不能更改其他用户的密码
EN

Stack Overflow用户
提问于 2014-11-19 11:41:03
回答 2查看 3.2K关注 0票数 2

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

suid位设置在" passwd“命令上,root是passwd的所有者。现在,如果普通用户说"user1“,执行命令'passwd‘,它将使用根权限执行。但是,他只能更改密码,而不能更改他人的密码。为什么会这样?

EN

回答 2

Stack Overflow用户

发布于 2020-07-09 05:37:13

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

  1. 当前实际用户ID是否等于密码项/条目的UID;
  2. 当前用户是否为根用户。

只有满足这两个条件中的一个,进程才能修改密码。

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

见链接。以下是Jjanel的回答:

谷歌: passwd.c https://github.com/shadow-maint/shadow/blob/master/src/passwd.c 见第1056-1069行: 代码:

代码语言:javascript
复制
/*
     * 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);
}

顺便说一句,原谅我糟糕的英语,我找到了一个很好的办法来弥补它。

票数 4
EN

Stack Overflow用户

发布于 2014-11-19 11:45:21

suid位并不能使某些东西以root的形式运行。它只允许进行setuid系统调用,提高它的特权。

passwd需要根特权来更新用户凭据。但是,它非常谨慎地这样做--它从用户上下文开始,验证内容,然后升级特权以使系统更改。setuid对此没有任何影响--它只是允许它这样做。

如果您想要完成非根密码的更改,您可能应该使用sudo作为root运行passwd。

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27015968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档