在Linux系统中,提权是指从普通用户权限提升至更高权限(如root权限)的过程,通常用于系统管理或安全测试,合法的提权操作需要明确授权,以下将介绍常见的Linux提权命令及相关方法,涵盖基础命令、sudo配置、内核漏洞利用等场景,并总结安全注意事项。

基础提权命令
-
sudo命令
sudo是Linux中最常用的提权工具,允许普通用户以超级用户或其他用户身份执行命令,使用时需在sudoers文件中配置用户权限,格式为用户名 主机名=(目标用户) 命令。sudo -i:切换至root用户环境,加载root的配置文件(如.bashrc)。sudo su -:同样切换至root用户,但需输入root密码(若用户有sudo权限)。sudo ls /root:仅以root权限执行ls命令,查看root目录内容。
sudoers配置示例(通过
visudo编辑):user1 ALL=(ALL:ALL) ALL # 允许user1在任何主机上以任何身份执行任何命令 user2 ALL=/bin/ls,/bin/cat # 限制user2仅能执行ls和cat命令
-
su命令
su(switch user)用于切换用户,默认切换至root,需输入root密码,若当前用户已在wheel组(或sudo组),可通过su -直接切换,但部分系统需配置/etc/pam.d/su中的wheel组权限。
环境变量与路径提权
若环境变量(如$PATH)或命令路径配置不当,可能导致提权风险。

- PATH劫持:若
$PATH中包含当前用户可写的目录,且该目录存在同名命令(如ls),执行sudo ls时可能优先调用恶意脚本。 - Cron提权:若root通过cron执行包含用户可写目录的命令(如
* * * * * /usr/bin/find /home/user -name "*.txt" -exec grep "password" {} \;),用户可在/home/user下创建恶意find脚本,实现提权。
内核漏洞与SUID提权
-
SUID提权
SUID(Set User ID)权限允许用户以文件所有者的身份执行程序,若可执行文件设置了SUID位且属于root(如/usr/bin/passwd),普通用户执行时将获得root权限,可通过以下命令查找具有SUID权限的文件:find / -perm -4000 -type f -exec ls -la {} \;若发现
/usr/bin/vim具有SUID权限,可通过vim /etc/shadow读取root敏感文件。 -
内核漏洞利用
若内核存在未修复的漏洞(如Dirty COW、CVE-2021-4034等),可通过漏洞利用脚本获取root权限,利用Dirty COW漏洞(CVE-2016-5195)的命令示例(需在受影响系统上执行):gcc -pthread dirty.c -o dirty && ./dirty
注意:内核漏洞利用可能破坏系统稳定性,仅建议在授权测试中使用。
(图片来源网络,侵删)
配置错误与自动化工具提权
-
配置错误
- SSH密钥提权:若root用户的SSH公钥被写入
/root/.ssh/authorized_keys,且普通用户可修改该文件,可通过SSH直接登录root账户。 - 服务配置不当:若某些服务(如Docker、MySQL)以root权限运行,且普通用户可控制服务进程,可通过服务漏洞提权(如
docker run -v /:/host -it ubuntu chroot /host)。
- SSH密钥提权:若root用户的SSH公钥被写入
-
自动化提权工具
工具如LinPEAS(Linux Privilege Escalation Awesome Script)、Linux Exploit Suggester可自动扫描系统中的提权路径,包括SUID文件、内核漏洞、配置错误等,使用示例:wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh chmod +x linpeas.sh && ./linpeas.sh
安全注意事项
- 最小权限原则:避免为普通用户配置过于宽松的
sudoers权限,仅授予必要的命令执行权。 - 定期更新系统:及时修复内核漏洞和服务配置问题,降低利用风险。
- 审计日志:启用
sudo日志记录(通过/etc/sudoers中的Defaults logfile=/var/log/sudo.log),监控异常提权操作。
相关问答FAQs
Q1: 如何判断当前用户是否具有sudo权限?
A1: 可通过以下方式判断:
- 执行
sudo -l查看当前用户的sudo权限列表,若提示user1 is not allowed to run sudo on localhost,则无权限。 - 检查用户是否在
sudo组(grep sudo /etc/group)或wheel组(grep wheel /etc/group)。
Q2: 忘记root密码时,如何通过普通用户重置?
A2: 若普通用户具有sudo权限,可通过以下步骤重置:
- 使用
sudo passwd root命令直接修改root密码,按提示输入新密码两次。 - 若无sudo权限,可通过重启进入单用户模式(GRUB菜单编辑启动参数,添加
single或init=/bin/bash),挂载根文件系统为读写模式(mount -o remount,rw /),然后修改/etc/shadow中root密码字段为空(root::...),重启后无需密码登录root。
