
メールを受信したときに PHP スクリプトを実行するために Exim4 を使用しています。
このスクリプトは、/var/log/myapp フォルダーにファイルが存在しない場合は作成し、存在する場合はファイルを読み取ってログにコンテンツを追加します。
フォルダーに 777 権限を適用していくつかのテストを実行したところ、Exim4 で使用されるユーザーは であることがわかりましたnobody
。
ただし、場合によっては、管理ユーザー (例bob
) が PHP CLI 経由で PHP ファイルを手動で実行し、これらのログ ファイルを使用することもできます。
以下のコマンドを実行して、自分のユーザーと誰もフォルダーに書き込めるように追加しましたが、自分のユーザーだけがファイルを作成でき、'nobody' は作成できません。
sudo groupadd eximapplog
sudo usermod -a -G eximapplog bob
sudo usermod -a -G eximapplog nobody
sudo chgrp -R eximapplog /var/log/myapp
sudo chmod g+rwx /var/log/myapp
sudo chmod -R 775 /var/log/myapp
何が間違っているのでしょうか?
答え1
エラーは、ユーザー (bob) と「nobody」ユーザー間の権限レベルの違いによって発生するものだと思います。
PHP スクリプトまたは Exim4 構成を調整して、特定の非 root ユーザーとして実行できるようにします。
まず、新しいユーザーと新しいグループを作成します。
sudo adduser eximappuser
sudo groupadd eximappgroup
次に、eximappuserとbobを新しいグループに追加します。
sudo usermod -a -G eximappgroup eximappuser
sudo usermod -a -G eximappgroup bob
所有者の権利を変更する
sudo chown -R eximappuser:eximappgroup /var/log/myapp
次に、var/log/myappの権限を変更して、所有者とグループに読み取り、書き込み、実行を許可します。
Exim4
次に、 PHPスクリプトを「nobody」ではなく「eximappuser」として実行するように設定する必要があります。