使用数据库进行 sudo

使用数据库进行 sudo

我问今天有一个类似的问题,关于如何向 postgres 数据库验证我的服务器用户而不是/etc/passwd文件或 LDAP,我在那里得到了一些有用的答案。我发现我的服务器身份验证有三个部分需要处理:登录用户、设置他们的 uid 和 gid,并sudo在必要时授予他们访问权限。

我能够找到 postgres 的 NSS 和 PAM 模块,但没有关于如何使用数据库(尤其是 postgres)来sudo代替sudoers和 的信息sudoers.d。我试图找到 sudo 的插件,但似乎不存在 - 我只在sudo 网站插件页面

是否可以使用外部数据库sudo

答案1

通常的做法是将 sudo 视为一组配置文件。通过您选择的任何配置管理来管理它们,可以是 chef、puppet、CFengine、subversion、git 等,也可以简单地手动编辑它们。

当 sudo 中的权限/规则被赋予团体而不是个人时,根据我的经验,它们会变得非常静态,DBA 团队需要这样做,su - oracle; su - sybase ; /etc/init.d/oracle * ; /etc/init.d/sybase * 并且变化最大的是 DBA 团队的成员。

然后,您的 sudo 管理将简化为身份验证、用户和组管理。这就是 PAM 再次发挥作用的地方。配置 PAM 以使用集中管理的用户数据库,可以是 LDAP、NIS、Active Directory(LDAP + Kerberos),甚至是 MySQL 或 Postgresql 数据库。sudo 默认已经使用 PAM。

现在只需使用最有效工具来管理您的用户/组数据库即可。

答案2

如果我处于你的位置,我会使用 LDAP 来解决你所有三个问题:

  1. 登录/注销用户(身份验证)。/
    pam_ldapnss_ldappam_ldapd任何其他选项都存在。
    它们都经过充分验证且被广泛使用(这意味着操作系统供应商确保它们有效),那么为什么不使用它们呢?

  2. 设置它们的 UID 和 GID(属性。还有诸如主目录、shell、ETC)。
    已经通过解决(1)的相同工具解决了 - LDAP 目录中有用户和组信息,这要归功于RFC 2307 架构扩展几乎每个 LDAP 服务器都支持它。

  3. 授予人们 sudo(授权的一种特殊情况)。Sudo
    可以与 LDAP 目录通信,并且它附带架构规范。
    将其添加到您的目录中很简单,更改会立即生效。

如果你对 LDAP 有强烈的反对意见,并坚持在 SQL 数据库中管理这些信息,你可以使用 SQL 作为 OpenLDAP 的后端,但坦率地说,我认为这是错误的——数据不是自然“关系”的,你不应该试图强迫它成为关系。
如果你想这样做,因为你已经在 SQL 支持的用户存储方面投入了大量资金,那么你可能希望将其视为将这些用户纳入 LDAP 并将其他应用程序转换为针对 LDAP 目录进行身份验证/授权的过渡步骤。

LDAP/RFC 2307 确实是一个不错的用户账户管理模型(虽然它并不完美,因为它有一些我不赞同的愚蠢选择)。

作为奖励一大堆其他的事情以 LDAP 为母语(例如,微软的 Active Directory 只是 LDAP 加上一些附加功能,而且 MS 支持使用 RFC 2307 模式扩展 AD;Apache 具有使用 LDAP 的身份验证模块),因此通过使用 LDAP,您可以顺利进行单点登录,并且可以与微软的产品进行互操作,这是一项不错的功能。


你确实还有另外两个选择,但在我看来它们确实没有什么吸引力:

  1. 编写一个sudo插件来查询数据库
    这具有实时性的优势,就像使用 LDAP 一样。您需要成为一名相当优秀的程序员(或有一名程序员),但如果您要编写这样的插件,我相信您可以将其开源并找到一些愿意帮助开发的人。

  2. 将您的数据存储在数据库中并使用 cron 作业同步服务器。
    基本上就是定期生成一个新sudoers文件——编写代码确实很容易,但这绝对是一种不优雅的黑客行为。更新不是实时发生的这一事实意味着它在很多环境中都是行不通的。

相关内容