Linux提权管理大多数时候Linux系统管理员以非特权用户身份登录系统并使用工具暂时获得特权用户root管理系统。su 命令示例1su username启动一个非登录shell使用当前的环境设置上一个用户示例2su -l username启动一个登录shell设置了shell环境username 省略时代表切换到root账户。# 不加用户名的 nologin shell[cywcentos7 ~13:33:57]$su密码# 很多环境变量仍保留为cyw用户[rootcentos7 cyw13:56:24]# env | grep cywHOSTNAMEcentos7.cywUSERcywPATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/cyw/.local/bin:/home/cyw/binMAIL/var/spool/mail/cywPWD/home/cywLOGNAMEcywXDG_DATA_DIRS/home/cyw/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share# 不加用户名的 login shell[cywcentos7 ~13:57:54]$su-l密码 上一次登录六7月1813:57:46 CST 2026pts/1 上[rootcentos7 ~13:58:27]# set | grep cywHOSTNAMEcentos7.cyw提示尽可能使用 loging shell 登录。# 添加一个用户[rootcentos7 ~13:59:12]# useradd laowang# 设置密码为redhat[rootcentos7 ~14:00:13]# echo redhat | passwd --stdin laowang更改用户 laowang 的密码 。 passwd所有的身份验证令牌已经成功更新。[rootcentos7 ~14:00:20]# grep laowang /etc/passwdlaowang:x:8891:8891::/home/laowang:/bin/bash# 以特定用户身份执行特定命令[cywcentos7 ~14:01:35]$su-llaowang-cid密码uid8891(laowang)gid8891(laowang)组8891(laowang)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 加单引号[cywcentos7 ~14:01:54]$su-llaowang-ccat /etc/hosts密码127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# 不加单引号[cywcentos7 ~14:02:35]$su-llaowang-ccat/etc/hosts 密码 hello#键盘输入hello回车hello#显示hello# 原因没有把 cat /etc/hosts 当作整体^C Session terminated, killing shell......已杀死。其他使用方法# 创建的文件位置在 ~cyw/haha[rootcentos7 ~14:04:52]# su -l -c touch haha cyw# 无权创建[rootcentos7 ~14:05:27]# su -c touch haha cywtouch: 无法创建haha:权限不够#原因nologin shell 执行当前位置不变导致cyw用户无法在/root下创建# 切换 nologin shell 账户[rootcentos7 ~14:06:02]# grep adm /etc/passwdadm:x:3:4:adm:/var/adm:/sbin/nologin#/sbin/nologin[rootcentos7 ~14:08:15]# su -l adm -c idThis account is currently not available.[rootcentos7 ~14:06:44]# su -l adm -s /bin/bash -c iduid3(adm)gid4(adm)组4(adm)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c102# 只有 root 用户可以指定 shell[rootcentos7 ~14:08:49]# su -l adm -s /bin/bash上一次登录六7月1814:08:45 CST 2026pts/1 上 -bash-4.2$# 提示符不正常原因是家目录中缺少bash相关配置文件# 处理方法如下-bash-4.2$su-lroot 密码 上一次登录六7月1814:04:52 CST 2026pts/1 上[rootcentos7 ~14:10:26]# grep adm /etc/passwdadm:x:3:4:adm:/var/adm:/sbin/nologin[rootcentos7 ~14:10:46]# cp /etc/skel/{.bash_profile,.bashrc} /var/adm/[rootcentos7 ~14:11:44]# su adm -l -s /bin/bash上一次登录六7月1814:09:47 CST 2026pts/1 上[admcentos7 ~14:12:08]$sudo 命令从根本上说Linux实现了一个非常粗糙的获得权限模型root 可以做任何事情其他用户与系统相关什么也不能做。su 缺点用户必须知道 root 用户密码获取 root 用户所有权限。未记录用户执行命令。无法以/sbin/nologin的用户身份运行命令。sudo 优点sudo 允许用户以其他用户身份执行特定命令。sudo 需要用户输入用户自己的密码而非他们想访问的用户密码。sudo 执行的命令会记录在/var/log/secure文件中。语法sudo [-u username] command# 有sudo权限的用户输入自己的密码确认是否是本人在操作[cywcentos7 ~16:42:23]$sudoid[sudo]passwordforcyw:uid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 没有sudo权限的用户[laowangcentos7 ~15:04:33]$sudoid我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大责任越大。[sudo]laowang 的密码 laowang 不在 sudoers 文件中。此事将被报告。sudo 配置[rootcentos7 ~15:06:11]# export EDITORvim[rootcentos7 ~15:06:46]# visudo# 其中两条记录wheel组中成员可以以任何用户身份执行任何命令rootALL(ALL)ALL# 组以%开头%wheelALL(ALL)ALL[rootcentos7 ~15:08:44]# visudo# 添加laowang 记录如下laowangALL(ALL)ALL[rootcentos7 ~15:10:05]# sudo iduid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023#不需要输入密码情况下直接执行命令# laowang 记录如下laowangALL(ALL)NOPASSWD:ALL[rootcentos7 ~15:12:15]# sudo iduid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023#只能够执行特定命令# 添加laowang 记录如下laowangALL(ALL)/sbin/useradd,/sbin/usermod,/sbin/userdel#验证[laowangcentos7 ~15:22:39]$sudoid[sudo]laowang 的密码 对不起用户 laowang 无权以 root 的身份在 centos7.cyw 上执行 /bin/id。[laowangcentos7 ~15:22:52]$sudouseraddlaozhang[sudo]laowang 的密码[laowangcentos7 ~15:23:13]$idlaozhanguid8892(laozhang)gid8892(laozhang)组8892(laozhang)**总结**在分配命令的时候切记只给用户特定功能的命令例如用户管理相关命令而不是通用功能的工具例如 vim。配置文件路径主配置文件/etc/sudoers正常情况不要修改。从配置文件/etc/sudoer.d/*如果想添加配置在此处添加。例[rootcentos7 ~15:26:58]# echo laowang ALL(ALL) NOPASSWD:ALL /etc/sudoers.d/laowang[rootcentos7 ~15:27:03]# cat /etc/sudoers.d/laowanglaowangALL(ALL)NOPASSWD:ALL命令别名Cmnd_Alias SOFTWARE/bin/rpm, /usr/bin/up2date, /usr/bin/yum# sys组中成员执行以下命令别名中的所有命令%sys ALLNETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS实践配置用户 xiaoniuma 可以以root身份运行vim命令用户 xiaoniuma 将自己提权为 root 用户 - 方法一使用vim将/etc/passwd中用户的uid改为0 - 方法二将sudo规则中vim程序改为bash或者ALL# 创建用户[rootcentos7 ~15:47:43]# useradd xiaoniuma[rootcentos7 ~16:52:06]# echo 123 | passwd --stdin xiaoniuma更改用户 xiaoniuma 的密码 。 passwd所有的身份验证令牌已经成功更新。# 配置sudo[rootcentos7 ~16:49:13]# echo xiaoniuma ALL(ALL) /bin/vim /etc/sudoers.d/xiaoniuma# 切换用户并修改用户id[rootcentos7 ~16:52:27]# su -l xiaoniuma上一次登录六7月1816:50:54 CST 2026pts/0 上# 修改 xiaoniuma 的 UID 为0[xiaoniumacentos7 ~16:52:37]$sudovim/etc/passwd#验证查看的UID显示为0与root用户相同进入该用户后命令提示符仍为[rootcentos7 ~ 16:55:32]#但通过pwd命令查看所在位置是显示未/home/xiaoniuma[rootcentos7 ~16:56:06]# grep xiaoniuma /etc/passwdxiaoniuma:x:0:8893::/home/xiaoniuma:/bin/bash[rootcentos7 ~16:55:23]# su -l xiaoniuma上一次登录六7月1815:45:07 CST 2026pts/0 上[rootcentos7 ~16:55:32]#[rootcentos7 ~17:02:10]# pwd/home/xiaoniuma[rootcentos7 ~1还原环境# 修改用户id为原来的1001[rootcentos7 ~17:02:16]# sudo vim /etc/passwdxiaoniuma:x:1001:8893::/home/xiaoniuma:/bin/bash# 删除用户[rootcentos7 ~17:05:36]# userdel -r xiaoniumauserdel/var/spool/mail/xiaoniuma 并不属于 xiaoniuma所以不会删除 userdel/home/xiaoniuma 并不属于 xiaoniuma所以不会删除[rootcentos7 ~17:05:54]# ls /home/cyw developer1 laowang laozhang tom xiaoniuma zhangsan#删除对应文件[rootcentos7 ~17:07:08]# rm -fr /home/xiaoniuma[rootcentos7 ~17:07:57]# rm -fr /var/spool/mail/xiaoniuma[rootcentos7 ~17:08:08]# ls /home/cyw developer1 laowang laozhang tom zhangsan# 删除sudo规则[rootcentos7 ~17:06:15]# rm -f /etc/sudoers.d/xiaoniuma总结以下是关于 Linux 中su和sudo使用的几条建议优先使用sudo而非susudo允许临时获取管理员权限操作完成后自动退回普通用户状态降低误操作风险而su会直接切换到 root 身份长期保持高权限状态存在安全隐患。限制su的使用范围尽量仅在需要长时间执行多个管理员操作时使用su且完成后立即通过exit退出 root 身份避免在 root 权限下进行日常操作。合理配置sudoers文件通过visudo命令配置sudoers精确控制用户可执行的管理员命令如user ALL(ALL) /bin/apt避免授予无限制的sudo权限。注意命令的完整路径使用sudo时尽量指定命令的绝对路径如sudo /usr/bin/apt update防止因环境变量篡改导致的安全风险。避免在脚本中硬编码sudo密码不要在脚本中直接写入sudo密码如通过管道传递可通过配置sudoers实现特定命令免密执行或使用更安全的权限管理方式。定期审计操作日志sudo的操作会记录在/var/log/auth.log或/var/log/secure中定期检查日志可追踪权限使用情况及时发现异常操作。使用sudo -i替代su进行交互式操作若需要类似su的交互式 root 环境可使用sudo -i它会加载 root 的环境变量同时保留sudo的日志记录功能。