一文吃透Linux用户、组与su/sudo提权管理(CentOS7)
前言
作为 Linux 运维入门核心模块,账号与权限管控是生产环境安全的第一道防线。文章聚焦用户生命周期管理、用户组操作、密码时效策略、su 切换与 sudo 精细化提权四大核心板块,搭配真实登录故障修复、权限漏洞实战案例,适合新手收藏作为永久实操博客笔记,同时规避文件权限相关内容,阅读学习更聚焦账号安全主线。
一、本地用户管理实操
1. 用户完整生命周期实操
# 创建operator1用户
[root@centos7 ~ 19:01:22]# useradd operator1
# 查看用户UID、GID、附属组信息
liuyifei@centos7 ~ 19:01:45$ id operator1
# 查看/etc/passwd内用户记录
liuyifei@centos7 ~ 19:02:09$ grep operator1 /etc/passwd
# 批量设置用户密码
[root@centos7 ~ 19:02:36]# echo redhat | passwd –stdin operator1
# 修改用户UID
[root@centos7 ~ 19:03:01]# usermod -u 1088 operator1
# 新增用户描述信息
[root@centos7 ~ 19:03:28]# usermod -c "Operator One" operator1
# 追加附属组wheel,-a代表追加不覆盖原有组
[root@centos7 ~ 19:03:54]# usermod -aG wheel operator1
# 查看wheel组成员列表
liuyifei@centos7 ~ 19:04:16$ grep wheel /etc/group
# 删除用户,默认保留家目录
[root@centos7 ~ 19:04:40]# userdel operator1
2. 底层手动创建用户(不使用useradd)
直接修改系统账号配置文件,理解Linux用户存储底层逻辑
# 1 编辑/etc/passwd新增用户记录
[root@centos7 ~ 19:07:10]# vim /etc/passwd
# 文件末尾追加内容:zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
# 2 同步在/etc/group创建同名主组
[root@centos7 ~ 19:07:52]# vim /etc/group
# 末尾添加:zhangsan:x:1002:
# 3 在/etc/shadow写入加密密码字段
[root@centos7 ~ 19:08:24]# vim /etc/shadow
zhangsan:$6$FgUNKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::
# 4 复制系统模板目录生成用户家目录并修改归属
[root@centos7 ~ 19:09:06]# cp -r /etc/skel/ /home/zhangsan
[root@centos7 ~ 19:09:31]# chown zhangsan:zhangsan /home/zhangsan
liuyifei@centos7 ~ 19:09:55$ ll -d /home/zhangsan
drwxr-xr-x. 16 zhangsan zhangsan 4096 7月 18 19:09 /home/zhangsan
# 远程登录验证账号可用性
liuyifei@centos7 ~ 19:10:18$ ssh zhangsan@localhost
3 用户登录常见故障修复
故障1:登录提示符变为bash-4.2$
故障成因:系统全局bash配置文件/etc/bashrc丢失
# 模拟配置文件丢失
[root@centos7 ~ 19:12:05]# mv /etc/bashrc{,.ori}
# 新开子shell复现异常提示符
liuyifei@centos7 ~ 19:12:31$ bash
bash-4.2#
# 恢复原配置文件修复问题
bash-4.2# mv /etc/bashrc{.ori,}
bash-4.2# bash
liuyifei@centos7 ~ 19:13:02$
故障2:登录提示无法切换到家目录
报错:Could not chdir to home directory: No such file or directory
# 模拟删除用户家目录
[root@centos7 ~ 19:14:10]# rm -fr /home/zhangsan
# 修复:复制模板目录,重置目录属主
[root@centos7 ~ 19:14:42]# cp -r /etc/skel/ /home/zhangsan
[root@centos7 ~ 19:15:03]# chown zhangsan:zhangsan /home/zhangsan
故障3:家目录权限不足,无法进入
报错:Could not chdir to home directory: Permission denied
# 模拟锁定家目录权限
[root@centos7 ~ 19:16:21]# chmod u=- /home/zhangsan
# 重置归属与读写执行权限
[root@centos7 ~ 19:16:55]# chown -R zhangsan:zhangsan /home/zhangsan
[root@centos7 ~ 19:17:18]# chmod u=rwx /home/zhangsan
liuyifei@centos7 ~ 19:17:40$ ll -d /home/zhangsan
drwx——. 3 zhangsan zhangsan 78 7月 18 19:17 /home/zhangsan
二、本地用户组全套管理命令
1 groupadd 创建用户组
# 创建默认GID组admin
[root@centos7 ~ 19:20:14]# groupadd admin
# 自定义GID创建sysadmin组
[root@centos7 ~ 19:20:46]# groupadd sysadmin -g 2000
# 校验组配置文件
liuyifei@centos7 ~ 19:21:12$ grep admin /etc/group
printadmin:x:997:
admin:x:1002:
sysadmin:x:2000:
2 groupmod 修改组名称、组ID
# 将组名admin修改为admins
[root@centos7 ~ 19:22:03]# groupmod –new-name admins admin
# 修改admins组GID为2002
[root@centos7 ~ 19:22:30]# groupmod -g 2002 admins
# 验证修改结果
liuyifei@centos7 ~ 19:22:56$ grep 'admins' /etc/group
admins:x:2002:
3 groupdel 删除空用户组
[root@centos7 ~ 19:24:08]# groupdel sysadmin
liuyifei@centos7 ~ 19:24:32$ grep sysadmin /etc/group
4 groupmems 管理组内附属用户
# 查看工具参数说明
[root@centos7 ~ 19:26:11]# groupmems –help
# 将liuyifei添加至admins组
[root@centos7 ~ 19:26:45]# groupmems -g admins -a liuyifei
# 列出组内全部成员
liuyifei@centos7 ~ 19:27:09$ groupmems -g admins -l
liuyifei
# 查看用户所有归属组
liuyifei@centos7 ~ 19:27:33$ id liuyifei
uid=1000(liuyifei) gid=1000(liuyifei) groups=1000(liuyifei),10(wheel),2002(admins)
# 从组内删除指定用户
[root@centos7 ~ 19:28:05]# groupmems -g admins -d liuyifei
# 清空组内所有成员
[root@centos7 ~ 19:28:36]# groupmems -g admins -p
三、用户密码与账户生命周期管控
1 /etc/shadow 文件结构说明
该文件存储加密密码与账号有效期规则,每行9个字段以冒分隔:用户名:加密密码:距1970改密天数:最小改密间隔:密码最大有效期:过期提醒天数:密码宽限期:账户过期日期:预留字段
# 查看当前用户shadow记录
[root@centos7 ~ 19:32:15]# grep liuyifei /etc/shadow
liuyifei:$6$m0OgWyIu$P2TF1pB8MO...J3LopEUdhmp/Ir/:19300:0:99999:7:::
2 chage 管控密码时效
[root@centos7~ 19:34:04]# grep liuyifei /etc/shadow
liuyifei:$6$LnwVEWqHcBiTD3/p$.pyvRy1Z7CukqzXs2yDmBM8UUDpnFXct8OQ5hqvllkyKKTs88jZgGbFs4CurObRc7dJgHmiM010z5/ZUT.ijz1::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:保留域。
# 查看完整账户密码策略
liuyifei@centos7 ~ 19:34:22$ chage -l liuyifei
# 设置密码最长有效100天
[root@centos7 ~ 19:34:58]# chage -M 100 liuyifei
# 设置两次改密最小间隔10天
[root@centos7 ~ 19:35:24]# chage -m 10 liuyifei
# 设置上次改密天数为0,下次登录强制改密
[root@centos7 ~ 19:35:51]# chage -d 0 liuyifei
# 指定账户过期日期
[root@centos7 ~ 19:36:20]# chage -E 2026-07-18 liuyifei
3 用户锁定、禁用、免密相关操作
锁定/解锁账户密码 usermod -L / -U
# 锁定密码,无法登录系统
[root@centos7 ~ 19:40:10]# usermod -L laowang
# 验证登录失败
liuyifei@centos7 ~ 19:40:38$ su – laowang
Password:
su: Authentication failure
# 解锁密码恢复登录
[root@centos7 ~ 19:41:02]# usermod -U laowang
修改登录shell禁止交互式登录
# 将登录shell改为nologin禁止登录
[root@centos7 ~ 19:42:15]# usermod -s /sbin/nologin laowang
liuyifei@centos7 ~ 19:42:42$ su – laowang
This account is currently not available.
# 恢复可登录bash环境
[root@centos7 ~ 19:43:06]# usermod -s /bin/bash laowang
清除账户密码,免密登录
[root@centos7 ~ 19:44:21]# passwd -d laowang
清除用户的密码 laowang。
复制已有加密密码赋予其他用户(不使用passwd)
# 提取laoma加密密码串
[root@centos7 ~ 19:46:08]# grep laoma /etc/shadow
liuyifei:$6$LnwVEWqHcBiTD3/p$.pyvRy1Z7CukqzXs2yDmBM8UUDpnFXct8OQ5hqvllkyKKTs88jZgGbFs4CurObRc7dJgHmiM010z5/ZUT.ijz1::0:99999:7:::
# 将相同加密密码配置给zhangsan
[root@centos7 ~ 19:46:44]# usermod -p '$6$LnwVEWqHcBiTD3/p$.pyvRy1Z7CukqzXs2yDmBM8UUDpnFXct8OQ5hqvllkyKKTs88jZgGbFs4CurObRc7dJgHmiM010z5/' zhangsan
4 高危操作:创建UID为0的等效root账号
UID=0代表系统最高管理员权限,两种实现方式:
# 方式一:直接修改passwd用户UID字段
[root@centos7 ~ 19:50:20]# vim /etc/passwd
# 修改对应条目:liuyifei:x:0:1000:liuyifei:/home/liuyifei:/bin/bash
# 方式二:useradd -o 允许重复UID创建账号
[root@centos7 ~ 19:51:03]# useradd -o -u 0 liuyifei
liuyifei@centos7 ~ 19:51:27$ id liuyifei
uid=0(root) gid=0(root) groups=0(root)
四、su与sudo权限提权完整实操
1 su切换用户两种模式区别
# 不使用登录模式切换root,环境变量不重置
liuyifei@centos7 ~ 20:02:10$ su
Password: redhat
[root@centos7 liuyifei]# env | grep liuyifei
# 登录式切换root,全部环境变量重置为root
liuyifei@centos7 ~ 20:02:45$ su -l
Password: redhat
[root@centos7 ~]# set | grep liuyifei
# 以laowang身份执行单条命令
liuyifei@centos7 ~ 20:03:22$ su -l laowang -c id
# 多参数命令需单引号包裹完整指令
liuyifei@centos7 ~ 20:03:56$ su -l laowang -c 'cat /etc/hosts'
# 切换nologin系统用户,临时指定bash登录
liuyifei@centos7 ~ 20:05:11$ su -l adm -s /bin/bash
# 修复adm用户缺失shell配置文件问题
[root@centos7 ~ 20:05:44]# cp /etc/skel/{.bash_profile,.bashrc} /var/adm
2 sudo授权机制与基础使用
su缺点:需知晓root密码、操作无审计日志、无法精细化分配权限
sudo优势:仅需自身密码,操作记录存入/var/log/secure,可限定用户可执行命令
基础语法:sudo [-u 指定用户] 指令
# 拥有sudo权限用户执行管理员指令
liuyifei@centos7 ~ 20:08:13$ sudo id
[sudo] password for liuyifei:
uid=0(root) gid=0(root) groups=0(root)
# 无sudo权限用户执行报错
[liuyifei@centos7 ~ 20:08:47]$ sudo id
liuyifei not in the sudoers file.
3 sudoers配置实操
编辑sudo配置必须使用visudo,自带语法校验,避免配置损坏无法提权
# 指定vim作为sudo配置编辑器
[root@centos7 ~ 20:10:02]# export EDITOR=vim
[root@centos7 ~ 20:10:26]# visudo
# 文件内置默认规则
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
三类常用授权规则:
独立子配置文件(推荐)
不修改主sudoers文件,单独创建用户权限配置
[root@centos7 ~ 20:12:33]# echo 'zhangsan ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/zhangsan
liuyifei@centos7 ~ 20:12:58$ cat /etc/sudoers.d/zhangsan
命令别名批量授权
# 定义软件管理类命令集合
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yang
# 给sys组批量分配运维相关指令权限
%sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
4 sudo安全漏洞案例:仅授权vim实现root提权
# 创建测试用户xiaoniuma
[root@centos7 ~ 20:15:10]# useradd xiaoniuma
[root@centos7 ~ 20:15:35]# echo 123 | passwd –stdin xiaoniuma
# 仅授予sudo vim权限
[root@centos7 ~ 20:16:01]# echo 'xiaoniuma ALL=(ALL) /bin/vim' > /etc/sudoers.d/xiaoniuma
# 用户通过sudo vim修改passwd,将自身UID改为0获取最高权限
[xiaoniuma@centos7 ~]$ sudo vim /etc/passwd
xiaoniuma:x:0:1001::/home/xiaoniuma:/bin/bash
# 还原环境
[xiaoniuma@centos7 ~]$ sudo vim /etc/passwd
xiaoniuma:x:1001::/home/xiaoniuma:/bin/bash
[root@centos7 ~]# rm -r xiaoniuma
[root@centos7 ~]# rm -f /etc/sudoers.d/xiaoniuma






