Gewähren Sie einem Benutzer Berechtigungen für www-data owned / var / www

36

Ich habe ein einfaches Webserver-Setup für einige Websites mit einem Layout wie:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

Ich habe zuvor den Root-Benutzer zum Verwalten von Dateien verwendet und sie dann an den Zeitpunkt zurückgegeben, an www-datadem ich fertig war (WordPress-Sites, die für das Funktionieren von WP-Uploads erforderlich sind). Dies ist wahrscheinlich nicht der beste Weg.

Ich versuche einen Weg zu finden, um einen anderen Benutzer (nennen wir ihn Benutzer1) zu erstellen, der die Berechtigung hat, Dateien in Site1, aber nicht in Site2 zu bearbeiten, und der die Dateien nicht davon abhält, sich im Besitz von zu befinden www-data. Gibt es eine Möglichkeit für mich, dies zu tun?

George Pearce
quelle

Antworten:

70

Wenn wir die Inhaberschaft von site1 überprüfen, werden wir so etwas finden,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Dies bedeutet, dass das Verzeichnis dem Benutzer root und der Gruppe root gehört. Während der Benutzer root über Schreibrechte (plus Lese- und Ausführungsrechte) für das Verzeichnis verfügt, hat der Gruppenstamm nur Lese- und Ausführungsrechte.

Wir möchten den Gruppeneigentum in eine andere (neue) Gruppe ändern und Benutzer1 zu dieser bestimmten Gruppe hinzufügen. Wir werden auch dieser bestimmten Gruppe eine schriftliche Erlaubnis erteilen.

Erstelle eine neue Gruppe,

sudo addgroup site1

Fügen Sie der neu erstellten Gruppe user1 hinzu.

sudo adduser user1 site1

Überprüfen Sie, ob Benutzer1 wirklich zu dieser Gruppe gehört.

groups user1

Die Ausgabe sollte so etwas wie eine Liste sein,

user1 : <other-groups> site1

Jetzt können wir den Gruppeneigentum Ihres gewünschten Verzeichnisses ändern.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Erteilen Sie diesem neuen Gruppeninhaber eine Schreibberechtigung.

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Überprüfen Sie, ob alle Änderungen vorhanden sind.

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Das Verzeichnis gehört jetzt dem Benutzer root, Gruppe site1. Sowohl der Benutzer root als auch die Gruppe site1 haben Schreibrechte (plus Lese- und Ausführungsrechte) für das Verzeichnis. Jeder Benutzer, der zur Gruppe site1 gehört, verfügt über alle Berechtigungen, die dieser Gruppe gewährt wurden.

Melden Sie sich jetzt als Benutzer1 an, wechseln Sie in das Verzeichnis Site1 und versuchen Sie, eine Datei in diesem Verzeichnis zu erstellen.

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Dies ist fehlgeschlagen, da die primäre Gruppe von Benutzer1 höchstwahrscheinlich nicht Standort1 ist. Wechseln Sie zu dieser Gruppe.

newgrp - site1

Versuchen Sie, die Datei neu zu erstellen (achten Sie darauf, dass Sie nach dem Ändern der Gruppe in das Ausgangsverzeichnis von Benutzer1 verschoben wurden). Dies sollte nun funktionieren. Da die erstellten Dateien über eine Leseberechtigung für die ganze Welt verfügen, sollte es für Apache (oder Ihren Webserver) kein Problem geben, auf sie zuzugreifen.

BEARBEITEN

Wie im Kommentar von dan08 erwähnt , müssen Sie der Gruppe site1 auch WWW-Daten hinzufügen.

sudo adduser www-data site1

Bei vielen (nicht allen) Distributionen ist www-data der Benutzer, unter dem der Apache-Webserver ausgeführt wird. Dies bedeutet auch, dass alle von Apache ausgeführten Aktionen (insbesondere PHP-Skripte) standardmäßig mit den Berechtigungen des Benutzers www-data (und auch der Gruppe www-data) ausgeführt werden. WordPress verwendet die Benutzer-WWW-Daten, um Dateien zu schreiben.

Wenn Sie sehen möchten, wie der Apache-Webserver ausgeführt wird, geben Sie den folgenden Befehl ein:

