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


Changing user system passwords with a PHP script

所以我有一个PHP脚本,需要用程序更改Linux用户密码。

脚本以www-data(这是指定给apache2的用户名)的形式运行。我用popen执行chpasswd,然后用用户名:密码对执行fwrite。这会导致一个错误。

我想看看这里发生了什么。当然,我怀疑这是某种权限问题。因此,我将用户更改为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身份验证问题(我认为这基本上意味着Linux权限问题)。所以,如果我su为root,我就可以通过chpasswd成功地更改密码。

很明显,这里的问题是apache2(用户www-data)没有sudo权限。这里唯一的解决方案是将www-data添加到sudo组吗?因为我宁愿不那样做。但我看不到其他选择。

更一般地说,除了这种情况的具体情况之外,对于一个可能需要更改用户密码才能在没有sudo权限的情况下更改用户密码的web程序来说,理论上是怎么可能的?但是,如果web程序具有sudo权限,那么这不是一个主要的安全问题吗?

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

调查这个和这个。第二种选择,尽管他们在底部有一个"安全"部分,里面有建议,但对我来说似乎并不安全,但这只是一种感觉。

我会选择网络通行证。