linux中/etc/passwd详解
在Linux系统上,用户名、用户ID(UID)、组ID(GID)、主目录和shell等用户帐户信息保存在名为/etc/passwd的纯文本文件中。创建用户时,/etc/passwd、/etc/shadow和/etc/group等系统文件将被更新。
/etc/passwd文件对每个人都是可读的,因为许多实用程序都喜欢读取文件元数据。例如,mail delivery agent会从该文件中查找主目录信息。
/etc/passwd文件以影子密码格式存储帐户信息,密码表示为单个“x”字符,而/etc/shadow文件以加密格式存储实际密码。
理解/etc/passwd文件格式
此文件存储系统的本地帐户信息。它可以被任何用户读取,但只能由超级用户root写入。它包含一些行,并使用冒号(:)分隔字段,其中每行代表一个特定的用户。
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
linoadmin:x:1000:1000::/home/linoadmin:/bin/bash
/etc/passwd文件有七个字段,如下所示
您可以通过以下详细信息了解每个文件的角色:
- 用户名或登录名:第一个字段定义要登录的用户的用户名。只有本地用户在passwd文件中有条目。它应该在1到32个字符之间。
- 密码(x):由x字符标识的第二个字段表示加密密码在/etc/shadow文件中可用。出于安全原因(每个人都可读),密码文件不包含密码。
- 用户ID(UID):它代表第三个字段。在Linux机器上创建的每个用户都有一个唯一的用户ID,可以在系统上识别他们。根用户始终由用户ID 0引用。UID 1到99保留给其他预定义帐户,而UID 100-999由系统保留给管理和系统帐户/组。一些Linux系统上新用户的UID从1000开始。
- 组ID(GID):它代表第四个字段。当使用useradd命令创建用户时,如果您没有明确提到任何组名,它还会为该用户创建一个与用户名同名的主组。它表示为用户所属的主组指定的唯一ID。单个用户可以是多个组的成员,这些组可以从/etc/group文件中找到,但passwd文件将只包含主组的信息。
- 用户ID信息或注释或说明:第五个字段是用户帐户的简短注释/说明/信息。它允许您添加有关用户的额外信息,例如用户的全名、电话号码、该帐户的服务描述等。
- 主目录:第六个字段表示用户登录时主目录的绝对路径。对于普通用户,这通常是/home/username。对于root,主目录是/root。
- Shell:第七个字段是命令或Shell/bin/bash的绝对路径。通常,此字段包含有关用户默认shell的信息。
/etc/passwd 文件权限
因为/etc/passwd文件对Linux系统非常重要,所以它的默认权限是644,以防止任何错误的修改,因此任何用户只能读取该文件,只有root用户可以编辑它。您可以按以下方式获得许可
# ls -l /etc/passwd
-rw-r--r-- 1 root root 1501 May 11 16:58 /etc/passwd
passwd命令的工作原理
可以使用/usr/bin/passwd命令更改您自己的密码或分配给用户的密码。您可以在下面访问此命令的权限:
ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
您可以看到,用户和组所有者是root用户,对其他用户也具有读取和可执行权限。虽然它归root所有,但您可以看到由s权限表示的SETUID位,它允许用户运行程序,就像他们是程序的用户所有者一样(在我们的例子中是root)。这就是为什么即使您不是root用户,也可以使用此命令更改密码。
要更改自己的密码,只需输入passwd命令,无需选择
$ passwd
Changing password for user papso.
Changing password for papso.
(current) UNIX password:
New password:
请注意,如果您可以在没有root权限的情况下更改自己的密码,则在没有root权限的情况下无法更改用户密码。
$ passwd patrick
passwd: Only root can specify a user name.
总结
/etc/passwd在Linux上是一个非常重要的文件,所以在编辑这个文件时要注意。