コンテキスト:私は、プロジェクト内のさまざまなデータを処理するために作成したスクリプトライブラリ(.shと.php)にワンクリックでアクセスできるブラウザ内のコントロールパネルを作成しています。これはプロジェクトデータを管理するための「ワンストップショップ」です。
私は良い進歩を遂げました。私はApache、PHP、MySQLを実行しており、フロントエンドは次の場所にあります。http://localhost。これまではそんなに上手だった!
今私が持っている問題はこれです。デフォルトのApacheユーザー(私のコンピュータでは「_www」と呼ばれる)が私のスクリプトのいくつかを実行する権限がないようであることを除いて、うまく機能するindex.phpがあります。
だから私がするとき:
<?php
echo `ls`;
echo `whoami`;
echo `/Path/To/Custom/Script.sh`;
?>
ls
との出力を得ましたwhoami
が、カスタムスクリプトでは何の結果も得られませんでした。私がしたように(対話型シェルで)カスタムスクリプトを実行すると、もちろん動作します。
最後に私の質問は:何ですか?正しい設定する方法です。 Webサーバーは私のサーバーのように動作しますか?または、_wwwが自分のカスタムスクリプトを実行できるように権限を変更しますか?
答え1
/usr/local/bin
最善の方法は、Webサーバーが実行するのに十分な権限を持つ標準の場所(たとえば)にスクリプトを配置することです。
これがオプションでない場合は、スクリプトグループを変更してからchgrp groupname path
そのグループに対して実行可能にすることができますchmod g+x path
。_www
ユーザーがまだグループにいない場合は、グループに追加しますusermod -aG groupname _www
。
答え2
あなたの質問に答えるには、_wwwグループにスクリプト実行権限を付与するのが最善です。
ACLを使用して* .shスクリプトの権限を拡張して、_wwwグループのユーザーに実行権限を許可します。
cd /Path/To/Custom
setfacl -m g:_www:rx *.sh
また、/Path/To/Custom の各ディレクトリコンポーネントを確認し、Apache が /Path/To/Custom のスクリプトにアクセス (つまり、「表示」) していることを確認してください。
ls -ld /Path
ls -ld /Path/To
ls -ld /Path/To/Custom
最後のコンポーネント(習慣) ここで、Apache には実行および読み取り権限が必要です。たとえば、上記のすべてのディレクトリコンポーネントがその他許可買収これにより、Apacheには次のディレクトリでスクリプトを見つけるために必要なすべてのアクセス権があります。習慣目次。