基础语法固定模板
用户名 主机范围=(可切换用户/组) 执行权限: 允许的命令绝对路径1,允许的命令2
用户名 【主机范围】=(提权身份) 允许执行命令
- 用户名:生效用户
- 主机:在哪台机器生效,ALL = 全部主机
- (可切换用户):(ALL) 任意身份、(root) 仅 root、(www-data) 指定账号
- 修饰符:NOPASSWD: 免密执行;无修饰则需要输密码
- 命令:必须写绝对路径,多命令逗号分隔,ALL 代表所有命令
模板 1:全权限标准模板(需要密码)
# 用户cc 任意主机、可切所有用户、执行全部命令,执行sudo要输密码
cc ALL=(ALL) ALL
释义:cc 可 sudo 任意指令,切换任意用户,操作前输入自身登录密码。
模板 2:全权限免密模板(靶场高频提权)
# 用户cc 任意主机、全身份、全命令,sudo完全不用输密码
cc ALL=(ALL) NOPASSWD: ALL
利用:sudo bash 直接拿 root shell
模板 3:仅允许指定单条命令(免密,精准限制)
# 仅允许免密执行 cat /etc/shadow,其余sudo命令全部拦截
cc ALL=(ALL) NOPASSWD: /bin/cat /etc/shadow
限制:不能追加参数、不能简写 cat,必须完整匹配整条指令。
模板 4:允许多条指定命令,免密
# 允许免密执行cat读取shadow、systemctl管理nginx两条命令
cc ALL=(ALL) NOPASSWD: /bin/cat /etc/shadow, /usr/bin/systemctl restart nginx
模板 5:仅限定切换 root 身份,禁止切换其他用户
# 只能sudo切root,不能切换www-data、nobody等其他账号
cc ALL=(root) NOPASSWD: ALL
模板 6:限定主机(仅本地 127.0.0.1 生效)
# 仅本机登录拥有sudo权限,远程ssh登录不生效
cc 127.0.0.1=(ALL) NOPASSWD: ALL
模板 7:允许带用户组、禁止危险命令(黑白名单)
# 允许全部命令,但禁止sudo打开bash、perl逃逸提权
cc ALL=(ALL) ALL, !/bin/bash, !/usr/bin/perl
模板 8:仅允许执行程序,可自定义参数(通配符)
# 允许cat读取/etc/下任意文件
cc ALL=(root) NOPASSWD: /bin/cat /etc/*