ps aux | grep apache2 | less
Masroor
quelle
1
Sie müssen der Gruppe site1 auch WWW-Daten hinzufügen. Beim Hochladen und Ändern von Dateien in der Wordpress-Weboberfläche. Die Änderungen werden von Apache unter Verwendung des Benutzers www-data vorgenommen. Leserechte reichen daher meist nicht aus.
Dan
3
Die Permission deniedNachricht ist nicht auf die "primäre Gruppe" zurückzuführen, sondern auf den Benutzer, der sich noch nicht in dieser Gruppe befindet (was das Betriebssystem betrifft). Wenn Sie sich abmelden und wieder anmelden, funktioniert es wie erwartet (ohne ausgeführt zu werden newgrp - site1).
0b10011
Wie genau würde sich dies von der Vergabe von www-dataGruppenschreibrechten unterscheiden, wenn Sie www-datadiese site1trotzdem erweitern müssten?
Matt
@MattBorja Ihre Frage ist nicht sehr klar. Fragen Sie, was falsch ist, wenn Sie der Gruppe mit dem Namen " www-data' write permissions? If that is the question, www-data" keine Gruppe geben, sondern einen Benutzer. Bitte lassen Sie mich wissen, wenn ich Ihre Frage falsch verstanden habe.
Masroor
Ich denke, dies ist keine sichere Konfiguration, da Benutzer über ein PHP-Skript, beispielsweise einen PHP-Dateimanager, auf die Websites des anderen zugreifen können.
qdinar
7

Erstellen Sie zwei Gruppen: site1grpundsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

www-dataZu beiden Gruppen hinzufügen .

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Fügen Sie den entsprechenden Gruppen Benutzer1 und Benutzer2 hinzu

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Ändern Sie die Berechtigung Ihrer Site-Ordner so, dass der Benutzerbesitzer "www-data" und der Gruppeneigentümer die entsprechende Gruppe ist

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Verfügt jetzt www-dataüber die Benutzer- und Gruppenberechtigungen auf beiden Sites und jeder Benutzer verfügt über die Gruppenberechtigungen für die jeweilige Site.

Dan
quelle
4

Für diejenigen, die ihren WordPress-Stammordner unter ihrem Home-Ordner haben:

Ubuntu / Apache

  1. Fügen Sie Ihren Benutzer zur www-Datengruppe hinzu:

    CREDIT Erteilen von Schreibrechten für die WWW-Datengruppe

    Sie möchten usermodIhren Benutzer anrufen . Das wäre also:

    sudo usermod -aG www-data yourUserName
    

    Angenommen, die www-dataGruppe existiert

  2. Überprüfen Sie, ob sich Ihr Benutzer in der www-dataGruppe befindet:

    groups yourUserName
    

    Sie sollten etwas bekommen wie:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName ähnelt normalerweise Ihrem Benutzernamen

  3. Ändern Sie rekursiv den Gruppeneigentum des Ordners und behalten Sie den Besitz Ihres Benutzers

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Wechseln Sie in IhrWebSiteFolder-Verzeichnis

    cd yourWebSiteFolder
    
  5. Ändern Sie die Gruppenvoraussetzungen der Ordner und Unterordner rekursiv, um die Schreibberechtigungen zu aktivieren:

    find . -type d -exec chmod -R 775 {} \;
    

    Modus von /home/yourUserName/yourWebSiteFolder/'geändert von 0755 (rwxr-xr-x)zu0775 (rwxrwxr-x)

  6. Ändern Sie die Gruppenvoraussetzungen der Dateien und Unterdateien rekursiv, um die Schreibberechtigungen zu aktivieren:

    find . -type f -exec chmod -R 664 {} \;
    

    Das Ergebnis sollte ungefähr so ​​aussehen:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Gleichwertig:

    chmod -R ug+rw foldername
    

    Berechtigungen werden wie 664 oder 775 sein.

Jadeye
quelle
3

Sie müssen eine neue Gruppe für den sogenannten "neuen Benutzer" erstellen und dann die WWW-Daten und den "neuen Benutzer" zu dieser Gruppe hinzufügen:

sudo gpasswd -a new_user new_group

Dann können Sie den Eigentümer ändern new_userund gruppieren in new_group:

sudo chown -R new_user:new_group /var/www/site1

Dann müssen Sie auf Gruppenebene Zugriff auf site1 gewähren. www-data kann weiterhin auf die Site zugreifen, da sie zur new_group gehört, während new_user nicht auf site2 zugreifen kann, da er nicht zur www-data-Group gehört, der site2 gehört.

Errikos
quelle
Ihre Antwort ist verwirrend: "Zugriff auf Site1 auf Gruppenebene". Meinten Sie "Ändern der Site1-Gruppe in new_group" oder Ändern des Modus ( chmod)? In Ihrer Antwort wird der Modus nirgends erwähnt, der den Unterschied zwischen Sicherheit (oder Beschädigung) ausmachen kann.
Lekensteyn
Ich meinte, den Modus ( chmod) zu ändern, indem ich allen Berechtigungen für ANDERE widerrief.
Errikos
1

Angenommen, alle Dateien gehören bereits dem www-dataBenutzer (Sie können dies mit dem ls -slahBefehl überprüfen ), der der www-dataGruppe angehört (nächste Spalte nach dem Benutzernamen in der Dateiliste), können Sie Ihren Benutzer einfach derselben www-dataGruppe hinzufügen , um die Bearbeitung dieser Dateien zu ermöglichen

# usermod -aG www-data username

für bestehende Benutzer oder

# adduser username www-data

für neu erstellte

vladkras
quelle