跳转到内容
搜索 AlmaLinux 文档

    浏览当前文档目录

    AlmaLinux 10:sudoers 改坏的代价与安全做法

    在 AlmaLinux 10.2 虚拟机(内核 6.12.0-211.64.1.el10_2)中实测:drop-in 授权、visudo -c(含错误用例)、sudo -l -U、以普通用户执行允许/未允许命令。日志:plans/content-expansion/evidence/logs/alma-sudoers-basics.log。

    先看清代价:一条坏规则全局失效

    Section titled “先看清代价:一条坏规则全局失效”
    Terminal window
    echo "this is bad" | sudo tee /etc/sudoers.d/bad
    sudo visudo -c; echo "rc=$?"
    /etc/sudoers.d/bad:1:9: syntax error
    this is bad
    ^~~
    rc=1

    只要有一个 drop-in 语法错,所有人的 sudo 都可能不可用。所以顺序永远是:写 → visudo -c → 再依赖。

    要求原因
    权限 440组/其他人可写会被 sudo 拒绝加载
    文件名不含 .、不以 ~ 结尾这类文件被 sudo 忽略
    主文件有 @includedir /etc/sudoers.d否则整个目录不生效
    Terminal window
    sudo printf 'labuser ALL=(root) NOPASSWD: /usr/bin/systemctl status sshd\n' | sudo tee /etc/sudoers.d/lab
    sudo chmod 440 /etc/sudoers.d/lab
    Terminal window
    sudo ls -l /etc/sudoers.d/
    sudo visudo -c
    -r--r----- 1 root root 84 ... /etc/sudoers.d/90-cloud-init-users
    /etc/sudoers: parsed OK
    /etc/sudoers.d/90-cloud-init-users: parsed OK
    /etc/sudoers.d/lab: parsed OK

    云镜像会为 cloud-init 用户预置授权(如 alma ALL=(ALL) NOPASSWD:ALL)。审计时别漏掉它——很多「为什么这个用户能免密 sudo」就来自这里。

    Terminal window
    sudo -l -U labuser
    su - labuser -c 'sudo -n /usr/bin/systemctl status sshd | head -2'
    su - labuser -c 'sudo -n /usr/bin/id'
    User labuser may run the following commands on alma10-lab:
    (root) NOPASSWD: /usr/bin/systemctl status sshd
    ● sshd.service - OpenSSH server daemon
    sudo: a password is required

    允许的命令执行成功;未列出的命令回落到密码校验,因用户无密码而失败——最小权限生效。

    AlmaLinux 10.2:visudo -c 与 sudo -l -U 的输出

    • 语法错不校验:一条坏规则让 sudo 全局不可用;
    • 权限写成 644:文件被忽略,授权「看起来配了但没生效」;
    • 给整条 systemctl:等于给了全部服务控制权;
    • 忽略 90-cloud-init-users:审计时漏掉云镜像预置的免密规则。
    Terminal window
    echo "bad line" | sudo tee /etc/sudoers.d/bad
    sudo visudo -c; echo "rc=$?"
    sudo rm -f /etc/sudoers.d/bad
    sudo visudo -c; echo "rc=$?"

    检查:

    1. 第一条 visudo -c 返回 rc=1 并指出行号列号
    2. 删除坏文件后 rc=0
    3. 全过程 sudo 仍可用(说明坏文件未被加载前就修掉了)

    常见问题

    改坏 sudoers 后还能 sudo 吗?

    如果坏文件已生效,sudo 会报语法错误并拒绝执行。此时用 root 直接删除或修正该文件,不要依赖 sudo。

    90-cloud-init-users 能删吗?

    可以,但先确认该用户的免密授权是否还被需要;删除后对应 cloud-init 用户会失去 sudo 权限,可能影响运维入口。

    权限 440 和 400 有区别吗?

    440 允许 root 组读,便于审计工具读取;400 仅 root 可读。两者 sudo 都接受,常见做法是 440。