用PHP脚本更改用户系统密码

问题描述:

因此,我有一个PHP脚本,需要以编程方式更改Linux用户密码。用PHP脚本更改用户系统密码

该脚本以www-data(这是给予apache2的用户名)运行。我执行chpasswdpopen,然后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权限,那么这不是一个主要的安全问题吗?

+0

你是说你正在检查他们的系统登录密码?作为非特权用户运行时,您不能更改其他用户的密码。你必须通过'sudo'来做到这一点。 – 2014-10-27 18:37:20

我可能会设置一个以root用户身份运行的队列系统,并将PHP脚本添加到队列中,而不是让PHP有权访问任何权限升级。这也将关闭一些安全漏洞,尽管Web界面改变linux用户密码仍然听起来像一个坏主意。

调查thisthis。第二种选择,即使他们在底部有一个“安全”部分,但有些建议对我来说似乎并不安全,但这只是一种感觉。

我会去web-chpass。