账号相关
用户账号数据库相关文件
/etc/password 存储系统中所有用户账户的基本信息
/etc/shadow 用于存储用户账户的密码和其他安全相关信息
/etc/gshdow 用于存储用户组的密码和其他安全相关信息
/etc/passwd:
username:password:UID:GID:GECOS:home_directory:shell
字段解释
username
: 用户名。password
: 用户的密码。在现代系统中,这个字段通常包含一个占位符(如x
或*
),实际的密码信息存储在/etc/shadow
文件中。UID
: 用户的唯一标识符(User ID)。GID
: 用户的主要组的唯一标识符(Group ID)。GECOS
: 用户的全名或其他注释信息,通常包含用户的全名、办公室位置、电话号码等。home_directory
: 用户的家目录路径。shell
: 用户的登录 shell。
示例
root:x:0:0:root:/root:/bin/bash
alice:x:1000:1000:Alice Smith,,,:/home/alice:/bin/bash
bob:x:1001:1001:Bob Johnson,,,:/home/bob:/bin/bash
解释:
root
: 用户名。x
: 密码字段,表示密码存储在/etc/shadow
文件中。0
: 用户的 UID。0
: 用户的主要 GID。root
: GECOS 字段,通常包含用户的全名或其他注释信息。/root
: 用户的家目录路径。/bin/bash
: 用户的登录 shell。
/etc/shadow:
这个文件也与用户账号相关,主要存储用户密码的加密信息以及密码的一些属性,如密码最后一次修改时间、密码最短使用期限、密码最长使用期限等。
只有具有足够权限的用户(通常是root)才能读取这个文件,以提高密码的安全性。
每行代表一个用户,格式如下:
username:password:last_changed:min_age:max_age:warn_inactive:expire_date:reserved_field
字段解释
username
: 用户名。password
: 加密后的密码。如果为空,表示没有设置密码;如果包含!
或*
,表示账户被锁定。last_changed
: 密码上次更改的日期,以 Julian 日期表示(从 1970 年 1 月 1 日算起的天数)。min_age
: 密码最短使用期限(天数),在这段时间内用户不能更改密码。max_age
: 密码最长使用期限(天数),超过这段时间后用户必须更改密码。warn_inactive
: 密码过期前多少天开始警告用户。expire_date
: 账户过期日期,以 Julian 日期表示。reserved_field
: 保留字段,目前未使用。
示例
alice:$6$hashvalue$anotherhashvalue:18999:0:99999:7:::
解释:
alice
: 用户名。$6$hashvalue$anotherhashvalue
: 加密后的密码(使用 SHA-512 算法)。18999
: 密码上次更改的 Julian 日期。0
: 密码最短使用期限为 0 天。99999
: 密码最长使用期限为 99999 天。7
: 密码过期前 7 天开始警告用户。:::
: 保留字段,目前未使用。
/etc/gshadow
/etc/gshadow
文件用于存储用户组的密码和其他安全相关信息。它也是一个只读文件,通常只有 root 用户可以读取和写入。
group_name:password:admin_list:member_list
字段解释
group_name
: 用户组的名称。password
: 用户组的密码。通常为空或包含!
,表示没有设置密码。admin_list
: 用户组的管理员列表,用逗号分隔。member_list
: 用户组的成员列表,用逗号分隔。
示例
root:!::alice,bob
users:!::alice,bob,carol
sudo:!::alice
解释:
root
: 用户组名。!
: 没有设置密码。::
: 管理员列表为空。alice,bob
: 成员列表,包含alice
和bob
。
组账号相关命令
cat /etc/group
用于显示系统中的用户组信息。/etc/group
文件包含了系统中所有用户组的定义
每个用户组一行,每一行的格式如下:
group_name:password:GID:user_list
- group_name: 用户组的名称。
- password: 用户组的密码(在现代系统中,这个字段通常为空或包含
x
,表示密码存储在/etc/gshadow
文件中)。 - GID: 用户组的标识号(Group ID)。
- user_list: 属于该用户组的用户列表,用逗号分隔。
示例输出
假设/etc/group
文件的内容如下:
root:x:0:alice,bob
users:x:100:alice,bob,carol
sudo:x:27:alice
解释:
- root: 用户组名为
root
,密码字段为x
(表示密码存储在/etc/gshadow
中),GID 为0
,成员包括alice
和bob
。 - users: 用户组名为
users
,密码字段为x
,GID 为100
,成员包括alice
、bob
和carol
。 - sudo: 用户组名为
sudo
,密码字段为x
,GID 为27
,成员包括alice
。
/etc/passwd、/etc/shadow、/etc/group之间的关系
它们之间的关系可以这样理解,即先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码。
禁用账号相关命令
sudo passwd -l username 用于锁定指定用户的账户,使其无法登录
chage -E YYYY-MM-DD username 用于设置用户的账户过期日期,超过该日期后,用户将无法登录
passwd -S username 显示指定用户的密码状态信息,包括账户是否已锁定、密码是否过期等
passwd username 更改username的密码