欢迎光临
我们一直在努力

弄懂 sudo,运维权限管控少踩 90% 坑

一文吃透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 718 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 718 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切换用户两种模式区别

  • su 用户名:非登录shell,继承当前用户环境变量
  • su -l / su -:登录shell,完整加载目标用户专属环境
  • # 不使用登录模式切换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

    三类常用授权规则:

  • 用户拥有全部root权限:liuyifei ALL=(ALL) ALL
  • 用户免密执行所有管理员命令:liuyifei ALL=(ALL) NOPASSWD:ALL
  • 仅允许执行用户管理类命令:liuyifei ALL=(ALL) /sbin/useradd,/sbin/usermod,/sbin/userdel
  • 独立子配置文件(推荐)

    不修改主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

    5 su与sudo运维使用规范

  • 日常操作优先sudo,避免长期持有root高权限
  • 遵循最小权限原则,仅分配业务必需指令,禁止ALL无限制授权
  • 定期审计/var/log/secure日志,追溯sudo操作记录
  • 脚本不硬编码sudo密码,采用NOPASSWD配置
  • 需要完整root交互环境使用sudo -i,替代su
  • 赞(0)
    未经允许不得转载:171主机测评 » 弄懂 sudo,运维权限管控少踩 90% 坑
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址