我真的想使用PAM模块pam_exec
在会话期间进行一些帐户设置和拆卸活动。我编写了一个简单的测试脚本,它运行并记录一些运行时数据,以便我可以看到正在发生的事情。
在我看来,exec'd脚本必须由运行触发PAM的命令的有效UID执行。这是有道理的。但是,我希望在此过程中获得更多安全性。例如,在我看来,如果我有一个脚本在帐户登录/注销时将记录戳到数据库中,则该脚本必须始终由所有用户执行。
我更希望脚本只能由root或其他特殊用途帐户显示和执行,并为非特权用户提供pam_exec
suid
脚本。
为什么呢?对于数据库脚本,我不希望用户登录,然后手动执行脚本,看似“注销”。
我已经考虑过将脚本放在“sudoers”文件中,但仍然允许任何人随时运行它。
似乎唯一的选择是破解pam_exec以允许“运行方式”选项。
周五下午晚了,我可能会遗漏一些微不足道的事情。还有更好的方法吗?
答案 0 :(得分:1)
在我看来,exec' d脚本必须可以执行 运行触发PAM的命令的任何人的有效UID。 这是有道理的。
听起来你正在"会话"下运行pam_exec线。如果您从" auth"运行pam_exec脚本它将由root用户(UID 0)运行,因此用户不再需要执行它。这样,用户将无法手动运行脚本来欺骗注销。
您也可以从"帐户"运行您的脚本。我认为pam模块执行用户权限的唯一时间是执行pam_open_session()或pam_close_session()时。
答案 1 :(得分:0)
我不完全确定我理解这个问题。如果您正在跟踪用户登录会话,该会话由以root身份运行的进程(无论是sshd还是登录或其他类似程序)设置。 PAM堆栈通常都通过打开会话以root身份运行。我不完全确定在会话创建过程中UID是永久更改的,但是在这个过程中相当晚,因为写入utmp等等都必须以root身份完成。
因此,您不太可能在正常登录会话中遇到此问题。非root用户使用PAM的主要位置是代表用户运行的屏幕保护程序,但这似乎就是您不希望用户运行脚本的情况。
如果您尝试将某些内容作为sudo或su的一部分运行,则问题可能是pam_exec
默认情况下将该程序作为真实用户ID运行。在这些情况下,我认为您可能需要将程序作为有效的用户ID来运行,以实现您想要的目标。 seteuid
有一个pam_exec
PAM选项,告知pam_exec
这样做。