1

我用 C 语言编写了一个在浏览器中运行的 cgi-bin 应用程序,它允许用户在 Linux 机器上打开交互式 shell 并查看和编辑文件。它作为标准的 apache“www-data”用户运行。我只是在其中添加了一个登录屏幕,用户在其中输入他们的姓名和密码(在表单中),但我无法使用getpnam对用户进行身份验证,因为此功能仅在以 root 身份运行时才有效。

当不以 root 身份运行时,我必须检查用户的登录凭据有哪些选项?

PS:在我的交互式 shell 中,我可以键入“su root”,然后输入我的密码,它确实提升到 root 权限,因此显然可以交互完成。

4

3 回答 3

3

我想你想看看Pluggable authentication modules。AFAIK,PAM 为您处理所有乱七八糟的事情,您只需执行一些函数调用即可在后端对用户进行身份验证,以验证 Linux 主机上的用户(无论是影子密码、nis、ldap 等)

这是有关将 C 代码与它们集成的简短指南。

于 2009-12-22T19:26:30.787 回答
1

关于您的 PS:好吧,当您执行 a 时,su root您将切换到 root 用户。所以是的,当然,root 可以读取影子文件,你们都准备好了。

关于您的问题:您不能让您的 apache 进程暂时提升到 root(通过调用setuid或类似方式)以执行身份验证吗?

祝你好运!

于 2009-12-22T19:23:24.033 回答
0

正如所建议的,我认为 PAM 是执行此操作的现代方式。但是如果你想去老学校,你需要创建一个 setuid-root 程序(不是脚本)来进行身份验证。

setuid-root 程序有很多陷阱,这就是 PAM 可能更好的原因。

这是一些关于安全编写 setuid-root 程序的好论文的链接。

于 2009-12-22T20:15:24.973 回答