所以我有一个需要以编程方式更改Linux用户密码的PHP脚本。
脚本以www-data
运行(这是给apache2的用户名)。我使用chpasswd
执行popen
,然后使用用户名:密码对fwrite
执行www-data
。这会导致错误。
下载到bash shell,我试着看看这里发生了什么。当然,我怀疑它是某种权限问题。因此,我将用户更改为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
:
su
因此,这揭示了PHP无法执行命令的原因。错误消息并不简单,但我认为它的主旨是发生PAM authentication问题(我认为这基本上意味着Linux权限问题)。因此,如果我chpasswd
为root,我已成功通过www-data
更改密码。
显然,问题在于apache2(用户sudo
)没有www-data
权限。这是唯一可以将sudo
添加到sudo
组的解决方案吗?因为我宁愿不这样做。但我在这里没有看到任何其他选择。
更一般地说 - 除了这种情况的具体情况之外 - 对于可能需要的网络程序,它甚至理论上 可能 更改用户密码,以便能够在没有sudo
权限的情况下这样做?但是,如果网络程序具有{{1}}权限,那么这不是一个重大的安全问题吗?