2009-12-22 110 views
1

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

如果没有以root用户身份运行,必须检查用户的登录凭据有哪些选项?

PS:在我的交互式shell我可以键入“苏根”,然后输入我的密码,它并提升到根细。因此很明显可以交互进行。

回答

1

关于你PS:好吧,当你做一个su root你切换到root用户。所以是的,当然,root可以读取影子文件,你都准备好了。

关于你的问题:你不能让你的apache进程临时升级到根目录(通过调用setuid或类似的方法)来执行身份验证吗?

祝你好运!

+0

应该指出,这只适用于因为'su'是suid root。如果不是,那么无论您尝试切换到哪个用户,它都会有相同的问题。 – 2009-12-22 19:28:12

+0

我不知道我明白你在说什么@Evan Teran。他正在做一个'su root'来切换到root用户。如果他做了一个'su randomUser',那么他就不能读取root的文件作为'randomUser',除非'root'给了'randomUser'许可。这不是一个给定的?或者我误解了你? – mrduclaw 2009-12-22 19:30:17

+0

使用SetUID解决了我的问题。因为我是Linux新手,所以之前我不知道这个功能。谢谢! – KPexEA 2009-12-22 19:48:09

3

我想你想看看Pluggable authentication modules。据我所知,PAM处理所有杂乱的东西给你,你只需要做几个函数调用的任何后端到Linux主机上的用户进行身份验证的用户身份验证时(无论是隐藏密码,NIS,LDAP,等等)

下面是关于将C代码与它们集成的简短guide

0

正如所建议的,我认为PAM是现代化的做法。但是,如果你想上学,你需要创建一个setuid-root程序(而不是脚本)来进行认证。

有很多使用setuid-root程序,这就是为什么PAM可能是更好的陷阱的。

Here's a link对安全编写的setuid-root程序的一些好论文。

+0

我刚刚意识到你也可以使用'sudo'将用户标识更改为root。这只是一个setuid-root程序,它已经内置了安全性。请注意如何设置它,或者像您自己的setuid-root程序一样,您将使系统容易受到攻击。 – 2009-12-22 20:17:42

相关问题