Linux 提权管理全解|su sudo 新手友好教程 前言✨
前言✨Linux 里 root 是系统最高权限管理员但日常操作千万不能直接用 root普通用户遇到权限不足时就需要su、sudo两种提权工具今天一次性讲透两者用法、区别、配置与安全踩坑附带实操代码直接复制就能练一、为什么需要提权工具Linux 权限模型很简单root 拥有全部操作权限普通用户只能操作自己家目录文件修改系统文件、安装软件、管理用户都会报权限拒绝。两种提权方案各有优劣su完整切换用户身份相当于 “完全变身 root”sudo临时借用 root 权限执行单条命令用完自动恢复普通用户更安全二、su 命令详解完整切换用户su 全称switch user切换成另一个用户身份默认切换 root。2.1 su 用户名无 -非登录 shell继承当前用户环境变量、工作目录只是换身份不加载目标用户配置# 不加用户名的nologin shell[liulelecentos7 ~23:09:33]$su密码# 很多环境变量依然保留liulele用户[rootcentos7 liulele23:09:52]# env |grep liuleleUSERliulelePATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/liulele/.local/bin:/home/liulele/binMAIL/var/spool/mail/liulelePWD/home/liuleleLOGNAMEliuleleXDG_DATA_DIRS/home/liulele/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share2.2 su - /su -l 用户名带 -登录 shell【推荐】清空原有环境加载目标用户完整配置、自动进入对方家目录标准运维用法提示尽可能使用 loging shell 登录。# 不用加用户名的login shell[liulelecentos7 ~23:15:32]$su-l密码 上一次登录日7月1923:15:15 CST 2026pts/0 上# 所有环境变量都改为root用户# set打印当前所有shell变量、函数、环境参数、按照字母排序[rootcentos7 ~23:15:36]# set | grep liulele[rootcentos7 ~23:15:47]#2.3 常用参数-c 指定命令执行不用完整进入用户终端只以目标用户执行单条命令#前期准备# 添加一个用户[rootcentos7 ~23:16:02]# useradd laowang#非交互式设置密码为123[rootcentos7 ~23:20:56]# echo 123|passwd --stdin laowang更改用户 laowang 的密码 。 passwd所有的身份验证令牌已经成功更新。# 查看是否创建成功[rootcentos7 ~23:21:19]# grep laowang /etc/passwdlaowang:x:1003:1003::/home/laowang:/bin/bash# 以特定的用户身份执行特定命令[liulelecentos7 ~23:24:39]$su-llaowang-cid密码uid1003(laowang)gid1003(laowang)组1003(laowang)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023#加单引号[liulelecentos7 ~23:24:53]$su-llaowang-ccat /etc/hosts密码127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# 不加单引号[liulelecentos7 ~23:25:21]$su-llaowang-ccat/etc/hosts 密码 hello hello# 原因没有把 cat /etc/hosts 当作整体2.4 特殊场景切换 nologin 用户系统内置用户adm、ftpshell 是/sbin/nologin直接 su 会提示账号不可用root 可指定 bash 强制登录#su -l 创建文件位置在 ~liulele/haha[rootcentos7 ~23:28:21]# su -l -c touch haha liulele#su 无权创建# 原因nologin shell 执行当前位置不变导致liulele用户无法在/root下创建[rootcentos7 ~23:28:53]# su -c touch haha liuleletouch: 无法创建haha:权限不够# 切换 nologin shell 账户[rootcentos7 ~23:29:58]# grep adm /etc/passwdadm:x:3:4:adm:/var/adm:/sbin/nologin[rootcentos7 ~23:32:06]# su -l adm -c idThis account is currently not available.# 只有 root 用户可以指定 shell[rootcentos7 ~23:32:17]# su -l adm -s /bin/bash -c iduid3(adm)gid4(adm)组4(adm)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 强制指定bash登录[rootcentos7 ~23:35:58]# su -l adm -s /bin/bash上一次登录日7月1923:32:38 CST 2026pts/0 上 -bash-4.2$# 提示符不正常原因是家目录中缺少bash相关配置文件# 处理方法如下[rootcentos7 ~23:39:34]# grep adm /etc/passwdadm:x:3:4:adm:/var/adm:/sbin/nologin[rootcentos7 ~23:40:24]# cp /etc/skel/{.bash_profile,.bashrc} /var/admcp是否覆盖/var/adm/.bash_profileyes[rootcentos7 ~23:40:59]# su adm -l -s /bin/bash上一次登录日7月1923:38:28 CST 2026pts/0 上[admcentos7 ~23:41:09]$三、sudo 命令详解安全临时提权️sudo 全称substitute user do临时借用管理员权限执行单条命令企业运维首选从根本上说Linux实现了一个非常粗糙的获得权限模型root 可以做任何事情其他用户与系统相关什么也不能做。3.1 sudo 核心优势su 缺点用户必须知道 root 用户密码获取 root 用户所有权限。未记录用户执行命令。无法以/sbin/nologin的用户身份运行命令。sudo 优点sudo 允许用户以其他用户身份执行特定命令。sudo 需要用户输入用户自己的密码而非他们想访问的用户密码。sudo 执行的命令会记录在/var/log/secure文件中。3.2 基础语法 实操示例sudo 语法sudo [-u username] command# 有sudo权限的用户输入自己的密码确认是否本人操作[liulelecentos7 ~23:55:15]$sudoid我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大责任越大。[sudo]liulele 的密码uid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023#没有sudo权限的用户[liulelecentos7 ~23:55:22]$su- laowang 密码 上一次登录日7月1923:25:56 CST 2026pts/0 上[laowangcentos7 ~23:56:25]$sudoid我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大责任越大。[sudo]laowang 的密码 laowang 不在 sudoers 文件中。此事将被报告。3.3 sudo 权限配置重点绝对不要直接 vim 修改/etc/sudoers语法错误会锁死 sudo用专用命令# 设置色彩颜色[rootcentos7 adm 00:00:27]# export EDITORvim# 其中两条记录wheel组中成员可以以任何用户身份执行任何命令[rootcentos7 adm 00:00:50]# visudorootALL(ALL)ALL# 组以%开头%wheelALL(ALL)ALL示例1:用户拥有全部 root 权限# laowang 记录如下laowangALL(ALL)ALL验证[laowangcentos7 ~ 00:06:54]$sudoid[sudo]laowang 的密码uid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023示例2不需要输入密码情况下直接执行命令# laowang 记录如下 laowang ALL(ALL) NOPASSWD:ALL验证[laowangcentos7 ~ 00:10:51]$sudoiduid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023示例3只能够执行特定命令# laowang 记录如下laowangALL(ALL)/sbin/useradd,/sbin/usermod,/sbin/userdel验证[laowangcentos7 ~ 00:14:00]$sudoid[sudo]laowang 的密码 对不起用户 laowang 无权以 root 的身份在 centos7.wanho.cloud 上执行 /bin/id。[laowangcentos7 ~ 00:14:07]$sudouseraddlaozhang[sudo]laowang 的密码[laowangcentos7 ~ 00:14:27]$idlaozhanguid1004(laozhang)gid1004(laozhang)组1004(laozhang)**总结**在分配命令的时候切记只给用户特定功能的命令例如用户管理相关命令而不是通用功能的工具例如 vim。配置文件路径主配置文件/etc/sudoers正常情况不要修改。从配置文件/etc/sudoer.d/*如果想添加配置在此处添加。示例[rootcentos7 ~ 00:17:43]# echo laowang ALL(ALL) NOPASSWD:ALL /etc/sudoers.d/laowang[rootcentos7 ~ 00:17:59]# cat /etc/sudoers.d/laowanglaowangALL(ALL)NOPASSWD:ALL示例4组统一授权CentOS wheel组系统默认配置加入 wheel 组自动获得 sudo 权限# %wheel ALL(ALL) ALL# 将用户加入wheel补充组[rootcentos7 ~ 00:24:02]# usermod -aG wheel laozhang[rootcentos7 ~ 00:24:09]# id laozhanguid1004(laozhang)gid1004(laozhang)组1004(laozhang),10(wheel)[rootcentos7 ~ 00:24:13]# su - laozhang[laozhangcentos7 ~ 00:24:21]$sudoid示例5、高危 sudo 配置漏洞演示避坑配置用户 xiaoniuma 可以以root身份运行vim命令用户 xiaoniuma 将自己提权为 root 用户 - 方法一使用vim将/etc/passwd中用户的uid改为0 - 方法二将sudo规则中vim程序改为bash或者ALL# 创建用户[rootcentos7 ~ 00:27:52]# useradd xiaoniuma[rootcentos7 ~ 00:28:01]# echo 123|passwd --stdin xiaoniuma更改用户 xiaoniuma 的密码 。 passwd所有的身份验证令牌已经成功更新。#配置sudo[rootcentos7 ~ 00:28:14]# echo xiaoniuma ALL(ALL) /bin/vim /etc/sudoers.d/xiaoniuma# 切换用户并修改id[rootcentos7 ~ 00:28:54]# su - xiaoniuma[xiaoniumacentos7 ~ 00:29:06]$sudovim/etc/passwd# 修改 xiaoniuma 的 UID 为0xiaoniuma:x:0:1005::/home/xiaoniuma:/bin/bash# 验证[xiaoniumacentos7 ~]$su-lxiaoniuma 密码[rootcentos7 ~]#✅ 安全规范禁止给普通用户授予 vim、python、bash、less 等可逃逸 shell 的命令 sudo 权限。还原环境# 修改用户id为原来的1005[rootcentos7 ~ 00:34:39]# vim /etc/passwdxiaoniuma:x:1005:1005::/home/xiaoniuma:/bin/bash#强制删除[rootcentos7 ~ 00:35:32]# userdel -rf xiaoniumauserdel: user xiaoniuma is currently used by process9551[rootcentos7 ~ 00:35:38]# id xiaoniumaid: xiaoniuma: no such user# 删除sudo规则[rootcentos7 ~ 00:35:41]# rm -f /etc/sudoers.d/xiaoniuma四、su vs sudo 超清晰对比表对比维度susudo验证密码目标用户密码root 密码当前登录用户密码权限时效全程持有完整 root 权限单条命令临时权限执行即回收权限控制无细分全权限开放精细化配置限定可执行命令操作日志无完整审计记录操作存入 /var/log/secure 可追溯适用场景长时间批量运维操作日常单次管理员操作、多人协作安全等级低root 密码易泄露高遵循最小权限原则五、运维最佳实践建议优先使用 sudo少用 su日常修改配置、安装软件全部sudo 命令避免长期登录 root需要完整 root 环境用sudo -i替代su -。严格遵循最小权限不要给普通用户ALL全部权限只开放工作必需命令如仅允许重启 nginx、管理用户。统一用/etc/sudoers.d/存放自定义配置不修改主 sudoers 文件系统更新不会覆盖自定义权限规则。定期审计 sudo 操作日志查看/var/log/secure排查异常高权限操作防止权限滥用。多人服务器禁用通用 root 密码全员使用 sudo管理员单独加入 wheel 组杜绝 root 密码共享。六、实操练习可直接上机分别演示su、su -、sudo -i三种切换 root 方式对比环境变量差异创建用户 test配置 sudo 仅允许执行useradd/userdel验证无法执行sudo vim将 test 加入 wheel 组实现免密 sudo 权限模拟 sudo vim 权限漏洞演示如何通过编辑器提权为 root结尾总结不会覆盖自定义权限规则。定期审计 sudo 操作日志查看/var/log/secure排查异常高权限操作防止权限滥用。多人服务器禁用通用 root 密码全员使用 sudo管理员单独加入 wheel 组杜绝 root 密码共享。六、实操练习可直接上机分别演示su、su -、sudo -i三种切换 root 方式对比环境变量差异创建用户 test配置 sudo 仅允许执行useradd/userdel验证无法执行sudo vim将 test 加入 wheel 组实现免密 sudo 权限模拟 sudo vim 权限漏洞演示如何通过编辑器提权为 root结尾总结su 是 “全盘借钥匙”sudo 是 “临时门禁卡”生产环境优先 sudo 精细化授权既能满足运维需求又能最大程度保障服务器安全学会这套提权逻辑Linux 用户权限管理就吃透大半啦