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
を実行すれば,正常に追記されます.
乱文となってしまいましたが,追記されない原因の見当がついたかた,ご教授頂けると幸いです.
よろしくお願い致します.
No.1ベストアンサー
- 回答日時:
> echo 'apache-password' | sudo -S echo 'user-name: | /var/www/html/test.php' >> /etc/aliases
このコマンド実行だと、sudo の引数は「echo 'user-name: | /var/www/html/test.php'」までで、「>> /etc/aliases」 は、sudo コマンドではなく、それを呼び出しているシェルが解釈して処理することになります。
そのため、ファイル追記そのものはapache権限で実行しようとして、それで失敗します。
最初のecho自体が意味ありませので、実行すべきコマンドは、
> sudo -S /bin/sh -c "echo 'user-name: | /var/www/html/test.php' | >> /etc/aliases"
といった感じになるかと。試してませんが、元のPHPコードなら、
> $command = "sudo -S sh -c \"echo '{$_POST['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\"";
で無事追加できました.
本当に,ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql ページング 2 2022/09/20 06:38
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP ECCUBE4のページ管理でPHPを実行させたい 1 2023/04/06 11:42
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
scpコマンドでリモートサーバの...
-
lsコマンドで表示するファイル...
-
Warning: Output is not to
-
DOSコマンドでのワイルドカ...
-
ログイン状態になっているゾン...
-
AIX ksh利用 grep 検索で マ...
-
poderosa 操作方法について
-
FTP接続中のコマンド実行結果を...
-
Windows10のRegSys32に登録され...
-
rcpコマンドについて、教えて!
-
BATファイル実行にフォーカ...
-
今年の経過日数 linixコマンド...
-
kshのファイルが存在しない時
-
FTPコマンドの戻り値について
-
Viで書き込もうとすると、保...
-
findでエラー
-
「Linuxでネットワークドライブ...
-
書き込み権限が無いためコピー...
-
メールサーバの/var/spool/mail...
-
/ が何時の間にか「Read-only f...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
scpコマンドでリモートサーバの...
-
DOSコマンドでのワイルドカ...
-
rcpコマンドについて、教えて!
-
Illustratorのデータをまとめて...
-
IBM漢字コードのSJIS変...
-
FTP接続中のコマンド実行結果を...
-
Windows10のRegSys32に登録され...
-
属性変更できないです。
-
別名でリンク先を保存。
-
AIX ksh利用 grep 検索で マ...
-
telnet,rlogin,rshの違いってな...
-
Linux shell ftp 転送 エラー制御
-
lsコマンドで表示するファイル...
-
cron登録不可(´・ω・`)
-
【ターミナル】MacBookにディー...
-
linuxのreadコマンドについて
-
CPUのbit数を調べるコマンド
-
kshのファイルが存在しない時
-
WindowsでPATHにあるコマンドを...
-
コマンド プロンプトで作成し...
おすすめ情報