2009-11-03 45 views
4

我目前正试图扩展我的公司的PHP驱动的Intranet网站。它基本上起到了一系列杂乱的报告和实用程序的作用,这些报告和实用程序是我一起抛出并链接到内部Web服务器上的。每当人们不断想完成同样的任务时,我会尽可能编写脚本并将其放在内联网页面上,这样人们就可以在没有我帮助的情况下完成任务。是否可以让PHP脚本通过他们的Linux用户信息验证用户身份?

到目前为止,这工作得很好,但有一些公用事业需要限制在管理者之类。现在,我知道我可以创建一个完整的注册系统来验证用户身份,就像在公共网站上进行身份验证一样,但坦率地说,这对所有参与者都是一种痛苦。所有用户在apache服务器上都有一个Linux用户帐户,所以我认为如果我能制作一个登录表单来验证用户的系统用户名/密码,然后检查他们的用户组看看他们是否有权力去做他们想做的事情(在这种情况下,他们将属于已经存在的“管理者”小组)。如果我能够把它解决的话,这对每个人来说似乎都是双赢的。用户不必注册并记住/维护/更新另一组凭证,而当我想添加或删除用户时,我没有做任何额外的事情。

这是可能的吗?如果没有任何预先存在的库来执行此操作,我可以直接执行它并让PHP读入并处理/ etc/passwd,/ etc/shadow和/ etc/group吗?

+0

重复:http://stackoverflow.com/questions/1275045/authenticate-in-php-with-os-username-password – 2009-11-03 15:31:40

回答

6

要直接访问的Linux的认证系统,你可以看看使用PAM模块:

http://pecl.php.net/package/PAM

按照文档,你需要配置pam以允许php访问它。在此之后,你可以调用PAM_AUTH函数来验证用户名/密码组合:

if (pam_auth($username, $password)) 
{ 
    // SUCCESS!!! 
} 
else 
{ 
    // FAILURE :(
} 
+0

这正是我登录所需要的。我得到它的工作,但有一个剩余的问题,我该怎么处理组?如何查看用户是否属于某个具有PHP的组?有没有比处理系统输出更优雅的方法(“groups $ username”)? – DWilliams 2009-11-04 16:21:25

+0

它在PHP 7中工作吗? – 2018-02-01 04:28:45

0

您需要确保Linux已启用LDAP。 PHP有很多内置的功能验证和这样的:

http://php.net/manual/en/book.ldap.php

+0

这是唯一的方法吗?我们的系统中没有使用LDAP,因为我们是一家小公司,而且这似乎还要求PHP重新编译为支持LDAP。 – DWilliams 2009-11-03 15:28:29

+0

我确定还有其他的方法,LDAP不是很重的东西,我已经实现了它很小的团体,这不是什么大不了的事情。 – ryber 2009-11-03 16:59:07

相关问题