我今天问了一个类似的问题,关于如何将我的服务器用户authentication到postgres数据库,而不是/etc/passwd文件或LDAP,我在那里得到了一些有用的答案。 我发现我有三件服务器authentication需要处理:login用户,设置他们的用户名和gid,并在必要时给他们sudo访问权限。
我能够findpostgres的NSS和PAM模块,但没有关于如何使用数据库,尤其是postgres, sudo而不是sudoers和sudoers sudoers.d 。 我试图为sudofind一个插件,但它看起来并不存在 – 我只在sudo网站插件页面上find了一个插件。
有没有可能使用外部数据库的sudo ?
通常的方法是将sudo视为一组configuration文件。 pipe理他们,不pipe你select的configurationpipe理,让它成为厨师,木偶,CFengine,颠覆,混帐等,或者只是手动编辑它们。
当sudo中的特权/规则被赋予组而不是个人时,他们在我的经验中变得相当静态,DBA团队需要su - oracle; su - sybase ; /etc/init.d/oracle * ; /etc/init.d/sybase * su - oracle; su - sybase ; /etc/init.d/oracle * ; /etc/init.d/sybase * su - oracle; su - sybase ; /etc/init.d/oracle * ; /etc/init.d/sybase *以及DBA团队的成员变化最多。
然后,你的sudopipe理,然后减less到authentication,用户和组pipe理。 这就是PAM再次出现的地方。 configurationPAM使用集中pipe理的用户数据库,让它成为LDAP,NIS,活动目录(LDAP + Kerberos),甚至MySQL或Postgresql数据库。 sudo默认已经使用了PAM。
现在只需使用最好的工具来pipe理您的用户/组数据库。
如果我在你的位置,我会使用LDAP来解决你所有的三个问题:
logging用户进出(authentication)。
pam_ldap / nss_ldap , pam_ldapd或其他任何数量的选项都可以在这里find。
它们都经过了很好的validation和大量使用(这意味着操作系统供应商确保它们能够正常工作),为什么不使用它们呢?
设置他们的UID和GID(属性,也就像主目录,shell等 )。
已经解决(1)解决scheme相同的工具 – LDAP目录中有用户和组信息感谢RFC 2307架构扩展几乎每个LDAP服务器支持。
给人sudo(授权特例)。
Sudo可以与LDAP目录进行交谈,并附带一个模式规范。
把这个添加到你的目录是微不足道的,而且变化是立即被获取的。
如果您对LDAP有宗教上的反对意见,并坚持在SQL数据库中pipe理这些信息,那么您可以使用SQL作为OpenLDAP的后端 ,但坦率地说,我认为这样做会出错 – 数据不是自然的“关系”你不应该试图强迫它。
如果你想这么做,因为你已经在一个SQL支持的用户存储上投入了大量的资金,你可能想把它看作是让这些用户进入LDAP并将你的其他应用程序转换为对LDAP目录进行authentication/授权的过渡步骤。
LDAP / RFC 2307是一个非常好的用户帐户pipe理模式(虽然绝不是完美的 – 它有几个我不同意的脑死亡的select)。
作为一个奖励,其他一些事情本身就讲LDAP(例如微软的活动目录就是LDAP,有一些额外的东西挂在它上面,MS支持用RFC2307模式扩展AD; Apache有auth模块,它们讲LDAP),所以通过使用LDAP可以很好地实现单点login,并且可以与微软的产品互操作,这是一个非常好的function。
你有两个其他的select,但他们真的没有吸引力恕我直言:
编写一个sudo插件来咨询数据库 。
这具有实时性的优点,就像使用LDAP一样。 你需要是一个相当不错的编码器(或者有一个可用的编码器),但是如果你要编写这样一个插件,我相信你可以开源,find一些愿意帮助开发的人。
将数据存储在数据库中,并使用cron作业同步服务器。
基本上定期生成一个新的sudoers文件 – 真的很容易编码,但它绝对是一个不雅的黑客。 更新不会实时发生的事实意味着它在许多环境中都是不起步的。