读懂 sudo-rs 的 sudoers 配置从第一次输密码到不再踩坑【免费下载链接】sudo-rsA memory safe implementation of sudo and su.项目地址: https://gitcode.com/GitHub_Trending/su/sudo-rs刚把 sudo-rs 部署到生产机敲了条命令被要密码输完之后十几分钟不再问换个终端却又要。这不是 bug正是 sudoers 配置文件——sudo-rs 的权限策略核心——加凭证缓存在工作。按你实际会碰到的顺序看看这个文件到底在干什么。钥匙柜规则它到底管什么如果把 sudo-rs 想成办公室的钥匙柜sudoers 文件就是贴在柜子上的那页规则谁的钥匙能开哪扇门、钥匙在什么时段有效、每次取用要记哪本台账。一句话定义它声明哪些用户、在哪些主机上、能以什么身份、执行哪些命令文件默认位于/etc/sudoers解析逻辑集中在 src/sudoers/ 模块里。第一次用为什么还要输密码sudo 校验的不是 root 的口令而是调用者本人的——这是它和 su 最大的区别。只有三种情况会跳过输密码调用者已经是 root、目标用户就是你自己、或策略里给这条命令写了NOPASSWD。认证成功后sudo-rs 会把用户 ID、终端会话 ID、会话开始时间写进 timestamp 文件。同一个终端里默认 15 分钟内由timestamp_timeout参数控制不再重复询问换到另一个终端记录是独立的就得重新认证。所以同一台机器不同终端表现不一样属于正常行为不是状态没保存。配置写在哪怎么被解析sudoers 文件里只有两类条目。第一类是别名类似变量定义分 User_Alias、Runas_Alias、Host_Alias、Cmnd_Alias 四种别名必须大写字母开头只能含大写、数字和下划线。第二类是用户规范固定顺序是谁 在哪 (以什么身份) 干什么例如root ALL(ALL:ALL) ALL表示 root 可在任意主机以任何身份执行任何命令。括号里的 Runas_Spec 最容易看错只写用户列表就是以列表中某个用户身份运行只写组用户还是你自己组可以切到列表里的那些括号里两个都空表示以调用者身份运行整段不写等价于以 root 运行。Defaults条目则控制默认行为可以全局生效也可以按主机、用户、命令或运行身份限定范围列表型参数还支持和-增删。环境方面有个默认硬约束env_reset强制开启且无法关闭命令跑在全新的最小环境里。HOME、MAIL、SHELL、LOGNAME、USER 按目标用户初始化PATH 和 TERM 若未被保留就回落到默认值以(开头的变量会被直接剥掉防止被 bash 当成函数解释。出了问题去哪查默认情况下成功与失败的尝试都会写进 sysloglog_allowed和log_denied两个开关都是开着的所以先查审计日志再怀疑配置本身。编辑时别直接打开文件改用 visudo 走一遍——它在写入前做语法检查不会因为一个手抖就把系统锁死。实战两种常见配法场景一deploy 组只需要免密重启某个服务。Cmnd_Alias RESTART_APP /usr/bin/systemctl restart app %deploy ALL(root) NOPASSWD: RESTART_APP这样配的实际效果是deploy 组成员免密执行这一条命令其余任何命令照旧被拒。场景二允许某组以 www-data 身份跑 rsync并把工作目录锁死。%web ALL(www-data) CWD/srv/www /usr/bin/rsync *这样配的实际效果是rsync 只能落在 /srv/www 下执行用户没法用-D换到别的目录如果把*写成CWD*用户反而可以自行指定工作目录。安全机制与常见坑除了环境重置sudo-rs 用系统原生机制为目标用户设置资源限制Linux 上通常走pam_limits.so这类 PAM 模块BSD 上由/etc/login.conf指定系统没有提供机制时命令就沿用调用者的限制。另外命令默认跑在伪终端里use_pty开启能挡掉一部分终端注入类攻击。⚠️ 注意NOPASSWD是最容易手滑写宽的权限。一句ALL(ALL:ALL) NOPASSWD: ALL等于把 root 钥匙交给整个组生产环境请老老实实用 Cmnd_Alias 枚举具体命令而不是图省事打全通配。另一个经典误解是以为配了命令就等于配了参数——事实上除非在配置里枚举参数用户运行时可以随意补任何参数。上床前能做的三件检查跑一遍visudo -c确认当前 sudoers 没有语法错误。用sudo -l列出自己账号实际可用的权限清单和意图逐条对照。在日志里过滤含 NOPASSWD 的记录复查哪些命令免密、谁能用到。想再往下挖可以对照示例配置文件和man 页全部 Defaults 参数的清单在 src/defaults/mod.rs 里都有定义。【免费下载链接】sudo-rsA memory safe implementation of sudo and su.项目地址: https://gitcode.com/GitHub_Trending/su/sudo-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考