
Ich verwende Exim4, um PHP-Skripte auszuführen, wenn eine E-Mail empfangen wird.
Dieses Skript sollte eine Datei im Ordner /var/log/myapp erstellen, wenn diese nicht vorhanden ist, andernfalls sollte es die Datei einfach lesen und dem Protokoll weiteren Inhalt hinzufügen.
Ich habe einige Tests durchgeführt, bei denen ich die Berechtigung 777 auf den Ordner angewendet habe, und habe gesehen, dass der von Exim4 verwendete Benutzer ist nobody
.
In einigen Fällen kann mein administrativer Benutzer (z. B.) die PHP-Datei jedoch bob
manuell über die PHP-CLI ausführen und auch diese Protokolldateien verwenden.
Ich habe die folgenden Befehle ausgeführt, um meinen Benutzer und „niemand“ zum Schreiben in den Ordner hinzuzufügen, aber nur mein Benutzer kann Dateien erstellen, „niemand“ jedoch nicht.
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
Was könnte ich falsch machen?
Antwort1
Ich denke, der Fehler liegt an den unterschiedlichen Berechtigungsstufen zwischen Ihrem Benutzer (Bob) und dem „Nobody“-Benutzer.
Versuchen wir, das PHP-Skript oder die Exim4-Konfiguration so anzupassen, dass es als bestimmter Nicht-Root-Benutzer ausgeführt wird.
Zuerst erstellen wir neue Benutzer und eine neue Gruppe.
sudo adduser eximappuser
sudo groupadd eximappgroup
Dann fügen wir eximappuser und bob zu unserer neuen Gruppe hinzu
sudo usermod -a -G eximappgroup eximappuser
sudo usermod -a -G eximappgroup bob
Wir ändern die Eigentümerrechte
sudo chown -R eximappuser:eximappgroup /var/log/myapp
Dann ändern wir die Rechte von var/log/myapp, um dem Besitzer und der Gruppe das Lesen, Schreiben und Ausführen zu ermöglichen.
Dann müssen Sie Exim4
das PHP-Skript so konfigurieren, dass es als „eximappuser“ und nicht als „nobody“ ausgeführt wird.