2017-06-03 48 views
1

私は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:セッション)オープンとクローズ私はログをチェックすると、上記のコマンドを実行するために、以下の行があります。

+0

エラーメッセージが表示されますか? – JazZ

+0

apacheのデフォルトユーザーは 'www-data'です。 – JazZ

+0

@JazZエラー報告がオフであるため、特別なエラーメッセージは表示されませんが、コマンドプロンプトからbashファイルを実行すると、次のエラーが発生します。 su -s/bin/sh apache -c "scripts/test.sh" .sh touch: 'file.log'に触れることができません:許可が拒否されました –

答えて

1

私は、問題が何であったかが分かりました。それはLinuxのSELinux機能のためでした。この機能は、最低特権ポリシーを適用し、不要なコマンドがLinuxで実行されることを拒否します。この機能を無効にした後、bashスクリプトが正常に実行されています。これを行うには、/ etc/selinux/configファイルを編集し、SELINUX = enforcingをSELINUX = disabledに変更してシステムを再起動します。しかし、これはセキュリティ上の理由で推奨されていません。以下のリンクをチェックして、SELinuxを完全に無効にするのではなく、いくつかの例外を作成することができます。

https://wiki.centos.org/HowTos/SELinux

+0

素晴らしい!ソリューションを投稿していただきありがとうございます。がんばろう。 – JazZ

+0

@JazZご協力ありがとう –

+0

ようこそ申し訳ありませんが、このソリューションにつながることはできません。 – JazZ

関連する問題