Linux中的/etc/passwd文件

时间:2020-03-05 15:29:59  来源:igfitidea点击:

在Linux系统中,用户帐户信息如用户名,用户ID(UID),组ID(GID),主目录和shell中的一个名为/etc/passwd的纯文本文件。
创建用户时,更新诸如/etc/passwd,/etc/shadow和/etc/group之类的系统文件。

/etc/passwd文件对于每个人都可以读取,因为许多实用程序都喜欢读取文件元数据。
例如,邮件传递代理从此文件查找主目录信息。

/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,可在系统上识别它们。 root用户始终由用户ID 0引用0.对于其他预定义帐户,UID 100-999保留了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的信息。

a)/etc/passwd文件权限

因为/etc/passwd文件对于Linux系统非常重要,因此其默认权限为"644",以防止任何错误的修改,因此任何用户只能读取文件,只能读取root用户可以编辑root用户。
我们可以如下所述

# ls -l /etc/passwd
-rw-r--r-- 1 root root 1501 Jan 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权限的情况下更改自己的密码,则无法在没有它的情况下更改用户密码。

$passwd patrick
passwd: Only root can specify a user name.