Eigentümer von neu erstellten Dateien UND Ordnern werden www-data statt superuser / admin

13

Ich hatte bisher Probleme mit Berechtigungen und habe eine andere Frage gestellt, aber das Problem identifiziert, ohne dass ich es noch beheben konnte.

Mein Setup:

  • Ubuntu Desktop mit LAMP-Stack
  • 5 "Benutzer" Ich habe Benutzer erstellt, die ich auf dem Ubuntu-Server mit erstellt habe sudo useradd -r -s /bin/false USERNAMEund die für den Zugriff auf die freigegebenen lokalen Netzwerkordner verwendet werden, dh für die Computer in meinem Netzwerk, um eine Verbindung mit dem mit Samba freigegebenen Ordner / var / www herzustellen.
  • BEARBEITEN: Der Zweck ist es, eine Art "Master-Localhost" zu erstellen, auf dem alle Computer in meinem lokalen Netzwerk lokal auf derselben Website arbeiten können (ich habe KEINE statische IP-Adresse, sodass der Server nicht von einem anderen Ort aus erreichbar ist). .

Mein Problem:

Wenn ich /var/www/htmlzurzeit auf einem Computer im Netzwerk einen neuen Ordner anlege (z. B. Ordner / var / www / html / testsite1), gehört dieser Ordner automatisch boris:www-data("boris" ist der Hauptadministrator auf meiner Ubuntu-Desktop-Installation) , und es zeigt in der Tat boris: www-Daten beim Ausführen ls -lauf dem neu erstellten Ordner), was Probleme mit meinem aktuellen Setup verursacht (mit Duplicator Plugin für WordPress von LifeInTheGrid meistens). Allerdings sind sowohl meine /var/wwwals auch meine /var/www/htmlim Besitz vonwww-data:www-data

Daher würde ich gerne wissen, wie ich:

  • Eigentümer in www-Daten ändern: www-Daten aller Dateien UND Verzeichnisse unter / var / www und / var / www / html

  • Stellen Sie sicher, dass alle Dateien oder Ordner, die ich mit einem der Benutzer meines Netzwerks erstelle, automatisch im Besitz von www-data sind: www-data (Dies schließt Dateien ein, die automatisch von PHP-Skripten erstellt werden, wie es das Duplicator-Plugin tut, wenn ich es bin nicht falsch).

Gibt es eine Möglichkeit, das zu tun?

Hinweis: Ich bin ein Super-Neuling in Sachen Linux und Kommandozeilen, aber ich hole schnell nach.

Hinweis 2: umask ist bereits auf 0002 eingestellt

BEARBEITEN:

Versuchte dies:

sudo chown -R www-data:www-data /var/www/

Und dann setuid und setgid Bits, indem Sie dies tun:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Dann abgemeldet, Apache neu gestartet und versucht, einen neuen Ordner mit einem Mac zu erstellen, der über die Netzwerk-IP (lokale IP, nicht statisch) mit meinem Server verbunden ist.

Ich rannte

ls -l on /var/www/html

Ausgabe ist noch:

drwxr-sr-x 2 boris   www-data  testsite1

Hinweis:

Ich habe meine Apache-Konfiguration schon einmal überprüft und es ist bereits festgelegt auf:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

BEARBEITEN: Ich habe es rückwärts versucht, z. B. alles eingerichtet, was boris gehört: www-data und meine envvars apache config auf boris: www-data gesetzt. ES FUNKTIONIERTE!

Folgendes habe ich getan:

Geändert von envvars zu

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

Apachem neu gestartet, einen neuen Ordner erstellt, meine Dateien hinzugefügt, das Plugin ausgeführt, jetzt heißt es gut !!!

Boris Chevreau
quelle
Aus Sicherheitsgründen ist es nicht ratsam, Dateien so einzurichten, dass sie dem Benutzer oder der Gruppe von WWW-Daten gehören. In seltenen Fällen kann es jedoch erforderlich sein, dass der Webserver für bestimmte Dateien Schreibzugriff benötigt. Was möchten Sie erreichen?
Thomasrutter

Antworten:

11

Antwort auf Frage 1: Rekursivchown

Mit einer rekursiven chownMethode können Sie den Besitz und die Gruppe auf das festlegen, was Sie möchten /var/www/.... Dies ist der Befehl, den Sie verwenden sollten:

