为什么普通用户没有/etc/passwd的写权限,可以修改用户密码

来源:互联网 发布:血小板计数算法 编辑:程序博客网 时间:2024/05/22 12:38

Unix 的口令文件 /etc/passwd 记录着所有用户和对应的登录密码等信息。/etc/passwd文件的所有者是root而且只有root用户有权限对该文件进行写操作。但是Unix系统其实是允许所有的用户修改自己的登录口令的(即修改/etc/passwd或/etc/shadow 文件)其实现原理如下。

首先要说明的是,与每个进程相关联的ID有6个或更多,如图1所示
这里写图片描述
其中进程的有效用户ID以及附加组ID决定了问们的文件访问权限。一般的情况下,有效用户ID等于实际用户ID,有效组ID等于实际组ID

对于每个文件来说,文件的详细属性保存在 struct stat 结构中

这里写图片描述
其中可以在文件模式字(st_mode)中设置一个特殊标志,该标志的含义是“当执行此文件是,将进程的有效用户ID设置为文件所有者的用户ID(st_uid)” ,与此类似的,st_mode中还可以设置另一位,使得将执行此文件的进程的有效组ID设置成文件的组所有者ID(st_gid)。 在文件模式字中这两位被称为设置用户ID和设置组ID

若文件的所有者是root,而且设置了该文件的设置用户ID位,然后当该文件由另一个进程执行时,该进程有了root 的权限。 如/bin/passwd ,该程序是一个设置用户ID程序,普通用户使用passwd 命令更改登录口令时,shell会调用/bin/passwd ,此时shell具有root权限,所以可以修改 /etc/passwd 文件来更改用户登录口令
http://blog.csdn.net/hyfcomeon/article/details/8958195