(sd-pam) 进程如何摆脱无特权的`pam_session_close()`?

sou*_*edi 7 pam systemd

这是一个错误吗?

https://github.com/systemd/systemd/blob/v234/src/core/execute.c#L1126

            /* Drop privileges - we don't need any to pam_close_session
             * and this will make PR_SET_PDEATHSIG work in most cases.
             * If this fails, ignore the error - but expect sd-pam threads
             * to fail to exit normally */
Run Code Online (Sandbox Code Playgroud)

比较http://jdebp.eu./FGA/dont-abuse-su-for-dropping-privileges.html

新的实现调用 fork() 并且只在子进程中删除特权,保留一个特权帐户父进程,一旦子进程退出,它可以调用 PAM“用户会话”清理函数。(请参阅当代帐户,例如 Ben Collins 的这个帐户。)在父进程中打开 PAM“用户会话”并在子进程中关闭的初始实现被发现存在错误,例如 Debian Bug #195048, Debian错误 #580434 和 Debian 错误 #599731 又名 Gentoo 错误 #246813,因为非特权子进程没有访问权限来撤销所有会话设置,而在特权父进程中打开会话所做的一切。

在接下来的十年中,与 PAM 和 su 相关的点点滴滴不断涌现。例如,在 2004 年,SELinux 可插拔身份验证模块存在问题。

Jde*_*eBP 6

是的。事实上,这是一个 systemd 错误,在过去两年中一直处于开放状态(在撰写本文时),systemd 人员根据错误报告完全忽略了该错误。

根据 2000 年 Ben Collins 的分析和 2001 年 David Z Maze 对 GDM 登录pam_close_session()出错的分析,systemd 可能存在安全漏洞,等待好奇者发现。

进一步阅读