Невозможно изменить пароль пользователя Linux с помощью PHP-скрипта

Невозможно изменить пароль пользователя Linux с помощью PHP-скрипта

У меня есть следующий 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

Связанный контент