我正在为Linux PAM编写一个模块,它使用setuid()
删除正在进行身份验证的用户的权限。当然,这只有在EUID是root的情况下才有效。那么,PAM堆栈是否始终以root身份运行,无论应用程序使用它?
答案 0 :(得分:5)
并非总是如此。大多数使用pam的应用程序都标记为setuid,或者有setuid帮助程序 - 因为许多标准插件确实需要root用户 - 但如果没有调用的插件需要权限,则可以使用没有root权限的库或升级方法。
一些例子:
完全公平 - 并且与其他模块的编写方式一致 - 如果PAM模块需要root权限并且这些权限不可用,则会失败。旨在与最广泛的PAM模块阵列兼容的软件将具有可用的权限提升路径,即使PAM库本身不提供这样的机制。