
У меня есть следующий 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'
работает отлично. Может кто-нибудь дать мне совет, почему я получаю в браузере ошибку, указанную выше?
Файловая система находится в режиме rw. Файлы /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
Браузер php запускается с использованием www-data
пользователя
Добавьте разрешения для www-data
использования sudo
через оболочку с помощью visudo
команды и добавьте эту строку
www-data ALL=(ALL:ALL) ALL
Его синтаксис:
user hosts=(users:groups) commands