sudo-rs sudoers 配置实践指南从写规则到安全护栏【免费下载链接】sudo-rsA memory safe implementation of sudo and su.项目地址: https://gitcode.com/GitHub_Trending/su/sudo-rs你给运维同事开 sudo 权限时是只开一条命令还是整台机器随便跑这份清单就藏在/etc/sudoers里。sudo-rs 用 Rust 重写了 sudo 的策略引擎这份配置文件决定了谁能以谁的身份跑什么命令读不懂它授权就是盲开。本文按先写规则、再谈认证、最后看护栏的顺序把它一次讲透。sudoers 到底管什么文件位置与四元模型先说结论sudo-rs 的所有授权判断都来自一个文件——/etc/sudoers官方说明见 sudoers.5 手册。它的语法与原版 sudo 兼容但只实现了其中安全的子集。怎么理解这个文件把它想象成一张门禁清单每条记录回答四个问题谁User哪个用户或用户组在哪Host哪台主机上生效以谁身份Runas执行时变成哪个用户或组做什么Cmnd允许运行哪些命令写规则时脑子里始终装着这四个槽位后面所有语法都是在往槽位里填东西。sudoers 语法速查从头写出一条完整规则别名体系先给槽位内容起短名四种别名对应四个槽位User_Alias、Host_Alias、Runas_Alias、Cmnd_Alias。格式统一为Cmnd_Alias LOG_CMD /usr/bin/journalctl, /var/log/命名规则很死板NAME只能由大写字母、数字、下划线组成且必须以大写字母开头所以web_admins是非法的要写成WEB_ADMINS。同类型的多个别名可以用冒号写在同一行。用户规范与 Runas_Spec 的四种情况主规则格式是用户 主机 (身份) 命令。括号里的 Runas_Spec 有四种含义容易踩坑写法效果(alice)以列表中的用户身份运行(%dev)仍是调用用户但组可切到 dev()只能以调用用户自己身份运行不写括号默认只能以 root 身份运行再叠加 Chdir_Spec 限定工作目录alice server CWD/var/www /usr/bin/systemctl目录必须是绝对路径或以~开头写CWD*表示放权给用户由sudo -D自己指定不写则默认继承调用用户当时的当前目录。Defaults给规则加全局调参Defaults 可以精确圈定作用域前缀即范围主机列表、:用户列表、!命令列表、运行身份列表不加前缀则是全局。列表类参数支持追加和-删除Defaults :web_team env_keep EDITOR, log_allowed_user_timeout 15身份认证是如何执行的默认要密码15 分钟免输默认规则很简单用 sudo 前先证明自己是谁。有三类例外直接放行调用者本身就是 root目标用户和调用者是同一个人策略里对该用户或该命令显式关了认证如NOPASSWD标签。和su的关键区别在于验的是谁的密码su 问的是目标用户通常是 root的密码而 sudo-rs 验的是调用者本人的凭证——毕竟 sudo 的语义是我授权你替我干活。想改回旧习惯可以打开rootpw标志。认证通过后不会每次都问密码靠的是 per-user 的 timestamp 凭证缓存文件。每条记录包含四个字段用于认证的用户 ID、终端会话 ID、会话主进程或父进程的启动时间、时间戳。默认15 分钟内timestamp_timeout可调免密复用。注意记录是按终端隔离的两个终端窗口各自认证、各自计时不会互相串号。执行环境如何被隔离env_reset 关不掉的白名单结论先行env_reset在 sudo-rs 里强制启用无法关闭。命令永远在全新、最小化的环境里启动用户带来的环境变量默认全部不继承。变量处理分四步HOME、SHELL、LOGNAME、USER按目标用户重新初始化SUDO_*系列则记录调用者信息PATH、TERM若未被env_keep/env_check保留会填默认值兜底LOGNAME和USER被当作一个整体处理保留或删除其一另一个同步跟随只存在一个时另一个自动补齐同值避免出现一半 root 一半你的分裂环境值以()开头的变量直接删除——防止被 bash 误解析成 shell 函数。PAM 模块贡献的变量会合并进环境但优先级低于用户环境里被保留的变量。日志与资源限制如何兜底审计侧sudo-rs 默认把成功、失败、错误三类事件全部写入 syslogjournalctl或/var/log里随时能查谁在什么时候试了什么、结果如何一目了然。资源限制则按平台各走各的路Linux通常由pam_limits.so模块按目标用户设置BSD 系由/etc/login.conf定义系统没有任何 per-user 机制时命令直接沿用调用用户的限制不额外收紧。安全配置落地清单改 sudoers 前对照一遍把日常操作压成一张可勾选清单逐项过用visudo编辑而非直接vi /etc/sudoers改错会当场被拦下授权遵循最小权限能开Cmnd_Alias就不开ALL重复出现的用户组、命令组用别名复用规则行保持一行一义定期翻 syslog 审计 sudo 尝试记录尤其是连续失败任何变更先落到测试环境跑一遍sudo -l验证匹配结果敏感命令在规则里写死参数如表示禁止带参防参数注入写在最后/etc/sudoers这套语法用了几十年没人会因为它老而弃用真正变化的是执行它的引擎。sudo-rs 的策略解析源码 用 Rust 的借用检查替代了 C 时代靠纪律维护的内存安全同样的门禁清单跑在内存安全的实现上攻击面小了一大截。理解了这份指南里的规则、认证、隔离、审计四层结构你既会用原版 sudo也接得住 sudo-rs 的默认行为差异。【免费下载链接】sudo-rsA memory safe implementation of sudo and su.项目地址: https://gitcode.com/GitHub_Trending/su/sudo-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?