
パスワード変更用の次の 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