PAM堆栈是否始终以root身份运行?

时间:2014-06-10 21:59:20

标签: c linux pam setuid

我正在为Linux PAM编写一个模块,它使用setuid()删除正在进行身份验证的用户的权限。当然,这只有在EUID是root的情况下才有效。那么,PAM堆栈是否始终以root身份运行,无论应用程序使用它?

1 个答案:

答案 0 :(得分:5)

并非总是如此。大多数使用pam的应用程序都标记为setuid,或者有setuid帮助程序 - 因为许多标准插件确实需要root用户 - 但如果没有调用的插件需要权限,则可以使用没有root权限的库或升级方法。

一些例子:

  • 使用/ etc / shadow的标准身份验证确实需要root,如果这些权限不可用,读取/ etc / shadow的PAM模块将失败,除非您的平台的PAM模块用于读取/ etc / shadow bundle一个合适的setuid帮助器,直接从PAM模块调用它。
  • 使用LDAP进行身份验证通常不需要root,并且LDAP PAM模块可以在没有root权限的情况下使用。

完全公平 - 并且与其他模块的编写方式一致 - 如果PAM模块需要root权限并且这些权限不可用,则会失败。旨在与最广泛的PAM模块阵列兼容的软件将具有可用的权限提升路径,即使PAM库本身不提供这样的机制。