给定用户名和密码,我需要检查本地系统上是否有用户使用所述用户名和密码。
我知道posix_getpwnam
并使用了这个PAM
包,但是这两种方法都要求 PHP 脚本可以访问/etc/shadow
. 我宁愿不要弄乱系统文件或守护程序用户的权限。
我想这可以通过弄乱标准系统命令(例如 )来完成sudo
,或者通过编写我自己的小型 setuid C 程序来完成。我还可以尝试使用所述用户名/密码通过 FTP 或 SSH 连接到 localhost 以验证它。有没有更简单的方法?
给定用户名和密码,我需要检查本地系统上是否有用户使用所述用户名和密码。
我知道posix_getpwnam
并使用了这个PAM
包,但是这两种方法都要求 PHP 脚本可以访问/etc/shadow
. 我宁愿不要弄乱系统文件或守护程序用户的权限。
我想这可以通过弄乱标准系统命令(例如 )来完成sudo
,或者通过编写我自己的小型 setuid C 程序来完成。我还可以尝试使用所述用户名/密码通过 FTP 或 SSH 连接到 localhost 以验证它。有没有更简单的方法?
如果你想要一种更原生的方式,你可以自己动手。我会更多地研究PAM:pam_authenticate。
我的意思是,您应该能够使用 PAM 创建一个验证但不需要 root 的应用程序,例如 sudo。
但是,如果您想要一个更简单的解决方案,您可以调用:
源 login.sh
#!/bin/bash
su $1 < `echo $2` #Need echo for the newline
在 PHP 代码中作为exec
语句login.sh
,第一个参数是用户名,第二个是密码。
我相信 ftp/ssh 是一种巧妙的方法,假设系统总是运行这些。
出于权限考虑,另一种可能性是编写一些脚本,将这些用户从 /etc/shadow 中拉出,并将此脚本作为 cron 作业运行以定期更新它。该脚本创建一个文件,其权限仅特定于运行您的 Web 的用户(apache 等),如果您真的想发疯,可以检查此文件,甚至可以将条目数据库化到 mysql。
第一个简单易做,第二个工作量更大。刚刚想到的另一种方法是通过 php 执行系统命令,例如 useradd $user 并检查返回。不过,这需要 sudo。
我还可以尝试使用所述用户名/密码通过 FTP 或 SSH 连接到 localhost 以验证它。
这就是我最终所做的(使用 PHP ssh2 扩展)。本地命令也通过相同的连接在用户的凭据下运行。