sudo chown -R www-data:www-data /var/www/

Damit wird jede Datei und jeder Ordner dort mit diesen Eigentumsrechten als solche festgelegt.


Halbe Antwort auf Frage 2: setgidBit

Wenn Sie die Standardgruppenzugehörigkeit für Dateien wünschen, setzen Sie das setgidBit für den /var/www/htmlOrdner. Neue Dateien sollten dann mit dieser Gruppe wie im Ordner angegeben erstellt werden.

sudo chmod g+s /var/www/html

Sie müssen jedoch Schreibberechtigungen festlegen, wenn ein Benutzer ANDERE als www-datain die Verzeichnisse schreibt, und dies kann zu Sicherheitslücken führen, wenn Sie nicht vorsichtig sind.

Sie haben am Ende die folgenden Berechtigungen $USER:www-data: Zum Ändern des Besitzers verwenden Sie dann eine, chownwie in Methode 1 angegeben (dh, Sie sollten bei einer ordnungsgemäßen Einrichtung für den Zugriff auf die Webdateien auf Gruppen- und nicht auf Benutzerberechtigungen vertrauen).


PHP Wordpress Duplicator Problem

Das Problem mit den Berechtigungen ist, dass der Benutzer / die Gruppe PHP so ausführt, wie es das Schreiben und Lesen erfordert und wahrscheinlich +xdie Verzeichnisstruktur und dergleichen bearbeitet.

PHP www-datawird standardmäßig in Ubuntu-Installationen ausgeführt, die die Standardkonfigurationen verwenden. Idealerweise würden Ihre obigen Schritte das Problem beheben, da das Duplicator-Plugin kein PHP-Plugin ist.

Im Idealfall sollten Sie auch die Dokumentation für das Duplicator-Plugin überprüfen, um zu überprüfen, welche Berechtigungen für die Ausführung und die Arbeit erforderlich sind.

