用户、用户组管理
用户和组介绍
用户介绍
在Linux系统中,系统上每个进程(运行程序)都以特定用户身份运行。每个文件都有一个特定用户作为其所有者。文件所有权有助于系统对文件用户实施访问控制。正在运行的进程关联的用户确定该进程可访问的文件和目录。用户使用username标识并使其更易于使用。
在内部,系统通过分配给它们的唯一标识号,用户ID或UID来区分用户帐户。 如果用户使用用户
帐户,则通常会为其分配一个密码,用户在登录时将使用该密码来证明他们是实际的授权用户。
用户帐户主要有三种类型:
-
superuser:用于管理系统,用户名称为root,UID为0,对系统具有完全访问权限。
-
system users :系统具有系统用户帐户,由提供支持服务的进程使用。 这些进程或守护进程通常不需要以超级用户身份运行。 它们是非特权帐户,用户保护自己文件和其他资源。系统用户帐户不用于交互方式登录系统。
-
regular users:大多数用户拥有常规用户帐户,用于日常工作。
passwd文件
/etc/passwd 文件保存操作系统登录用户信息。每行包含一个登录用户信息,以冒号分隔七个
域。
格式:
bash
name:password:UID:GID:GECOS:directory:shell
示例:
bash
[whisky@localhost ~ 14:38:53] ✔ $cat /etc/passwd | grep whisky
whisky:x:1000:1000:whisky:/home/whisky:/bin/bash
解释如下:
-
name:用户登录名
-
password:用户密码,以x表示
-
UID:用户ID
-
GID:用户主组ID
-
GECOS:用户描述信息,通常为用户的真实姓名
-
directory:用户主目录,启动shell时的工作目录,默认位于/home/username
-
shell:用户打开终端时运行的程序,默认是shell。
对于system user,它的shell是/sbin/nologin。
示例:
bash
[whisky@localhost ~ 16:29:38] ✔ $grep postfix /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
group文件
**组是用户的集合,组中用户继承组权限。**与用户一样,组具有组名称以使其更易于使用。系统通
过分配给它们的唯一标识号,组ID或GID来区分组。
/etc/group 文件保存操作系统组信息。每行包含一个组信息,以冒号分隔4个域。格式:
bash
group_name:password:GID:user_list
示例:
bash
[whisky@localhost ~ 16:32:33] ✔ $grep wheel /etc/group
wheel:x:10:whisky
解释如下:
-
group_name:组名称
-
password:组密码,用x表示
-
GID:组ID,唯一表示组
-
user_list:作为补充的成员
组的类型
-
主要组:每个用户只有一个主要组,/etc/passwd 文件中的GID编号定义。 默认情况下,**用户创建的新文件组所有者为用户的主要组。**通常,在创建新的常规用户时,会创建一个与该用户同名的新组。该组用作新用户的主要组,该用户是此用户专用组的唯一成员,有助于简化文件权限管理。
-
补充组:用户还可以拥有补充组。 补充组的成员资格由/etc/group文件确定。 根据用户的任何组是否具有访问权限,授予用户访问权限的权限。例如,如果用户user01具有主要组user01补充组wheel和webadmin,则该用户可以读取这三个组中任何一个组可读的文件。
bash
# 查看用户信息
[whisky@localhost ~ 16:57:30] ✔ $id
uid=1000(whisky) gid=1000(whisky) 组=1000(whisky),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 查看用户 uid
[whisky@localhost ~ 16:57:31] ✔ $id -u whisky
1000
本地用户管理
whoami命令
查看当前终端中的用户。
bash
[whisky@localhost ~ 16:57:42] ✔ $whoami
whisky
who和w命令
查看当前系统中所有终端上的用户,以及用户登录的时间。
bash
[whisky@localhost ~ 17:01:48] ✔ $who
root pts/0 2025-12-23 13:54 (10.1.8.1)
root pts/1 2026-04-01 15:41 (10.1.8.1)
root pts/2 2025-12-23 09:59 (10.1.8.1)
whisky pts/3 2025-12-23 10:01 (10.1.8.1)
[whisky@localhost ~ 17:02:50] ✔ $w
17:04:21 up 7:54, 4 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.1.8.1 2312月25 1:23m 0.52s 0.13s -bash
root pts/1 10.1.8.1 15:41 51:57 0.10s 0.10s -bash
root pts/2 10.1.8.1 2312月25 49:41 0.84s 0.29s -bash
whisky pts/3 10.1.8.1 2312月25 5.00s 0.22s 0.03s w
users命令
查看当前系统中所有终端上登录的用户名。
bash
[whisky@localhost ~ 17:04:21] ✔ $users
root root root whisky whisky
useradd命令
作用:创建用户
bash
[whisky@localhost ~ 18:19:45] ✔ $useradd user01
[whisky@localhost ~ 18:23:37] ✘ $grep user01 /etc/passwd
user01:x:1002:1002::/home/user01:/bin/bash
bash
[root@localhost ~ 18:28:05] ✔ # useradd -u 1688 -d /opt/user02 -c "user for create test" -g wheel -s /sbin/nologin user02
# -u uid
# -d 用户的家目录
# -c 描述信息
# -g 用户的主组
# -s 用户shell程序
[whisky@localhost ~ 18:27:42] ✔ $grep user02 /etc/passwd
user02:x:1688:10:user for create test:/opt/user02:/sbin/nologin
[whisky@localhost ~ 18:30:32] ✔ $ls -d /opt/user02
/opt/user02
# 创建一个没有密码的账户,该用户在图形化界面中可以直接登录
[root@localhost ~ 18:28:13] ✔ # useradd -p '' Jerry
新用户家目录中的文件来源于/etc/skel/目录。
创建新用户的时候,用户属性默认参数配置在/etc/login.defs文件。
bash
[root@localhost ~ 18:36:09] ✔ # vim /etc/login.defs
MAIL_DIR /var/spool/mail
UMASK 077
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
# Min/max values for automatic uid selection in useradd
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
...
usermod命令
作用:修改用户属性
bash
[root@localhost ~ 10:46:17] ✔ # usermod user02 -u 1008 -md /home/user02 -s /bin/bash
# -m 移动家目录到新的位置
[root@localhost ~ 10:48:51] ✔ # grep user02 /etc/passwd
user02:x:1008:10:user for software manage:/home/user02:/bin/bash
ls -d /home/user02
/home/user02
[root@localhost ~ 10:50:00] ✔ # su - user02
[user02@localhost ~ 10:52:36] ✔ $ usermod -aG user01 user02
usermod:无法锁定 /etc/passwd,请稍后再usermod -aG user01 user-02q
[user02@localhost ~ 10:53:06] ✔ $ exit
登出
[root@localhost ~ 10:53:10] ✔ # usermod -aG user01 user02
[root@localhost ~ 10:53:18] ✔ # id user02
uid=1008(user02) gid=10(wheel) 组=10(wheel),1002(user01)
[root@localhost ~ 10:53:29] ✔ # useradd user03
[root@localhost ~ 10:53:42] ✔ # userdel user03
[root@localhost ~ 10:53:51] ✔ # userdel user02
userdel命令
bash
#正常删除
[root@localhost ~ 18:53:44] ✘ # useradd user03
[root@localhost ~ 18:53:53] ✔ # userdel user03
#强制删除
[root@localhost ~ 18:54:10] ✔ # useradd user04
[root@localhost ~ 18:56:20] ✔ # userdel user04
userdel: user user04 is currently used by process 12235
#此处漏了一步,应用id user04校验
# 尽量不要强制删除,要找到无法删除的原因
[root@localhost ~ 18:57:15] ✘ # userdel -f user04
userdel: user user04 is currently used by process 12235
[root@localhost ~ 18:58:03] ✔ # id user04
id: user04: no such user
本地组管理
groupadd命令
bash
# 创建名称为 admin 的组
[root@localhost ~ 19:01:02] ✔ # groupadd admin
#创建名称为sysadmin的组,组id为2000
[root@localhost ~ 19:02:50] ✔ # groupadd sysadmin -g 2000
#验证
[root@localhost ~ 19:02:53] ✔ # grep admin /etc/group
printadmin:x:997:
admin:x:8894:
sysadmin:x:2000:
groupmod命令
bash
#修改组名称
[root@localhost ~ 20:21:34] ✔ # groupmod --new-name admins admin
# 修改组id
[root@localhost ~ 20:23:31] ✔ # groupmod -g 2002 admins
# 验证
[root@localhost ~ 20:23:57] ✔ # grep 'admins' /etc/group
admins:x:2002:
groupdel命令
bash
[root@localhost ~ 20:24:34] ✔ # groupdel sysadmin
[root@localhost ~ 20:33:09] ✔ # grep sysadmin /etc/group
groupmem命令
bash
[root@localhost ~ 20:43:28] ✔ # groupmems --help
用法:groupmems [选项] [动作]
选项:
-g, --group groupname 更改组 groupname,而不是用户的组(只 root)
-R, --root CHROOT_DIR chroot 到的目录
动作:
-a, --add username 将用户 username 添加到组成员中
-d, --delete username 从组的成员中删除用户 username
-h, --help 显示此帮助信息并推出
-p, --purge 从组中移除所有成员
-l, --list 列出组中的所有成员
#添加成员
[root@localhost ~ 20:43:50] ✔ # groupmems -g admins -a whisky
[root@localhost ~ 20:45:29] ✔ # groupmems -g admins -l
whisky
[root@localhost ~ 20:45:41] ✔ # id whisky
uid=1000(whisky) gid=1000(whisky) 组=1000(whisky),10(wheel),2002(admins)
#删除成员
[root@localhost ~ 20:45:47] ✔ # groupmems -g admins -d whisky
[root@localhost ~ 20:46:45] ✔ # groupmems -g admins -l
#清空组中所有成员
[root@localhost ~ 20:46:48] ✔ # groupmems -g admins -a whisky
[root@localhost ~ 20:47:18] ✔ # groupmems -g admins -p
课后练习
-
创建developer组,组id为2000
bash[root@localhost ~ 11:31:58] ✔ #groupadd develop -g 2000 -
修改developer组名称为developers,组id为3000
bash[root@localhost ~ 11:32:47] ✔ #groupmod --new-name developers develop -g 3000 -
创建developer1用户,并添加到组developers
bash[root@localhost ~ 11:35:47] ✔ #useradd developer1 -g developers -
将developer1用户从组developers中删除
bash[root@localhost ~ 11:37:37] ✔ #vim /etc/passwd developer1:x:8890:::/home/developer1:/bin/bash /etc/passwd -
删除组developers
bash
[root@localhost ~ 11:38:13] ✔ #groupdel developers
管理用户密码
shadow 文件
/etc/shadow 文件保存操作系统登录用户密码信息。
每行包含一个登录用户信息,以冒号分隔九个域。
示例:
bash
[root@localhost ~ 20:47:23] ✔ # grep whisky /etc/shadow
whisky:$6$4VMTE63p$9OQMwRiF2ZQmzSln2hNS/ki83ANdlzcSh64RPewZRmE2tCeovqMSPunS8qHVmTuGBV2PXW1U0Crmq3Gdukgnf/:20440:0:99999:7:::
解释如下:
-
login name:用户登录名。
-
encrypted password:加密的密码。
-
date of last password change:上一次密码更改日期,以距离1970-1-1过去的天数表示。设置为0,强制用户下次登录时更改密码。
-
minimum password age:最小密码生命周期。设置为0,密码可以随时更改。
-
maximum password age:最大密码生命周期。
-
password warning period:密码过期前,提前多少天告警。设置为0,不提示过期。
-
password inactivity period:密码过期后,非活跃天数,在期间密码仍可以使用。
-
account expiration date:账户过期时间,以距离1970-1-1过去的天数表示。
-
reserved field:保留域。
chage 命令

