/etc/passwd
存储用户基本信息
每行格式:
用户名:密码占位符(x):UID:GID:描述:家目录:默认Shell
示例:
dufu:x:1000:1000::/home/dufu:/bin/bash
/etc/shadow (影子文件)
存储加密密码及其他安全信息(仅 root 可读),
每行格式:
用户名 :加密密码:最后修改时间:密码最小有效期:密码最大有效期:警告期:失效宽限期:账号失效时间
示例:
dufu:$6$OVoBHlr995vVyxn/$Kj3uyWR9NpgQY6J2DctccO.j.kbD7DSdeWoiopPDNzqkLjc20XHUXsZjXHGQD9OBij6kS0w1TA7BCSABxI/hz1:20185:0:99999:7:::
创建用户:useradd
useradd [选项] 用户名
常用选项
选项 | 说明 |
---|---|
**-u ,–uid ** | 指定用户的唯一 ID(User ID),需为未被占用的整数(普通用户默认从 1000 开始)。 |
-g , --gid GROUP | 指定用户的主组(Primary Group),组名或 GID,该组需已存在。 |
-G, --groups GROUP | 指定用户的附加组(Secondary Groups),多个组用逗号分隔(无需提前创建,会自动处理)。 |
-d, --home HOME_DIR | 指定用户的主目录路径(默认 /home/用户名 )。 |
-s, --shell SHELL | 指定用户登录后的默认 shell(如 /bin/bash 、/sbin/nologin )。 |
-c, --comment COMMENT | 添加用户注释(如全名、联系信息等),通常用引号包裹空格内容。 |
-m, --create-home | 自动创建用户主目录(默认不创建,建议加上此选项)。 |
-r, --system | 创建系统用户(无交互式登录权限,主目录默认不创建,UID 通常小于 1000)。 |
-e, --expiredate YYYY-MM-DD | 设置账户过期日期(如 2025-4-23 ,过期后无法登录)。 |
-f, --inactive DAYS | 设置密码过期后账户的非活跃天数(0 表示密码过期即锁定,-1 表示禁用此功能)。 |
p, --password PASSWORD | 直接设置加密后的密码(需使用 openssl passwd -1 生成密文,不建议明文存储)。 |
-K, --key KEY=VALUE | 修改默认配置文件(如 /etc/login.defs )中的参数(较少用,需谨慎)。 |
示例:
[root@localhost ~]# useradd -M -s /sbin/nologin -u 6666 libai ###这里我们对libai用户创建时设置了
### —M不创建家目录
### -s 不允洗登录系统
### -u 指定uid
[root@localhost ~]# tail -1 /etc/passwd
libai:x:6666:6666::/home/libai:/sbin/nologin
###通过tail命令可以看我们对libai用户的设置是有效的
修改用户:usermod
、
usermod [选项] 用户名
常用选项
选项 | 说明 |
---|---|
-u, --uid UID | 修改用户的唯一 ID(需为未被占用的整数,修改后需同步文件所有权)。 |
-g, --gid GROUP | 修改用户的主组(Primary Group,组名或 GID,组需已存在)。 |
-G, --groups GROUP | 修改用户的附加组(Secondary Groups,覆盖原有附加组,多个组用逗号分隔)。 若需保留原有附加组,需添加 --append (如 -aG group )。 |
-d, --home HOME_DIR | 修改用户的主目录路径(需手动创建目录,默认不迁移文件,需配合 -m 迁移)。 |
-m, --move-home | 与 -d 配合使用,将原有主目录内容迁移到新路径。 |
-s, --shell SHELL | 修改用户登录后的默认 shell(如 /bin/bash 、/sbin/nologin )。 |
-c, --comment COMMENT | 修改用户注释(如全名、联系信息,用引号包裹空格内容)。 |
-l, --login NEW_LOGIN | 修改用户名(原主目录和邮箱不会自动更名,需手动处理)。 |
-e, --expiredate YYYY-MM-DD | 设置账户过期日期(过期后无法登录,格式同 useradd )。 |
-L, --lock | 锁定用户账户(禁止登录,仅锁定密码,不影响已登录会话)。 |
-U, --unlock | 解锁用户账户(恢复登录权限)。 |
-a, --append | 与 -G 配合,向附加组中添加组(不覆盖原有组)。 |
-f, --inactive DAYS | 修改密码过期后账户的非活跃天数(0 表示密码过期即锁定)。 |
-p, --password PASSWORD | 设置加密后的密码(需用 openssl passwd -1 生成密文,不建议明文)。 |
示例 :
[root@localhost home]# usermod -s /bin/bash -d /home/dufu -u 8888 libai ###这里用usermod命令对用户基本信息进行了一些更改
[root@localhost home]# tail -1 /etc/passwd ### -s更改shell
libai:x:8888:6666::/home/dufu:/bin/bash ### -d指定用户家目录
### -u指定用户的唯一uid
删除用户:userdel
userdel [选项] 用户名
常用选项
选项 | 说明 |
---|---|
-r | 彻底删除用户:删除用户账户的同时,删除其主目录(/home/用户名 )和邮件池(/var/mail/用户名 )。 |
-f | 强制删除:即使用户当前登录或有进程在运行,强制删除账户(需谨慎,可能导致服务异常)。 配合 -r 可强制删除正在使用的主目录。 |
示例 :
[root@localhost ~]# tail -1 /etc/passwd
dufu:x:1000:1000::/home/dufu:/bin/bash
[root@localhost ~]# userdel -r dufu ### 这里使用了 -r 删除用户账户的同时,删除其主目录(家目录目录)
[root@localhost ~]# tail -1 /etc/passwd
chrony:x:995:992::/var/lib/chrony:/sbin/nologin
管理用户密码(修改,锁定,设置密码策略等):passwd
passwd [选项] 用户名
常用选项
选项 | 说明 |
---|---|
-l, --lock | 锁定用户账户(禁止密码登录,但允许密钥登录或管理员解锁)。 |
-u, --unlock | 解锁已锁定的用户账户。 |
-d, --delete | 删除用户密码(允许无密码登录,危险操作,慎用)。 |
-e, --expire | 强制用户下次登录时修改密码(常用于密码过期或初始密码场景)。 |
-S, --status | 查看用户账户的密码状态(是否锁定、密码过期时间等)。 |
–stdin | 从标准输入读取密码(用于脚本或自动化工具,配合 echo 传递密码)。 |
-f, --force | 强制修改密码(绕过某些限制,如密码复杂度检查,需谨慎)。 |
-n, --minimumdays | 设置密码最短使用天数(即密码多少天内不可修改,默认 0)。 |
-x, --maximumdays | 设置密码最长使用天数(超过后必须修改,默认由 /etc/login.defs 定义)。 |
-w, --warndays | 密码过期前提前通知的天数(如提前 7 天提醒用户修改密码)。 |
示例 :
[root@localhost ~]# passwd -l dufu
锁定用户 dufu 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S dufu ###-l锁定用户密码
dufu LK 2025-04-07 0 99999 7 -1 (密码已被锁定。) ### -u解锁用户密码
[root@localhost ~]# passwd -u dufu ### -S 查看用户密码状态
解锁用户 dufu 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S dufu
dufu PS 2025-04-07 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
id
、users
,w
,who
, echo $USER
每创建一个用户都会默认创建一个(基本组)也就是gid ,gid和uid一样 但一个用户只能有且只有一个基本组但是可以有多个附加组
/etc/group
存储组信息,每行格式:
组名:组密码占位符(x):GID:组成员列表
示例:
[root@localhost ~]# tail -1 /etc/group
dufu:x:1000:
/etc/gshadow
存储组密码和安全信息(仅 root 可读)。
示例 :
[root@localhost ~]# tail -1 /etc/gshadow
dufu:!::
创建组:groupadd
groupadd [选项] 组名
常用选项
选项 | 说明 |
---|---|
-g, --gid GID | 指定组的唯一 GID(Group ID),需为未被占用的整数(普通组默认从 1000 开始,由 /etc/login.defs 定义)。 |
-r, --system | 创建系统组(GID 小于 1000,通常用于运行服务,如 ftp 、nobody )。 |
-o, --non-unique | 允许创建 GID 重复的组(通常不建议,GID 应唯一,仅特殊场景使用)。 |
-f, --force | 强制创建组:若组已存在则静默忽略错误;若与 -g 配合,可强制覆盖已有 GID(需谨慎)。 |
示例 :
[root@localhost ~]# groupadd -g 9999 test
[root@localhost ~]# tail -1 /etc/group
test:x:9999:
修改组:groupmod
`groupmod` [选项] 组名
常用选项
选项 | 说明 |
---|---|
-n, --new-name NEW_NAME | 修改组名(原组名必须存在,新组名需唯一)。 |
-g, --gid GID | 修改组的 GID(需为未被占用的整数,普通组默认 GID ≥ 1000)。 |
-o, --non-unique | 允许修改后的 GID 与其他组重复(极不推荐,可能导致权限混乱)。 |
-f, --force | 强制操作:若目标 GID 已被占用,覆盖已有组的 GID(危险,慎用)。 |
示例 :
[root@localhost ~]# tail -1 /etc/group
test:x:9999:
[root@localhost ~]# groupmod -g 8838 test ###-g 修改组id
[root@localhost ~]# tail -1 /etc/group
test:x:8838:
删除组:groupdel
### 不能删除正在被用户作为主组使用的组
groupdel
[选项] 组名
常用选项
选项 | 说明 |
---|---|
无选项 | 直接删除组(若组是用户的附加组,或空组,可直接删除)。 |
-f, --force | 强制删除(仅在部分场景生效,如系统组,需谨慎,可能导致服务异常)。 |
示例 :
[root@localhost ~]# tail -1 /etc/group
test:x:8838:
[root@localhost ~]# groupdel test ###删除test组
[root@localhost ~]# tail -1 /etc/group
dufu:x:1000:
gpasswd
(添加用户到组)gpasswd [选项] 用户名 组名
常用选项
选项 | 说明 |
---|---|
-a 用户名 | 将用户添加到组(作为附加组,保留原有成员)。 |
-d 用户名 | 将用户从组中移除(仅移除附加组关系,不影响主组)。 |
-A 用户名 1, 用户名 2 | 设置组管理员(允许这些用户使用 gpasswd 管理组,无需 sudo )。 |
-M 用户名列表 | 覆盖组的成员列表(用逗号分隔,清除原有成员,仅保留指定用户)。 |
示例 :
[root@localhost ~]# tail -1 /etc/group
test:x:8838:
[root@localhost ~]# gpasswd -a dufu test ### -a 将用户dufu添加到名为test的附加组
正在将用户“dufu”加入到“test”组中
[root@localhost ~]# tail -1 /etc/group
test:x:8838:dufu
chmod
:修改文件 / 目录权限chown
指定的用户。/etc/group
中)。a
代表所有用户,即 u+g+o
)。cd
操作)。更改文件或目录权限chmod
chmod 模式 [选项] 文件或目录名
示例
[root@localhost ~]# ll
总计 4
-rw-r--r--. 1 root root 0 4月 7日 15:43 1.txt
-rw-r--r--. 1 root root 0 4月 7日 15:43 2.txt
-rw-r--r--. 1 root root 0 4月 7日 15:43 3.txt
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
[root@localhost ~]# chmod u+x 1.txt ### 给拥有者添加执行权限
[root@localhost ~]# chmod go-rw 2.txt ### 移除所属组和其他用户的读写权限
[root@localhost ~]# chmod a=rw 3.txt ### 所有用户都有读写权限
[root@localhost ~]# ll
总计 4
-rwxr--r--. 1 root root 0 4月 7日 15:43 1.txt
-rw-------. 1 root root 0 4月 7日 15:43 2.txt
-rw-rw-rw-. 1 root root 0 4月 7日 15:43 3.txt
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
u
(所有者)、g
(所属组)、o
(其他用户)、a
(所有用户)。
+
(添加权限)、-
(移除权限)、=
(精确设置权限)。
数字模式(Numeric Mode):
解释:将权限转换为 八进制数字(每位代表 r/w/x
,有权限为 1
,无权限为 0
):
r=4
, w=2
, x=1
,组合后如 rwx=7
, rw-=6
, r-x=5
。 chmod
[数字] 文件名
示例 :
[root@localhost ~]# ll
总计 4
-rw-r--r--. 1 root root 0 4月 7日 15:57 1.txt
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
[root@localhost ~]# chmod 700 1.txt ### 拥有者rwx(7) 所属主和其他用户 0
[root@localhost ~]# ll
总计 4
-rwx------. 1 root root 0 4月 7日 15:57 1.txt
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
chmod 755 directory # 拥有者:rwx(7),所属组和其他用户:r-x(5)
chmod 644 file.txt # 拥有者:rw-(6),所属组和其他用户:r--(4)
选项 | 说明 |
---|---|
-R, --recursive | 递归修改目录及其子文件 / 目录的权限(慎用,避免误操作)。 |
-v, --verbose | 显示权限修改的详细信息。 |
示例 :
[root@localhost ~]# ll
总计 8
-rwx------. 1 root root 0 4月 7日 15:57 1.txt
drwxr-xr-x. 3 root root 4096 4月 7日 16:04 aaa
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
[root@localhost ~]# chmod -R 700 aaa ### -R递归 对当前目录和其下的子目录都进行同样的操作
[root@localhost ~]# ll
总计 8
-rwx------. 1 root root 0 4月 7日 15:57 1.txt
drwx------. 3 root root 4096 4月 7日 16:04 aaa
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
chown
:修改文件 / 目录的所有者和所属组/etc/passwd
中)。/etc/group
中)。chown [选项] [拥有者][:所属组] 文件名/目录名
常用选项
选项 | 说明 |
---|---|
-R, --recursive | 递归修改目录及其子文件 / 目录的所有者和所属组(慎用)。 |
-h, --no-dereference | 仅修改符号链接本身的所有者(而非链接指向的文件)。 |
-v, --verbose | 显示修改的详细信息。 |
–reference = 文件 | 复制参考文件的所有者和所属组到目标文件。 |
示例 :
[root@localhost ~]# chown dufu:root test/
[root@localhost ~]# ll
总计 8
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
drwxr-xr-x. 2 dufu root 4096 4月 7日 16:15 test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
drwxr-xr-x. 2 dufu root 4096 4月 7日 16:15 test
drwxr-xr-x. 2 root root 4096 4月 7日 16:22 test2
[root@localhost ~]# chown libai test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
drwxr-xr-x. 2 libai root 4096 4月 7日 16:15 test
drwxr-xr-x. 2 root root 4096 4月 7日 16:22 test2
# 将 test 的所有者改为 libai
[root@localhost ~]# chown libai test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
drwxr-xr-x. 2 libai root 4096 4月 7日 16:15 test
drwxr-xr-x. 2 root root 4096 4月 7日 16:22 test2
[root@localhost ~]# chown :libai test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root root 1086 2025年 4月 7日 anaconda-ks.cfg
# 将 test 目录的所属组改为 libai
功能 | chmod |
chown |
---|---|---|
作用对象 | 文件 / 目录的权限(读 / 写 / 执行)。 | 文件 / 目录的所有者和所属组。 |
权限要求 | 普通用户可修改自己文件的权限,管理员可修改所有文件。 | 仅管理员(或拥有 chown 权限的用户)可修改所有者 / 组。 |
典型场景 | 设置文件可执行(chmod +x )、禁止写入(chmod -w )。 |
转移文件所有权(如用户离职后转移文件给其他用户)。 |
权限与安全:
chmod 777
会导致文件对所有用户可读、写、执行,存在安全风险,仅测试环境使用。chown
递归修改目录时,确保路径正确,避免误删系统文件(如 chown -R root /
会导致系统崩溃)。符号链接与硬链接:
chown
默认修改符号链接指向的文件,加 -h
仅修改链接本身。