Thomas Ward
quelle
Mir gefällt die Setuid-Methode :)
Rinzwind
Genau das habe ich gesucht !!!! Einziges Problem: es hat nicht funktioniert :-( Ich habe einen Ordner auf meinem Mac erstellt (dh NICHT mit dem Ubuntu-Desktop-Computer), indem ich über seine lokale IP auf meinen Server zugegriffen habe. Als ich ls -l ausgeführt habe, das immer noch im Besitz von boris ist: www- Daten: - /
Boris Chevreau
Liegt es daran, dass ich Benutzerrechte für Dateien festgelegt habe, aber nicht für Ordner? Liegt es nur daran, dass der von mir erstellte Ordner NICHT automatisch im Besitz von www-data ist: www-data?
Boris Chevreau
Mac unterscheidet sich von Linux, und wenn Sie wirklich Pech haben, funktioniert diese Methode nicht und Sie müssen sich nicht nur mit einfachen Berechtigungen (wie ACLs und anderen Dingen) herumschlagen, um Standarddateien einzurichten . Auch "hat nicht funktioniert" ist mehrdeutig. Define hat nicht funktioniert und schließt Ausgaben als Änderungen an der Frage ein.
Thomas Ward
1
angewandt auf Verzeichnisse SetUID wird immer auf Linux ignoriert, iirc
muru
6

Um sicherzustellen, dass alle Dateien oder Ordner, die Sie erstellen, /var/www/htmlautomatisch in den Besitz von WWW-Daten gelangen, die Sie verwenden können inotify, werden Ordner / Dateien wie bei cron auf Änderungen an Attributen, Dateierstellungen, Änderungen und vielem mehr überwacht.

Zuerst installieren Sie es mit:

$ sudo apt-get install incron

Erlaube root die Verwendung incrondurch Öffnen /etc/incron.allowmit:

$ sudo vim /etc/incron.allow

und rootzur Datei hinzufügen , dann speichern und beenden.

Bearbeiten Sie Ihre Incrontab mit:

$ sudo incrontab -u root -e

und füge die folgende Zeile hinzu:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

speichern und schließen.

Sobald eine Datei im /var/www/htmlVerzeichnis erstellt wird, wird automatisch die Mitgliedschaft auf festgelegt www-data:www-data.

Erklärung der Zeile in Incrontab:

/var/www/html ist das Verzeichnis, das überwacht wird.

IN_CREATEwird nach erstellten Dateien suchen. Es ist die Dateiänderungsmaske .

/bin/chown -R www-data:www-data /var/www/html/ ist der auszuführende Befehl / die auszuführende Aktion.

krt
quelle
Sie können so etwas erreichen, ohne inotify und setgid - der Besitz von Benutzern sollte sich wahrscheinlich nicht oft ändern und sie können den Besitz von Benutzern selbst zurücksetzen ... oder ACLs verwenden, die ein Schmerz sein können
Thomas Ward
Der gesamte Zweck dieses Servers besteht darin, ihn als "lokalen Master-Host" zu verwenden, z. B. um Localhost-Websites zu erstellen und Testsites im Handumdrehen zu bearbeiten, zu ersetzen, zu verschieben und zu erstellen. Wenn ich alles manuell zurücksetzen muss, tötet es den gesamten Zweck: - /
Boris Chevreau
Ist dieser "Inkron" Weg der einzige Weg? Ich verstehe nicht, warum es so kompliziert sein muss. Was ich suche, ist eine einfache Möglichkeit für alle meine Computer im Netzwerk, eine Website auf diesem Server zu erstellen. Letztendlich habe ich keine statische IP (daher ist die Sicherheit kein Problem). Gibt es eine andere Trendwende, die Sie in Betracht ziehen würden?
Boris Chevreau
Danke, funktioniert wie ein Zauber!
Trurl
3

Eigentümer in www-Daten ändern: www-Daten aller Dateien UND Verzeichnisse unter / var / www und / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html ist hier impliziert (als Teil von / var / www /)
  • -Rmacht es rekursiv (so werden alle Verzeichnisse durchlaufen /var/www/).

Stellen Sie sicher, dass alle Dateien oder Ordner, die ich mit einem Benutzer meines Netzwerks erstelle, automatisch im Besitz von www-data sind: www-data

  • Innerhalb von / var / www / html / würde ich annehmen?

Setze deine Apache-Konfiguration auf www-data. Sehen/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Sie müssen Apache neu starten, nachdem Sie this ( sudo service apache restart) bearbeitet haben .

Dazu gehören Dateien, die automatisch von PHP-Skripten erstellt werden, wie es das Duplicator-Plugin tut, wenn ich mich nicht irre.

Das Problem hier ist wohl nicht das Plugin sondern PHP. Der Benutzer sollte derselbe Prozess sein, unter dem PHP ausgeführt wird. Sie müssen das also wahrscheinlich auch auf www-data setzen, wenn dies Ihr Benutzer und Ihre Gruppe sind ( /etc/php5/apache2/php.ini).

Rinzwind
quelle
Ubuntu-Standardeinstellungen führen PHP-Prozesse / -Arbeiter aus, genau www-datawie Debian, glaube ich.
Thomas Ward
Außerdem ist das Problem mit /var/www/htmlauch Gruppenbesitz und Lese- / Schreibrechten. Das andere Problem ist, dass alle von einem Benutzer erstellten Dateien vorhanden sein sollen www-data:www-data. Vermutlich sind dies Netzwerkbenutzer , nicht die Wordpress-Benutzer. Sie müssen also Linux-Dateiberechtigungen beantragen.
Thomas Ward
Dies sind in der Tat Netzwerkbenutzer. Diese Benutzer habe ich mit sudo useradd -r -s / bin / false USERNAME auf dem Ubuntu-Server erstellt und verwenden sie, um auf die freigegebenen lokalen Netzwerkordner zuzugreifen
Boris Chevreau,
Was ist, wenn ich den Besitz und die Schreibrechte aller Ordner und Dateien zurück auf boris: www-data ändere und dann die Envvars für Apache auf boris: www-data ändere? Würde das vielleicht das Problem beheben, wenn ich eine neue Datei erstelle, die als Eigentümer von boris: www-data festgelegt ist?
Boris Chevreau
2

Ich habe es gelöst! Ich denke immer noch, dass es ein Apache-Envvars-Problem war, aber ich bin mir nicht sicher, ob das das Problem wirklich gelöst hat.

Geändert von envvars zu

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

Jetzt funktioniert es soweit. Wird weiter testen ...

Boris Chevreau
quelle