1.用户和组分类
1.1.用户分类
超级用户:账户名 root,拥有所有权限,仅在系统维护等必要情况登录,以防安全问题。
系统用户:像 bin、daemon 等,为保障系统正常运行设立,满足系统进程对文件属主要求,不能登录系统。
普通用户:供使用者使用系统资源,多数用户属此类
1.2.工作组分类
基本组(私有组):新建账户时若未指定所属工作组,系统会自动创建与账户名相同的组作为该账户基本组。
扩展组(公有组):可容纳多个用户,组内所有账户都享有该组具备的权限 。
2.配置文件
账户名、密码、工作组信息和工作组密码存储在以下配置文件中
| 文件名 | 功能 |
| /etc/passwd | 用户账号文件 |
| /etc/shadow | 用户密码文件 |
| /etc/group | 工作组帐号文件 |
| /etc/gshadow | 工作组密码文件 |
2.1./etc/passwd
/etc/passwd 是一个文本文件,用于定义系统的用户信息,由于所有用户都对该文件有读权限,所以该文件中只定义用户账号,而不保存口令(密码)。
[root@zzz ~]# ll /etc/passwd -rw-r--r-- 1 root root 2097 Dec 26 11:21 /etc/passwd [root@zzz ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash # 用户名:密码:UID:GID:注释:家目录:shell用户名:用户名称
密码:真实密码保存在 /etc/shadow 中
x:经过 shadow 保护的密码,在 /etc/passwd 文件里用 x 代替
UID:用户 ID,具有唯一性
0:root 用户 UID
1~999:系统用户 UID
≥1000:普通用户 UID
注意:普通账户从 1000 开始编号,连续编号,即使系统用户某些用户号码未使用,普通用户也不可使用
GID:基本组 ID
注释:可添加自定义信息
家目录:
root(超级用户):/root
普通用户:/home/用户名
shell:默认 bash shell
/bin/bash:可登录
/sbin/nologin:不可登录
2.2./etc/shadow
/etc/shadow 存储密码加密后的密文,又称为 “影子文件”,该文件为了保证了账户密码的安全性只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击
[root@zzz ~]# ll /etc/shadow ---------- 1 root root 1140 Dec 26 11:47 /etc/shadow [root@zzz ~]# head -1 /etc/shadow root:$6$I389GMcrEJLPq0j4$t7UD84lWlFN/C8VcUCZsTGRyvuJ0YDYdPPKw/TG9Ak8l4NVVG5OCAR1jxjs6my3OQwy1iZnJoL1b754agiPZT/:20448:0:99999:7::: # 九个字段 # 用户名:加密密码:最后一次修改密码时间:最小密码修改间隔:最大密码修改间隔:警告时间:不活动时间:失效时间:备用用户名:用户名称
加密密码:加密过后的密码
最后一次修改密码的时间:最后一次修改密码的日期距离 1970.01.01 的天数
最小密码修改间隔:最少多少天之后才能修改密码
最大密码修改间隔:最多多少天之后必须修改密码
警告时间:密码过期前的警告天数
不活动时间:密码过期后的宽限天数
失效时间:距离 1970-01-01 的天数,表示账户彻底失效的日期,到期后无论密码是否有效都无法登录
2.3./etc/group
/etc/group 存放每个工作组信息
[root@zzz ~]# ll /etc/group -rw-r--r--. 1 root root 810 Dec 24 15:52 /etc/group [root@zzz ~]# head -1 /etc/group root:x:0: # 工作组名称:密码:组 ID:以该组为附加组的成员(用 , 隔开)2.4./etc/gshadow
/etc/gshadow 存放工作组密码
[root@zzz ~]# ll /etc/gshadow ----------. 1 root root 651 Dec 24 15:52 /etc/gshadow [root@zzz ~]# head -1 /etc/gshadow root::: # 工作组名称:密码:组管理员:其他组成员3.用户管理
3.1.查看用户信息
3.1.1.id
查看账户 UID、GID、基本组、附加组信息
[root@zzz ~]# id root uid=0(root) gid=0(root) groups=0(root) # UID GID 基本组 ,附加组3.2.添加新用户
3.2.1.useradd
添加新用户
格式
useradd -选项 具体操作 用户名选项
| 参数 | 功能 |
| -c | 注释信息 |
| -d | 设置家目录 |
| -e | 设置用户失效日期 |
| -f | 设置密码到期后多少天禁用账号 |
| -g | 设置基本组(基本组需提前存在) |
| -G | 设置附加组(扩展组) |
| -M | 不创建家目录 |
| -N | 不创建基本组 |
| -P | 设置登录密码(密码不加密,推荐使用 passwd 命令设置密码) |
| -s | 设置 shell |
| -u | 设置 UID |
# 创建用户 test1 [root@zzz ~]# useradd test1 [root@zzz ~]# tail -1 /etc/passwd test1:x:1002:1002::/home/test1:/bin/bash [root@zzz ~]# tail -1 /etc/shadow test1:!:20490:0:99999:7::: # ! 表示还未设置密码 [root@zzz ~]# tail -1 /etc/group test1:x:1002: [root@zzz ~]# tail -1 /etc/gshadow test1:!:: [root@zzz ~]# ll -d /home/test1/ drwx------ 3 test1 test1 78 Dec 31 19:52 /home/test1/ # 创建用户 test2 UID 为 2001,shell 为 /bin/bash,附加组为 test1,密码为 test2(非加密) [root@zzz ~]# useradd -u 2001 -s /bin/bash -G test1 -p "test2" test2 [root@zzz ~]# tail -1 /etc/passwd test2:x:2001:2001::/home/test2:/bin/bash [root@zzz ~]# tail -1 /etc/shadow test2:test2:20453:0:99999:7::: [root@zzz ~]# id test2 uid=2001(test2) gid=2001(test2) groups=2001(test2),1001(test1) # 创建用户 test3,不创建家目录,shell 为 /sbin/nologin 不可登录 [root@zzz ~]# useradd -M -s /sbin/nologin test3 # 创建用户 test4,UID 为 3001,所属组为 test1,家目录为 /test [root@zzz ~]# useradd -u 3001 -g test1 -d /test test43.3修改用户信息
3.3.1.usermod
修改用户信息
格式
usermod -选项 具体操作 用户名| 选项 | 功能 |
| -c -d -g -G -s -u | 与 useradd 用法一致,代表修改相关参数 |
| -l | 修改账户名称(未登录状态) |
| -m | 移动用户家目录文件(与 -d 连用) (-d 只是修改 /etc/passwd 文件里的家目录存储信息, 不移动原有家目录里的文件) |
| -L | 锁定账户,不可登录 |
| -U | 解锁账户 |
# 修改 test1 用户名为 TEST1,并锁定 TEST1 用户 [root@zzz ~]# usermod -l TEST1 -L test1 [root@zzz ~]# tail -1 /etc/passwd TEST1:x:1001:1001::/home/test1:/bin/bash # 修改 TEST1 用户的家目录为 /test1,并移动原家目录的文件到 /test1 下 [root@zzz ~]# usermod -md /test1 TEST1 [root@zzz ~]# tail -1 /etc/passwd TEST1:x:1001:1001::/test1:/bin/bash [root@zzz ~]# ll /test1 -a total 12 drwx------. 3 test1 test1 78 Feb 6 14:44 . drwxr-xr-x. 6 root root 58 Feb 6 14:51 .. -rw-r--r--. 1 test1 test1 18 Nov 24 2022 .bash_logout -rw-r--r--. 1 test1 test1 141 Nov 24 2022 .bash_profile -rw-r--r--. 1 test1 test1 492 Nov 24 2022 .bashrc3.4.设置用户密码
3.4.1.passwd
设置用户的密码
用户需设置密码后才可登录
注意:
root 用户可修改任何用户密码,且没有强度限制,不需要知道原始密码
普通用户只能修改自身密码,且不能为空、不能设置为回文、需满足密码强度要求,需要知道原始密码
格式
passwd -选项 用户名选项
| 参数 | 功能 |
| -d | 清空密码(密码未设置的用户不可登录,密码为空的账户可登录) |
| -e | 使密码立即过期,强迫用户下次登录时必须修改口令 |
| -i | 密码过期后多少天停用账户(宽限天数) |
| -l | 锁定账户 |
| -u | 解锁账户 |
| -n | 设置密码最短使用期限 |
| -x | 设置密码最长使用期限 |
# root 账户可设置其他账户密码 [root@zzz ~]# passwd test2 Changing password for user test2. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. # 普通账户只可设置自己的密码,且密码设置必须符合规定,符合强度的密码非交互式设置密码
# 注意:非交互式设置密码,只可 root 账户使用 [root@zzz ~]# echo 密码 | passwd --stdin 用户名 [root@zzz ~]# echo 密码 | passwd --stdin 用户名 > /dev/null3.5.删除用户
3.5.1.userdel
删除账户
格式
userdel -选项 账户名选项
| 参数 | 功能 |
| -r | 删除账户时,一并删除对应家目录 |
[root@zzz ~]# userdel -r tset13.6.切换用户
3.6.1.su
账户切换
格式
su 账户名su 和 su - 的区别
| 比较项 | su | su - |
| 切换后目录 | 保持在当前目录 | 切换到目标用户家目录 |
加载配置文件 | ~/.bashrc,/etc/bashrc | /etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile |
| 环境重建情况 | 不完全重建,保留当前部分环境设置 | 完全重建,以目标用户环境为准 |
| 适用场景 | 临时获取其他用户权限,不改变当前环境太多 | 需要完全以目标用户环境执行操作,如模拟目标用户登录 |
注意:root 用户无需密码可切换其他用户,而普通用户切换为其他用户需要输入目标用户的密码。
# su 切换,切换后工作目录保持在当前目录 [root@zzz ~]# pwd /root [root@zzz ~]# su zyz [zyz@zzz root]$ pwd /root [zyz@zzz root]$ exit exit # su - 切换,切换后当前工作目录,变到目标用户家目录 [root@zzz ~]# su - zyz [zyz@zzz ~]$ pwd /home/zyz3.7.控制用户对系统命令的使用权限
3.7.1.sudo
临时切换为 root 身份执行一条命令
需要提前 root 进行相关配置
[root@zzz ~]# su - redhat [redhat@zzz ~]$ ls /root ls: cannot open directory '/root': Permission denied [redhat@zzz ~]$ sudo ls /root We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for redhat: redhat is not in the sudoers file. This incident will be reported. # redhat 不在 sudoers 文件里,此事将被报告。sudo 的执行流程
普通用户执行 sudo 提权时,需要输入自己的密码确认(root 用户不输密码)
密码正确,系统去 /etc/sudoers 文件查找该用户具有的权限
有权限则执行,无权限则报错
配置 /etc/sudoers 文件
root 用户配置
[root@zzz ~]# vim /etc/sudoers 或者 visudo 命令可直接修改文件 99 ## Allow root to run any commands anywhere 100 root ALL=(ALL) ALL 101 redhat ALL=(ALL) ALL # 账户名 允许使用的主机=(以谁的身份) 可执行的命令列表 # wq! 强制保存并退出[root@zzz ~]# su - redhat [redhat@zzz ~]$ cat ls /root cat: /etc/shadow: Permission denied [redhat@zzz ~]$ sudo ls /root4.工作组管理
4.1.创建工作组
4.1.1groupadd
创建工作组
格式
groupadd -选项 具体参数 工作组名字选项
| 参数 | 功能 |
| -g | 设置 GID,如果不指定则默认值是已有的最大 GID 加 1 |
| -r | 建立系统组(不和 -g 同时使用时,自动分配 1~999 的 GID) |
# 创建系统工作组 [root@zzz ~]# groupadd -r test [root@zzz ~]# tail -1 /etc/group test:x:977: # 创建工作组 [root@zzz ~]# groupadd group1 [root@zzz ~]# tail -2 /etc/group test:x:977: group1:x:1002: # 创建指定 GID 工作组 [root@zzz ~]# groupadd -g 2000 group2 [root@zzz ~]# tail -3 /etc/group test:x:977: group1:x:1002: group2:x:2000:4.2.修改工作组
4.2.1.groupmod
修改工作组
格式
groupmod -选项 具体操作 工作组名选项
| 参数 | 功能 |
| -g | 修改 GID |
| -n | 修改工作组名称 |
[root@zzz ~]# groupmod -n group2222 -g 3000 group2 [root@zzz ~]# tail -1 /etc/group group2222:x:3000:4.3.添加/删除组成员
4.3.1.gpasswd
设置组密码
设置组管理员
添加 / 删除组成员
注意:只有 root 用户和组管理员可使用此命令
格式
gpasswd -选项 账户 工作组选项
| 参数 | 功能 |
| -r | 删除组密码 |
| -a | 添加组成员 |
| -d | 删除组成员 |
| -M | 同时添加多个组成员(会覆盖掉原有成员) |
| -A | 设置组管理员 |
# 设置工作组密码 [root@zzz ~]# gpasswd group1 Changing the password for group group1 New Password: Re-enter new password: [root@zzz ~]# tail -2 /etc/gshadow group1:$6$IjB4sJzi.O7.u.IV$z5ZSXaR9cuSaQ..5ltnCknqrCsg4U10eKZ6NIG7a6Ls6B7UrnzyDhkAw6r4byAz1L0x9XBnpSNaxnuG45CdHo.:: group2:!:: # 在工作组中添加多个用户 [root@zzz ~]# gpasswd -M root,user1 group2 # 设置工作组管理员 [root@zzz ~]# gpasswd -A root group2 [root@zzz ~]# tail -2 /etc/gshadow group2:!:root:root,user1 user1:!::4.4.删除工作组
4.4.1.groupdel
删除工作组
某个用户的基本组:不能直接删除该组,需删除基于该基本组的用户,再删除该组(若为同名组,删除用户时组会自动删除)
格式
groupdel 工作组名# 创建 user1 用户,自动创建同名基本组 [root@zzz ~]# useradd user1 [root@zzz ~]# tail -1 /etc/group user1:x:2002: # 基于某个用户的基本组,不能直接删除 [root@zzz ~]# groupdel user1 groupdel: cannot remove the primary group of user 'user1' # 删除用户,同名基本组自动删除 [root@zzz ~]# userdel user1 [root@zzz ~]# tail -1 /etc/group group2:x:2000:root # 新创建的工作组,不属于任何用户的基本组,可直接删除 [root@zzz ~]# groupadd group1 [root@zzz ~]# groupdel group15.查看用户登录系统
5.1.users
查看当前登录系统的所有用户
[root@zzz ~]# users root5.2.last
查看当前和历史登录系统的用户相关信息
默认读取 /var/log/wtmp 文件(该文件记录的登入系统的用户名单列出来)
[root@zzz ~]# last zyz tty1 Sat Jan 3 12:25 still logged in zyz tty2 tty2 Sat Jan 3 12:24 gone - no logout zyz seat0 login screen Sat Jan 3 12:24 gone - no logout root pts/0 192.168.17.1 Sat Jan 3 12:24 still logged in reboot system boot 5.14.0-362.8.1.e Sat Jan 3 12:24 still running zyz tty1 Fri Jan 2 18:38 - crash (17:45) root tty2 tty2 Fri Jan 2 18:36 - crash (17:47) root seat0 login screen Fri Jan 2 18:36 - crash (17:47) root pts/0 192.168.17.1 Fri Jan 2 18:33 - crash (17:50) zyz pts/0 192.168.17.100 Fri Jan 2 18:33 - 18:33 (00:00) root pts/0 192.168.17.1 Fri Jan 2 18:31 - 18:32 (00:00) zyz tty2 tty2 Fri Jan 2 18:31 - 18:36 (00:05) zyz seat0 login screen Fri Jan 2 18:31 - 18:36 (00:05) root pts/1 192.168.17.1 Fri Jan 2 16:00 - 18:33 (02:32) root pts/0 192.168.17.1 Fri Jan 2 14:44 - 16:16 (01:32) [root@rhcsa ~]# last -2 root pts/0 192.168.17.1 Sat Feb 14 15:43 gone - no logout reboot system boot 5.14.0-362.8.1.e Sat Feb 14 15:42 still running第一个字段:用户名
第二个字段:
ttyX:本地物理终端
pts/X:SSH 远程链接
seat0:图形化登录会话
第三个字段:
远程登录会显示 IP
本地登录显示 login screen / 本地终端名(如 tty2)
第四个字段:登录时间
第五个字段:登录状态
still logged in:用户当前仍处于登录状态 。
gone - no logout:用户已离开但未正常登出 。
时间范围:如 Fri Jan 2 18:31 - 18:36,表示登录和登出时间,(00:05) 是登录时长 。
crash:表明系统发生崩溃,登录会话异常结束 。
5.3.lastlog
查看每个用户的最近登录时间
读取 /var/log/lastlog 文件
[root@zzz ~]# lastlog Username Port From Latest root pts/0 192.168.17.1 Sat Jan 3 12:24:16 +0800 2026 bin **Never logged in** ... tcpdump **Never logged in** zyz tty1 Sat Jan 3 12:25:06 +0800 20265.4.w
查看当前登录到系统的用户信息
[root@zzz ~]# w 13:43:29 up 43 min, 4 users, load average: 0.00, 0.01, 0.00 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root pts/0 12:24 1.00s 0.01s 0.00s w zyz tty1 12:25 1:17m 1.67s 1.67s -bash第一行:
当前系统时间,运行时间,登录系统用户数量,系统负载信息 1min、5min、15min 平均负载,数值越低,系统越空闲
第二行:
USER:用户名
TTY:用户登录使用的终端设备
pts/0:SSH 远程链接
tty1:本地登录
LOGIN@:登录时间
IDLE:闲置时间
JCPU:所有进程占用 CPU 时间
PCPU:当前进程占用 CPU 时间
WHAT:用户正在执行的命令
5.5.who
显示目前登录到系统的用户
查看 /var/run/utmp 文件
选项
| 参数 | 功能 |
| -s | 仅显示名称、线路、时间(默认输出) |
| -a | 显示所有信息(详细信息) |
| -b | 系统最近启动时间 |
| -m | 显示当前终端信息 |
| -q | 显示登录系统用户和用户总数 |
| -r | 显示当前系统运行级别 |
| -u | 显示登录系统用户信息 |
| -T/-w | 显示 tty 终端状态标志 +:任何人可写 -:root 和所有者可写 ?:未知 |
[root@zzz ~]# who -s root pts/0 2026-01-03 12:24 (192.168.17.1) zyz tty1 2026-01-03 12:25 [root@zzz ~]# who -b system boot 2026-01-03 12:24 [root@zzz ~]# who -m root pts/0 2026-01-03 12:24 (192.168.17.1) [root@zzz ~]# who -q root zyz # users=2 [root@zzz ~]# who -r run-level 3 2026-01-03 12:25 last=5 [root@zzz ~]# who -u root pts/0 2026-01-03 12:24 . 1918 (192.168.17.1) zyz tty1 2026-01-03 12:25 01:50 3240 [root@zzz ~]# who -T root + pts/0 2026-01-03 12:24 (192.168.17.1) zyz + tty1 2026-01-03 12:25 # 查看当前终端登录的用户是谁 [root@zzz ~]# whoami root [root@zzz ~]# who am i root pts/0 2026-02-14 15:43 (192.168.17.1)[root@zzz ~]# who -a system boot 2026-02-14 15:42 run-level 5 2026-02-14 15:42 root + pts/0 2026-02-14 15:43 . 2414 (192.168.17.1)