PHP スクリプトで Linux ユーザーのパスワードを変更できない

PHP スクリプトで Linux ユーザーのパスワードを変更できない

パスワード変更用の次の 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使用するための権限を追加し、次の行を追加します。sudovisudo

www-data   ALL=(ALL:ALL) ALL

その構文は

user    hosts=(users:groups)    commands

関連情報