bash
# 查看用户密码信息
[root@localhost ~ 20:48:23] ✔ # chage -l whisky
最近一次密码修改时间 :12月 23, 2025
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
# 修改用户密码要求
[root@localhost ~ 20:49:58] ✔ # chage -M 100 whisky
[root@localhost ~ 20:50:31] ✔ # chage -l whisky
最近一次密码修改时间 :12月 23, 2025
密码过期时间 :3月 28, 2026
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :100
[root@localhost ~ 20:51:02] ✔ # chage -m 10 whisky
[root@localhost ~ 20:51:55] ✔ # chage -l whisky
最近一次密码修改时间 :12月 23, 2025
密码过期时间 :3月 28, 2026
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :10
两次改变密码之间相距的最大天数 :100
在密码过期之前警告的天数 :7
[root@localhost ~ 20:56:27] ✔ # chage -d 0 whisky
# 验证
[root@localhost ~ 20:57:18] ✔ # ssh whisky@localhost
whisky@localhost's password:
You are required to change your password immediately (root enforced)
Last login: Mon Dec 23 20:57:18 2025 from localhost
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 whisky 的密码 。
为 whisky 更改 STRESS 密码。
(当前)UNIX 密码:
# 设置用户密码过期时间是过去的一个时间,以便确保用户密码过期,登录时强制用户更改密码
# 设置为1,确保密码很久未改动
[root@localhost ~ 20:47:23] ✔ # chage -d 1 whisky
# 设置用户账户过期时间是过去的一个时间,以便锁定用户账户
[root@localhost ~ 20:47:23] ✔ # chage -E 1970-1-1 whisky
usermod -p 更改用户密码
bash
# 更改whisky的密码与laowang一致
[root@centos7 ~]# grep laowang /etc/shadow
laowang:$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/:19304:0:99999:7:::
[root@centos7 ~]# usermod -p '$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/' whisky
# 删除用户密码
[root@centos7 ~]# usermod -p '' whisky
usermod -s 限定用户shell
bash
# 默认情况下,root用户可以切换到任何用户而且不需要密码
[root@centos7 ~]# su - laowang
上一次登录:一 12月 23 11:19:14 CST 2025tty1 上
[laowang@centos7 ~]$ 登出
# 更改用户shell为 /sbin/nologin
[root@centos7 ~]# usermod -s /sbin/nologin laowang
[root@centos7 ~]# su - laowang
上一次登录:一 12月 23 11:21:23 CST 2025pts/0 上
This account is currently not available.
# 将用户shell改为/bin/bash
[root@centos7 ~]# usermod -s /bin/bash laowang
usermod -L 锁定用户密码
等效于 passwd -l
bash
[root@centos7 ~]# usermod -L laowang
# 输入正确的密码也无法登录
[whisky@centos7 ~]$ su - laowang
Password:
su: Authentication failure
[whisky@centos7 ~]$
usermod -U 解锁用户密码
等效于 passwd -u
bash
[root@centos7 ~]# usermod -U laowang
# 输入正确的密码登录
[whisky@centos7 ~]$ su - laowang
Password:
[laowang@centos7 ~]$
passwd -d 删除密码
bash
# 删除用户密码即可
[root@centos7 ~]# passwd -d laowang
清除用户的密码 laowang。
passwd: 操作成功
用户登录的时候,输入用户名即可登录。
设置账户过期
等效于 passwd -e
bash
# 设置账户过期时间为过去的某一个日期
[root@centos7 ~]# usermod -e 2024-7-18 laowang
增加一个 uid 为 0 的用户
方法一
bash
[root@centos7 ~]# vim /etc/passwd
# 将自己的用户id该为0,此时whisky用户可以行使root权限了
whisky:x:0:1000:whisky:/home/whisky:/bin/bash
方法二
bash
[root@centos7 ~]# useradd -o -u 0 whisky
[root@centos7 ~]# id whisky
uid=0(root) gid=0(root) 组=0(root)
删除用户密码即可
root@centos7 \~\]# passwd -d laowang 清除用户的密码 laowang。 passwd: 操作成功 用户登录的时候,输入用户名即可登录。 ### 设置账户过期 等效于` passwd -e` ```bash # 设置账户过期时间为过去的某一个日期 [root@centos7 ~]# usermod -e 2024-7-18 laowang #### 增加一个 uid 为 0 的用户 ##### **方法一** ```bash [root@centos7 ~]# vim /etc/passwd # 将自己的用户id该为0,此时whisky用户可以行使root权限了 whisky:x:0:1000:whisky:/home/whisky:/bin/bash ``` ##### **方法二** ```bash [root@centos7 ~]# useradd -o -u 0 whisky [root@centos7 ~]# id whisky uid=0(root) gid=0(root) 组=0(root) ``` whisky 和 root 账户是两个不同的账户,但是whisky用户获得了root账户权限。