Linux 提权管理
大多数时候Linux系统管理员以非特权用户身份登录系统,并使用工具暂时获得特权用户root管理系统。
su 命令
切换完整用户身份
su 的作用是直接切换成另一个账号,包括 root 管理员,切换后拥有对方完整权限。
suroot# 仅切换 root 身份,不加载 root 环境变量,易出问题,不推荐。su-# 完整登录 root,自动切换 root 家目录、加载完整环境,需输入 root 密码,推荐使用。su- 普通用户名# 完整切换到指定普通用户,输入该用户密码。su- root-c"指令"# 临时用 root 执行一条命令,执行完自动切回原账号。# 不加用户名的 nologin shell[xiaoma@centos7 ~13:59:44]$suPassword:`redhat`# 很多环境变量仍保留为xiaoma用户[xiaoma@centos7 ~14:00:15]$env|grepxiaomaHOSTNAME=centos7.xiaoma.cloudUSER=xiaomaMAIL=/var/spool/mail/xiaomaPATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xiaoma/.local/bin:/home/xiaoma/binPWD=/home/xiaomaHOME=/home/xiaomaLOGNAME=xiaomaXDG_DATA_DIRS=/home/xiaoma/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share# 不加用户名的 login shell[xiaoma@centos7 ~14:01:38]$su-l密码: 上一次登录:六7月1814:00:13 CST 2026pts/1 上# 所有环境变量都更改为了root用户[root@centos7 ~14:03:22]# set | grep xiaoma提示:尽可能使用 loging shell 登录。
# 添加一个用户[root@centos7 ~13:59:39]# useradd laowang# 设置密码为redhat[root@centos7 ~14:05:39]# echo redhat | passwd --stdin laowang更改用户 laowang 的密码 。 passwd:所有的身份验证令牌已经成功更新。[root@centos7 ~14:06:05]# grep laowang /etc/passwdlaowang:x:1001:1001::/home/laowang:/bin/bash# 以特定用户身份执行特定命令[root@centos7 ~14:06:59]# su -l laowang -c iduid=1001(laowang)gid=1001(laowang)组=1001(laowang)环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 加单引号[root@centos7 ~14:07:30]# su -l laowang -c 'cat /etc/hosts'127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# 不加单引号[xiaoma@centos7 ~14:10:28]$su-llaowang-ccat/etc/hosts 密码: hello hello# 原因:没有把 "cat /etc/hosts" 当作整体其他使用方法
# 创建的文件位置在 ~xiaoma/haha[root@centos7 ~14:09:12]# su -l -c 'touch haha' xiaoma# 无权创建[root@centos7 ~14:12:03]# su -c 'touch haha' xiaomatouch: 无法创建"haha":权限不够# 原因:nologin shell 执行,当前位置不变,导致xiaoma用户无法在/root下创建# 切换 nologin shell 账户[root@centos7 ~14:12:24]# grep adm /etc/passwdadm:x:3:4:adm:/var/adm:/sbin/nologin[root@centos7 ~14:12:43]# su -l adm -c idThis account is currently not available.[root@centos7 ~14:13:30]# su -l adm -s /bin/bash -c iduid=3(adm)gid=4(adm)组=4(adm)环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 只有 root 用户可以指定 shell[root@centos7 ~14:14:15]# su -l adm -s /bin/bash-bash-4.2$# 提示符不正常,原因是家目录中缺少bash相关配置文件# 处理方法如下:[root@centos7 ~14:15:56]# grep adm /etc/passwdadm:x:3:4:adm:/var/adm:/sbin/nologin[root@centos7 ~14:16:19]# cp /etc/skel/{.bash_profile,.bashrc} /var/adm[root@centos7 ~14:17:03]# su adm -l -s /bin/bash上一次登录:六7月1814:17:03 CST 2026pts/0 上[adm@centos7 ~14:17:13]$sudo 命令
临时借用管理员权限
从根本上说,Linux实现了一个非常粗糙的获得权限模型:root 可以做任何事情,其他用户与系统相关什么也不能做。
sudo 核心优势
- 不用共享 root 密码,每个人只用自己账号密码提权;
- 所有 sudo 操作会记录系统日志,能查到谁执行过管理员指令;
- 可以精细限制用户只能执行指定几条 root 命令,遵循最小权限原则。
usermod-aGwheel 用户名`# 给用户开通 sudo 提权权限(CentOS 仅 wheel 组可 sudo)。sudo指令# 临时以 root 权限运行指令,输入自己账号密码,无需 root 密码。sudo-i# 完整进入 root 交互终端,加载全部 root 环境。sudo-l# 查看当前账号允许执行的 sudo 权限。visudo# 编辑 sudo 权限配置文件,自带语法检测,避免配置损坏。# 有sudo权限的用户,输入自己的密码,确认是否是本人在操作[xiaoma@centos7 ~15:05:10]$sudoid[sudo]passwordforxiaoma:uid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 没有sudo权限的用户[laowang@centos7 ~15:06:01]$sudoidWe trust you have received the usual lecture from thelocalSystem Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.[sudo]passwordforlaowang: laowang is notinthe sudoers file. This incident will be reported.sudo 配置
[root@centos7 ~15:07:22]# export EDITOR=vim[root@centos7 ~15:07:50]# visudo# 其中两条记录,wheel组中成员,可以以任何用户身份执行任何命令rootALL=(ALL)ALL# 组以%开头%wheelALL=(ALL)ALL示例1:
# laowang 记录如下laowangALL=(ALL)ALL[laowang@centos7 ~]$sudoid[sudo]passwordforlaowang:uid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023**示例2:**不需要输入密码情况下,直接执行命令。
# laowang 记录如下laowangALL=(ALL)NOPASSWD:ALL[laowang@centos7 ~15:12:50]$sudoiduid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023**示例3:**只能够执行特定命令。
# laowang 记录如下laowangALL=(ALL)/sbin/useradd,/sbin/usermod,/sbin/userdel[laowang@centos7 ~15:15:30]$sudoid[sudo]passwordforlaowang:uid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023q[laowang@centos7 ~15:16:11]$sudouseraddlaozhang[sudo]passwordforlaowang:[laowang@centos7 ~15:15:20]$idlaozhanguid=1002(laozhang)gid=1002(laozhang)groups=1002(laozhang)**总结:**在分配命令的时候,切记只给用户特定功能的命令(例如用户管理相关命令),而不是通用功能的工具(例如 vim)。
配置文件路径:
- 主配置文件:
/etc/sudoers,正常情况不要修改。 - 从配置文件:
/etc/sudoer.d/*,如果想添加配置,在此处添加。
示例:
[root@centos7 ~]# echo 'laowang ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/laowang[root@centos7 ~]# cat /etc/sudoers.d/laowanglaowangALL=(ALL)NOPASSWD:ALL命令别名
Cmnd_Alias SOFTWARE=/bin/rpm, /usr/bin/up2date, /usr/bin/yum# sys组中成员执行以下命令别名中的所有命令%sys ALL=NETWORKING,# 网络管理员SOFTWARE,# 软件管理员SERVICES,# 服务管理员STORAGE,# 存储管理员DELEGATING,# 权限管理员(委派)PROCESSES,# 进程管理员LOCATE,# 文件系统更新DRIVERS# 驱动管理员提权总结
su 和 sudo 核心区别对比
- su
- 逻辑:完整切换成另一个用户,需要输入目标账号的密码(切 root 必须知道 root 密码)
- 适用场景:单人本地虚拟机、单机私用测试
- 风险点:多人共用服务器会泄露 root 密码,无法细分权限管控
- sudo
- 逻辑:临时借用 root 权限执行单条指令,输入当前自己账号的密码
- 前置条件:用户必须加入 wheel 组
- 适用场景:企业多人运维、线上生产服务器(首选)
- 优势:操作留审计日志、无需共享 root 密码、可精细化管控权限