我正在编写一个用于Linux PAM的模​​块,该模块使用setuid()向正在验证的用户授予特权。当然,这仅在EUID为root的情况下有效。那么,PAM堆栈是否始终以root用户身份运行,而不管使用它的应用程序如何?

最佳答案

并非总是如此。大多数使用pam的应用程序都标记为setuid或具有setuid帮助器(就像许多标准插件都需要root一样),但是如果没有调用任何插件都需要特权,则可以使用没有root特权或升级方法的库。

一些例子:

使用/etc/shadow进行

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

  • 如果PAM模块需要root特权并且这些特权不可用,那么这完全是公平的(并且与其他模块的编写方式保持一致)。旨在与最广泛的PAM模块阵列兼容的软件将具有可用的特权升级路径,即使PAM库本身不提供这种机制也是如此。

    关于c - PAM堆栈是否始终以root用户身份运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24151556/

    10-09 09:18