非常に厄介な exec の問題です。解決を手伝ってください...
私はオンライン プログラミング ページを作成しています。実行後にユーザーが作成したプログラムの出力値を取得するには、システム コール exec を使用する必要があります。私が書いたスクリプトは基本的に次のとおりです:
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
$command = "/var/program/userprogram";
exec($command, $data);
print_r($data);
ログイン後にコピー
(/var/program/) は Web のルート ディレクトリではありません
これは簡略化されています。 apacheユーザーとしてphp test.phpをコマンドラインで実行するとプログラムの実行データは正常に出力できますが、WEB上でこのファイルにアクセスするとArray([0] => sh: /var/program/userprogram:許可が拒否されました) が奇妙に表示されます。自分のコンピュータでは同じコードが問題にならないのですが、他のディレクトリでシステム以外のコマンドを実行できないようにする何らかのセキュリティ設定があるのではないかと非常に混乱しています。さらに、ユーザープログラムファイルをWebルートディレクトリに配置したところ、問題なく実行されました。 。 。
-----解決策---------chmod 777 /var/program/ 変更ユーザープログラムのコマンドラインで
------解決策------------------エグゼキュータは Linux 権限での実行に使用されます
Apache で使用されるのは、Apache プロセス アカウントの権限です
------解決策----------------------exec の使用には非常に疑問があります。このようなことを行うには、以下を支援するために c や sokcet などが使用されることが予想されます。
------解決策---------echo get_current_user();
まず、現在どのユーザーが実行しているかを確認します
------解決策----------------------権限の問題 Apache アカウントの権限では、それを実行できませんプログラム