0

我真的很想pam_exec在会话期间使用 PAM 模块进行一些帐户设置和拆卸活动。我编写了一个简单的测试脚本,它运行并记录一些运行时数据,以便我可以看到正在发生的事情。

在我看来,exec'd 脚本必须可由运行触发 PAM 的命令的任何人的有效 UID 执行。这是有道理的。但是,我希望在这个过程中更加安全。例如,在我看来,如果我有一个脚本可以在帐户登录/注销时将记录插入数据库,那么该脚本必须始终由所有用户执行。

我更希望脚本只能由 root 或其他一些特殊用途的帐户可见和可执行,并pam_exec suid为非特权用户提供脚本。

为什么?在数据库脚本的情况下,我不希望用户登录然后手动执行脚本以看似“注销”。

我曾考虑尝试将脚本放在“sudoers”文件中,但这仍然使任何人都可以随时运行它。

似乎唯一的选择是破解 pam_exec 以允许“运行方式”选项。

星期五下午很晚了,我可能错过了一些琐碎的事情。有没有更好的办法?

4

2 回答 2

1

在我看来,exec'd 脚本必须可由运行触发 PAM 的命令的任何人的有效 UID 执行。这是有道理的。

听起来您正在“会话”行下运行 pam_exec。如果您从“auth”运行 pam_exec 脚本,它将由 root 用户 (UID 0) 运行,因此用户不再需要执行它。这样,用户将无法手动运行脚本来欺骗注销。

您可能还可以从“帐户”行运行您的脚本,我相信只有当它执行 pam_open_session() 或 pam_close_session() 时才使用用户权限执行 pam 模块。

于 2013-05-23T22:54:41.687 回答
0

我不完全确定我理解这个问题。如果您正在跟踪用户登录会话,那是由以 root 身份运行的进程设置的(无论是 sshd 还是 login 或其他类似程序)。PAM 堆栈通常都通过打开会话以 root 身份运行。我不完全确定 UID 在会话创建过程中的哪个位置被永久更改,但在这个过程中已经相当晚了,因为写入 utmp 等,都必须以 root 身份完成。

因此,您不太可能在正常登录会话中遇到此问题。非 root 用户使用 PAM 的主要地方是代表用户运行的屏幕保护程序之类的东西,但这似乎正是您不希望用户运行脚本的情况。

如果您尝试将某些内容作为 sudo 或 su 的一部分运行,则问题可能是pam_exec默认情况下将程序作为真实用户 ID 运行。在这些情况下,我认为您可能需要将程序作为有效用户 ID 运行才能完成您想要的操作。有一个seteuidPAM 选项可以pam_exec告诉pam_exec您这样做。

于 2013-03-17T06:36:06.447 回答