4

给定用户名和密码,我需要检查本地系统上是否有用户使用所述用户名和密码。

我知道posix_getpwnam并使用了这个PAM包,但是这两种方法都要求 PHP 脚本可以访问/etc/shadow. 我宁愿不要弄乱系统文件或守护程序用户的权限。

我想这可以通过弄乱标准系统命令(例如 )来完成sudo,或者通过编写我自己的小型 setuid C 程序来完成。我还可以尝试使用所述用户名/密码通过 FTP 或 SSH 连接到 localhost 以验证它。有没有更简单的方法?

4

3 回答 3

1

如果你想要一种更原生的方式,你可以自己动手。我会更多地研究PAMpam_authenticate

我的意思是,您应该能够使用 PAM 创建一个验证但不需要 root 的应用程序,例如 sudo。

但是,如果您想要一个更简单的解决方案,您可以调用:

源 login.sh

#!/bin/bash
su $1 < `echo $2` #Need echo for the newline

在 PHP 代码中作为exec语句login.sh,第一个参数是用户名,第二个是密码。

于 2010-07-31T20:01:22.693 回答
0
  1. 我相信 ftp/ssh 是一种巧妙的方法,假设系统总是运行这些。

  2. 出于权限考虑,另一种可能性是编写一些脚本,将这些用户从 /etc/shadow 中拉出,并将此脚本作为 cron 作业运行以定期更新它。该脚本创建一个文件,其权限仅特定于运行您的 Web 的用户(apache 等),如果您真的想发疯,可以检查此文件,甚至可以将条目数据库化到 mysql。

第一个简单易做,第二个工作量更大。刚刚想到的另一种方法是通过 php 执行系统命令,例如 useradd $user 并检查返回。不过,这需要 sudo。

于 2010-07-24T23:53:06.320 回答
0

我还可以尝试使用所述用户名/密码通过 FTP 或 SSH 连接到 localhost 以验证它。

这就是我最终所做的(使用 PHP ssh2 扩展)。本地命令也通过相同的连接在用户的凭据下运行。

于 2010-07-31T14:19:31.960 回答