私はCentOS上でApacheサーバーを実行しており、PHPページからいくつかのbashスクリプトを実行する必要があります。 PHPファイルからの書き込み権限や実行権限は必要ありません(例えば、shell_exec( 'ls/var/www/html/scripts /'))、書き込みや実行が必要なコマンドの実行に問題があります許可。PHPスクリプトからbashスクリプトを実行する
<?php
$output = shell_exec('/var/www/html/scripts/test.sh');
echo $output;
?>
私はApacheのユーザーの所有者を作り、scriptsディレクトリに必要な権限を付与された:
drwxr-xr-x. 2 apache apache 21 Jun 3 09:54 scripts
とtest.shファイルなどを見ることができますが、何もロックがありませんでした。例えば、これは何もしないコマンド
-rwxr-xr-x. 1 apache apache 51 Jun 3 09:54 test.sh
また、私はsudoのにPHPファイル内のコマンドを試してみましたが、sudoersファイルの末尾に以下の行を追加したが、何も変わっていません。
apache ALL=NOPASSWD: /var/www/html/scripts/test.sh
はまた、私はオフになり、制限はphp.iniファイルではありませんPHPのセーフモードを確認:
disable_functions =
あなたの種類のヘルプは高く評価されるだろう。
注:
私はbashスクリプトを編集し、以下のようにsudoのを追加しました:私は、このコマンドを使用してApacheユーザーとしてファイルを実行すると
#!/bin/bash
echo "Hi from test.sh";
sudo touch /var/www/html/scripts/file.log;
は今、それが正常に実行されます:
su -s /bin/sh apache -c "/var/www/html/scripts/test.sh"
しかし、PHPのWebページを介してそれが唯一の「test.shからこんにちは」エコー動作します。ライン。
su: pam_unix(su:session): session opened for user apache by root(uid=0)
sudo: apache : TTY=unknown ; PWD=/var/www/html ; USER=root ; COMMAND=/bin/touch fromweb.log
su: pam_unix(su:session): session closed for user apache
そして、生成されたログPHPのWebページから実行している:
sudo: apache : TTY=unknown ; PWD=/var/www/html/scripts ; USER=root ; COMMAND=/bin/touch fromweb.log
行方不明のpam_unix(SU:セッション)オープンとクローズ私はログをチェックすると、上記のコマンドを実行するために、以下の行があります。
エラーメッセージが表示されますか? – JazZ
apacheのデフォルトユーザーは 'www-data'です。 – JazZ
@JazZエラー報告がオフであるため、特別なエラーメッセージは表示されませんが、コマンドプロンプトからbashファイルを実行すると、次のエラーが発生します。 su -s/bin/sh apache -c "scripts/test.sh" .sh touch: 'file.log'に触れることができません:許可が拒否されました –