我想知道当我在 Linux 系统上更改密码时会发生什么。正如我记得的那样,基本上所有密码都存储在一个名为/etc/shadow
或类似 BSD 的系统中。/etc/master.passwd
它们都由具有 600 权限的 root/wheel 拥有。
因此,当我passwd
在终端中使用命令更改密码时,它应该以某种方式以 root 权限访问此文件。然后对其进行读写。
我对它如何获得 root 权限以及哪个进程(或哪些进程)负责密码更改感兴趣。
我想知道当我在 Linux 系统上更改密码时会发生什么。正如我记得的那样,基本上所有密码都存储在一个名为/etc/shadow
或类似 BSD 的系统中。/etc/master.passwd
它们都由具有 600 权限的 root/wheel 拥有。
因此,当我passwd
在终端中使用命令更改密码时,它应该以某种方式以 root 权限访问此文件。然后对其进行读写。
我对它如何获得 root 权限以及哪个进程(或哪些进程)负责密码更改感兴趣。
基本上它使用的是 suid 位。如果您检查机器中的 passwd 命令:
-rwsr-xr-x 1 root root 43K Feb 15 2011 passwd
SUID(在执行时设置所有者用户 ID)是赋予文件的一种特殊类型的文件权限。通常在 Linux/Unix 中,当程序运行时,它会从登录用户那里继承访问权限。SUID 被定义为授予用户以文件所有者的权限运行程序/文件的临时权限,而不是运行它的用户。简而言之,用户在执行二进制文件时将获得文件所有者的权限以及所有者 UID 和 GID。因此,当您运行二进制文件时,它实际上是以 root 身份运行的。