DeltaForksLabs/odus

GitHub: DeltaForksLabs/odus

一款用 Rust 编写的轻量级提权工具,通过 TOML 规则和 PAM 认证在 FreeBSD/Linux 上替代 sudo/doas 执行特权命令。

Stars: 1 | Forks: 0

# odus 适用于 FreeBSD 和 Linux 的最小化提权工具 —— `sudo` 和 `doas` 的轻量级替代方案。这是一个 setuid-root 的二进制程序,可根据 `/etc/odus.toml` 中定义的规则以 root 身份运行命令。 ## 功能 - **PAM 身份验证** —— 原生集成 Linux-PAM 和 OpenPAM - **凭证缓存** —— 基于 TTY 会话或基于时间(1-60 分钟) - **灵活的规则** —— 支持按用户、用户组、精确命令或通配符前缀(`/usr/bin/python*`)进行匹配 - **免密模式** —— 针对特定命令跳过身份验证(`nopasswd = true`) - **Syslog 审计** —— 所有安全事件均记录到 `LOG_AUTHPRIV`(Linux)/ `LOG_AUTH`(FreeBSD) - **PATH 净化** —— 在执行 `execve` 前使用 `secure_path` 替换用户的 `PATH` - **防 TOCTOU** —— 所有文件操作均使用 `O_NOFOLLOW` + 对 fd 进行 fstat - **内存擦除** —— 密码缓冲区在 PAM 使用后立即清零 - **速率限制** —— 身份验证尝试之间有 2 秒的冷却时间 ## 安装说明 ### 前置条件 - FreeBSD(OpenPAM)或 Linux(glibc) - 带有开发头文件的 PAM 库 - Rust 稳定版工具链([rustup](https://rustup.rs)) ### 构建与安装 ``` make # build target/release/odus sudo make install # install to /usr/local/bin/odus, setuid-root ``` `make install` 会自动创建 `/etc/odus.toml` 和 `/etc/pam.d/odus`,并提供合理的默认配置。 ### 卸载 ``` sudo make uninstall ``` ## 配置(`/etc/odus.toml`) 首次运行时自动创建。必须为 `root:root` 所有,权限为 `0600` 的常规文件(拒绝符号链接)。 ### 示例 ``` cache_timeout = 15 max_tries = 3 secure_path = [ "/usr/bin", "/bin", "/usr/sbin", "/sbin", "/usr/local/bin", "/usr/local/sbin" ] # 'wheel' 组的成员可以运行任何内容 [[rules]] group = "wheel" cmd = "ALL" # 用户 'deploy' 可以在无密码的情况下重启服务 [[rules]] user = "deploy" cmd = "systemctl" nopasswd = true ``` ### 规则字段 | 字段 | 必填 | 描述 | |------------|----------|------------------------------------------------------------------| | `cmd` | **是** | 命令。`"ALL"`、精确名称、绝对路径或 `*` 通配符。 | | `user` | 否 | 用户名(精确匹配)。省略则匹配任何用户。 | | `group` | 否 | 组名(精确匹配)。省略则匹配任何用户组。 | | `nopasswd` | 否 | 设为 `true` 以跳过密码提示。默认值:`false`。 | 规则自上而下进行评估 —— 首次匹配生效。 ### 全局设置 | 键 | 类型 | 默认值 | 描述 | |-----------------|---------------|---------|-------------------------------------------------------------------| | `cache_timeout` | int | `15` | `-1` = 基于会话,`0` = 每次提示,`1-60` = 分钟(限制在此范围内)。 | | `max_tries` | int | `3` | 退出前的密码尝试次数(限制在 1-10 之间)。 | | `secure_path` | array/string | 6 个目录 | 用于解析裸命令名的受信任目录。 | ## 使用方法 ``` odus [args...] ``` ``` odus pkg update odus systemctl restart nginx odus --help ``` - `..` 和 `.` 路径段会被拒绝。 - 裸命令名(`sh`、`ls`)将通过 `secure_path` 目录进行解析。 - 在使用 `make install` 安装时,会自动为 bash、zsh 和 fish 安装 Tab 自动补全功能。 ## 贡献与反馈 欢迎提供反馈、问题报告、实验性尝试和有针对性的拉取请求。 优秀的贡献应当: - 控制更改的范围并解释其技术影响。 - 保留现有的演示和测试。 - 在行为发生改变时添加或更新测试。 - 避免不相关的格式化或重构。 - 在相关时提及其特定平台的渲染行为。 该项目目前仍在快速迭代中,因此在实现较大的 API 更改之前应先进行讨论。 ## 许可证 Odus 根据以下任一许可证授权: - MIT 许可证,详见 `LICENSE_MIT`。 - Apache 许可证 2.0,详见 `LICENSE_APACHE_2.0`。 在使用、修改或分发本项目时,您可以选择任一许可证。 ## 致谢 由 [Paulo Daniel](https://github.com/TrexPD) 和 [DeltaForks Labs](https://github.com/DeltaForksLabs) 构建。
标签:Awesome, FreeBSD, PAM认证, Python安全, Rust, setuid, Streamlit, sudo替代方案, syslog, TOCTOU防护, TOML配置, 二进制发布, 免密执行, 凭证缓存, 协议分析, 可视化界面, 子域名枚举, 开源工具, 最小权限, 权限提升, 特权管理, 系统安全, 系统管理, 网络流量审计, 访问控制, 通知系统