※ ChatGPTを利用し、要約された質問です(原文:PHPでUNIXコマンドを発行してファイルへ追記できない)
PHPでUNIXコマンドを発行してファイルへ追記できない
このQ&Aのポイント
PHPでUNIXコマンドを使用してファイルへの追記ができない問題についての質問です。
現在、/etc/aliasesファイルへの文字列追加がうまくいかず、解決方法を求めています。
コマンドの実行が失敗しており、追記されない原因についてのアドバイスをいただきたいです。
PHPでUNIXコマンドを発行してファイルへ追記できない
PHPでUNIXコマンドを発行してファイルへ追記できない
現在,/etc/aliasesファイルへ,PHPから文字列を追加したいのですが,うまくいかず,皆様のお知恵を頂ければと思います.
現在,sudoersにapacheユーザを追加しており,パスワードを渡せば全権限を持たせています.
それで,PHP上で
$command = "echo '".___APACHEPASS___."' | sudo -S cp /etc/aliases /etc/alias_bak/aliases.bak.".date("YmdHis");
exec($command, $output);
とすれば,aliasesファイルのバックアップファイルが生成されます.
ところが,文字列を追記するため,コマンド
$command = "echo '".___APACHEPASS___."' | sudo -S echo '{$_POST['user_name']}: | /var/www/html/test.php' >> /etc/aliases";
を発行しても追記されません.
バックアップファイルコマンドが実行されれば,/var/log/secureにログが残りますが,追記コマンドでは失敗のログすら記録されていません.
なお,コマンド自体を表示させると,
echo 'apache-password' | sudo -S echo 'user-name: | /var/www/html/test.php' >> /etc/aliases
となっており,rootのコマンドラインで
echo 'user-name: | /var/www/html/test.php' >> /etc/aliases
を実行すれば,正常に追記されます.
乱文となってしまいましたが,追記されない原因の見当がついたかた,ご教授頂けると幸いです.
よろしくお願い致します.
お礼
ありがとうございました! 無事,aliasesファイルへ追記できました. ただ,少し補足なのですが,apacheユーザでsudoコマンドを実行するためにはセキュリティ上,パスワードを毎回入力する必要があるように設定しています. ですので,はじめのechoでsudoコマンドにapacheユーザのパスワードを渡しているのです. はじめのechoを削ると,パスワードが違うというエラーが返ります. ですので,今回回答者様に頂いたコマンドに,前のechoを足しまして, $command = "echo '".___APACHEPASS___."' | sudo -S sh -c \"echo '{$_POST['user-name']}: | /var/www/html/test.php' >> /etc/aliases\""; で無事追加できました. 本当に,ありがとうございました!