我有以下用于更改密码的 php 脚本: <?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); ini_set('display_error', true);
$cmd = 'sudo -u root sh -c \'/usr/bin/echo "username:pass" | sudo /usr/sbin/chpasswd 2>&1\'';
exec($cmd,$output,$return_val);
print_r($output);
echo $return_val;
?>
该脚本在浏览器中显示错误:
pam_chauthtok() failed, error: [1] => Authentication token lock busy [2] => chpasswd
但是命令
sudo -u root sh -c '/usr/bin/echo "username:pass" | sudo /usr/sbin/chpasswd 2>&1'
工作正常。有人能给我提示一下吗,为什么我在浏览器中遇到了上述错误?
文件系统处于读写模式。文件 /etc/{passwd,shadow} 具有正确的权限
先感谢您
答案1
ProtectSystem=full
解决方案是在 php-fpm.service 单元中注释掉:
# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit.
#ProtectSystem=full
答案2
www-data
浏览器 php 使用用户运行
通过 shell 使用命令添加要www-data
使用的权限并附加此行sudo
visudo
www-data ALL=(ALL:ALL) ALL
它的语法是
user hosts=(users:groups) commands