9.Linux 提权管理(从零开始学)

发布时间:2026/7/20 21:16:25
9.Linux 提权管理(从零开始学) 大多数时候Linux系统管理员以非特权用户身份登录系统并使用工具暂时获得特权用户root管理系统。1. su 命令示例1su username启动一个非登录shell使用当前的环境设置上一个用户示例2su -l username启动一个登录shell设置了shell环境username 省略时代表切换到root账户。# 不加用户名的 nologin shell [fengkaicentos7 ~ 21:48:53]$ su 密码123 # 很多环境变量仍保留为fengkai用户 [rootcentos7 fengkai 21:48:56]# env | grep fengkai USERfengkai PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/fengkai/.local/bin:/home/fengkai/bin MAIL/var/spool/mail/fengkai PWD/home/fengkai LOGNAMEfengkai XDG_DATA_DIRS/home/fengkai/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share # 不加用户名的 login shell [fengkaicentos7 ~ 21:49:58]$ su -l root 密码 123 上一次登录日 7月 19 21:48:56 CST 2026pts/0 上 # 所有环境变量都更改为了root用户 [rootcentos7 ~ 21:50:02]# set | grep fengkai [rootcentos7 ~ 21:50:17]# env | grep fengkai [rootcentos7 ~ 21:51:40]# env | grep root USERroot MAIL/var/spool/mail/root PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin PWD/root HOME/root LOGNAMEroot XDG_DATA_DIRS/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share XAUTHORITY/root/.xauthotKKg2 [rootcentos7 ~ 21:51:45]#提示尽可能使用 loging shell 登录。准备一个用户# 添加一个用户 [rootcentos7 ~ 17:06:36]# useradd xiaowang # 设置密码为redhat [rootcentos7 ~ 17:11:15]# echo redhat | passwd --stdin xiaowang 更改用户 xiaowang 的密码 。 passwd所有的身份验证令牌已经成功更新。 [rootcentos7 ~ 17:11:35]# grep xiaowang /etc/passwd xiaowang:x:1005:1006::/home/xiaowang:/bin/bash# 以特定用户身份执行特定命令密码之前设置的redhat [fengkaicentos7 ~ 17:14:36]$ su -l xiaowang -c id 密码 uid1005(xiaowang) gid1006(xiaowang) 组1006(xiaowang) 环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 # 加单引号 fengkaicentos7 ~ 17:16:20]$ su -l xiaowang -c cat /etc/hosts 密码 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # 不加单引号 [fengkaicentos7 ~ 17:17:51]$ su -l xiaowang -c cat /etc/hosts 密码 hello hello # 原因没有把 cat /etc/hosts 当作整体其他使用方法# 创建的文件位置在 ~xiaowang/haha [rootcentos7 ~ 17:19:35]# su -l -c touch haha xiaowang # 无权创建 [rootcentos7 ~ 17:19:40]# su -c touch haha xiaowang touch: 无法创建haha: 权限不够 # 原因nologin shell 执行当前位置不变导致xiaowang用户无法在/root下创建 # 切换 nologin shell 账户 [rootcentos7 ~ 17:21:08]# grep adm /etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin [rootcentos7 ~ 17:21:25]# su -l adm -c id This account is currently not available. [rootcentos7 ~ 17:28:27]# su -l adm -s /bin/bash -c id uid3(adm) gid4(adm) 组4(adm) 环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 # 只有 root 用户可以指定 shell [rootcentos7 ~ 17:31:02]# su -l adm -s /bin/bash 上一次登录一 7月 20 17:31:02 CST 2026pts/0 上 -bash-4.2$ -bash-4.2$ exit 登出 # 提示符不正常原因是家目录中缺少bash相关配置文件 # 处理方法如下 [rootcentos7 ~ 17:33:00]# grep adm /etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin [rootcentos7 ~ 17:33:46]# cp /etc/skel/{.bash_profile,.bashrc} /var/adm [rootcentos7 ~ 17:38:24]# su -l adm -s /bin/bash 上一次登录一 7月 20 17:36:40 CST 2026pts/0 上 [admcentos7 ~ 17:38:27]$2. sudo 命令从根本上说Linux实现了一个非常粗糙的获得权限模型root 可以做任何事情其他用户与系统相关什么也不能做。su 缺点用户必须知道 root 用户密码获取 root 用户所有权限。未记录用户执行命令。无法以/sbin/nologin的用户身份运行命令。sudo 优点sudo 允许用户以其他用户身份执行特定命令。sudo 需要用户输入用户自己的密码而非他们想访问的用户密码。sudo 执行的命令会记录在/var/log/secure文件中。sudo 语法sudo [-u username] command# 有sudo权限的用户输入自己的密码确认是否是本人在操作 [fengkaicentos7 ~ 19:48:19]$ sudo id [sudo] fengkai 的密码 uid0(root) gid0(root) 组0(root) 环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 # 没有sudo权限的用户 [xiaowangcentos7 ~ 20:10:33]$ sudo id 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点 #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大责任越大。 xiaowang 不在 sudoers 文件中。此事将被报告。 [xiaowangcentos7 ~ 20:10:56]$sudo 配置[rootcentos7 ~ 20:21:54]# export EDITORvim [rootcentos7 ~ 20:22:09]# visudo # 其中两条记录wheel组中成员可以以任何用户身份执行任何命令 99 ## Allow root to run any commands anywhere 100 root ALL(ALL) ALL # 组以%开头 106 ## Allows people in group wheel to run all commands 107 %wheel ALL(ALL) ALL示例1# xiaowang 记录如下 100 root ALL(ALL) ALL 101 xiaowang ALL(ALL) ALL验证[xiaowangcentos7 ~ 20:11:11]$ sudo id [sudo] xiaowang 的密码 uid0(root) gid0(root) 组0(root) 环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023示例2不需要输入密码情况下直接执行命令。# xiaowang 记录如下 100 root ALL(ALL) ALL 101 xiaowang ALL(ALL) NOPASSWD:ALL验证[xiaowangcentos7 ~ 20:26:37]$ sudo id uid0(root) gid0(root) 组0(root) 环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023示例3只能够执行特定命令。# xiaowang 记录如下 100 root ALL(ALL) ALL 101 xiaowang ALL(ALL) /sbin/useradd,/sbin/usermod,/sbin/userdel验证[xiaowangcentos7 ~ 20:30:26]$ sudo id [sudo] xiaowang 的密码 对不起用户 xiaowang 无权以 root 的身份在 centos7.cloud 上执行 /bin/id。 [xiaowangcentos7 ~ 20:35:58]$ sudo useradd wang [sudo] xiaowang 的密码 [xiaowangcentos7 ~ 20:36:05]$ id wang uid1006(wang) gid1007(wang) 组1007(wang)总结在分配命令的时候切记只给用户特定功能的命令例如用户管理相关命令而不是通用功能的工具例如 vim。配置文件路径主配置文件/etc/sudoers正常情况不要修改。从配置文件/etc/sudoer.d/*如果想添加配置在此处添加。示例[rootcentos7 ~ 20:37:49]# echo laowang ALL(ALL) NOPASSWD:ALL /etc/sudoers.d/laowang [rootcentos7 ~ 20:38:42]# cat /etc/sudoers.d/laowang laowang ALL(ALL) NOPASSWD:ALL命令别名[rootcentos7 ~ 20:38:56]# visudo 26 ## Networking 27 # Cmnd_Alias NETWORKING /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhcl ient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/ iwconfig, /sbin/mii-tool # sys组中成员执行以下命令别名中的所有命令 104 # %sys ALL NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS案例配置用户 xiaoniuma 可以以root身份运行vim命令用户 xiaoniuma 将自己提权为 root 用户 - 方法一使用vim将/etc/passwd中用户的uid改为0 - 方法二将sudo规则中vim程序改为bash或者ALL操作过程# 创建用户 [rootcentos7 ~ 20:42:47]# useradd xiaoniuma [rootcentos7 ~ 20:43:28]# echo 123 | passwd --stdin xiaoniuma 更改用户 xiaoniuma 的密码 。 passwd所有的身份验证令牌已经成功更新。 # 配置sudo [rootcentos7 ~]# echo xiaoniuma ALL(ALL) /bin/vim /etc/sudoers.d/xiaoniuma # 切换用户并修改用户id [xiaowangcentos7 ~ 20:36:28]$ su -l xiaoniuma 密码 [xiaoniumacentos7 ~ 20:45:26]$ sudo vim /etc/passwd # 修改 xiaoniuma 的 UID 为0 51 xiaoniuma:x:0:1008::/home/xiaoniuma:/bin/bash # 验证 [xiaoniumacentos7 ~ 20:46:21]$ su -l xiaoniuma 密码 上一次登录一 7月 20 20:21:54 CST 2026pts/0 上 [rootcentos7 ~ 20:46:28]#还原环境# 修改用户id为原来的1001 [rootcentos7 ~ 20:44:54]# vim /etc/passwd 51 xiaoniuma:x:1008:1008::/home/xiaoniuma:/bin/bash # 删除用户 [rootcentos7 ~ 20:51:15]# userdel -fr xiaoniuma # 删除sudo规则 [rootcentos7 ~ 20:51:28]# rm -f /etc/sudoers.d/xiaoniuma3. 提权总结以下是关于 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的日志记录功能。4. 综合测试解析以下每个命令作用并且至少使用三个示例说明。1.su 命令使用说明大多数时候Linux系统管理员以正常用户身份登录系统在需要使用root权限时使用su命令暂时获得特权用户root管理系统。需要特权用户root的密码命令通常为su -l root2.sudo 命令使用说明sudo 允许用户以其他用户身份执行特定命令。sudo idsudo 需要用户输入用户自己的密码而非他们想访问的用户密码。sudo idsudo 执行的命令会记录在/var/log/secure文件中必要时候可以查看vim/var/log/secure