用PHP脚本更改用户系统密码
问题描述:
因此,我有一个PHP脚本,需要以编程方式更改Linux用户密码。用PHP脚本更改用户系统密码
该脚本以www-data
(这是给予apache2的用户名)运行。我执行chpasswd
与popen
,然后fwrite
用户名:密码对。这会导致错误。
下降到一个bash shell,我试着看看这里发生了什么。当然,我怀疑这是某种权限问题。所以,我改变用户www-data
和尝试手动执行chpasswd
:
# su www-data
$ /usr/sbin/chpasswd
jsmith:mysecretpassword
Changing password for jsmith.
chpasswd: (user jsmith) pam_chauthtok() failed, error:
Authentication token manipulation error
chpasswd: (line 1, user jsmith) password not changed
因此,这揭示了为什么PHP是无法执行的命令。错误信息并不完全直截了当,但我想其实是发生了一个PAM authentication问题(我认为这基本上意味着Linux权限问题)。所以,如果我以su
为根,我可以通过chpasswd
成功更改密码。
所以显然这里的问题是,apache2(用户www-data
)没有sudo
特权。是否将www-data
添加到sudo
组是唯一的解决方案?因为我宁愿不这样做。但我在这里没有看到其他选择。
更广泛地说 - 除了这种情况的细节 - 它怎么连理论上可能对于可能需要更改用户密码才能够做到这一点,而无需sudo
权限的Web程序?但是,如果网络程序具有sudo
权限,那么这不是一个主要的安全问题吗?
答
我可能会设置一个以root用户身份运行的队列系统,并将PHP脚本添加到队列中,而不是让PHP有权访问任何权限升级。这也将关闭一些安全漏洞,尽管Web界面改变linux用户密码仍然听起来像一个坏主意。
你是说你正在检查他们的系统登录密码?作为非特权用户运行时,您不能更改其他用户的密码。你必须通过'sudo'来做到这一点。 – 2014-10-27 18:37:20