Frage Welche Berechtigungen sollten meine Website-Dateien / Ordner auf einem Linux-Webserver haben?


Das ist ein Kanonische Frage über Dateiberechtigungen auf einem Linux-Webserver.

Ich habe einen Linux-Webserver mit Apache2, der mehrere Websites hostet. Jede Website hat ihren eigenen Ordner in / var / www /.

/var/www/contoso.com/
/var/www/contoso.net/
/var/www/fabrikam.com/

Das Basisverzeichnis / var / www / gehört root: root. Apache läuft als www-data: www-data. Die Fabrikam-Website wird von den beiden Entwicklern Alice und Bob betreut. Beide Contoso-Websites werden von einem Entwickler, Eve, verwaltet. Auf allen Websites können Benutzer Bilder hochladen. Wenn eine Website kompromittiert wird, sollten die Auswirkungen so gering wie möglich sein.

Ich möchte wissen, wie Sie Berechtigungen am besten einrichten, damit Apache den Inhalt bereitstellen kann, die Website vor Angriffen geschützt ist und die Entwickler weiterhin Änderungen vornehmen können. Eine der Websites ist folgendermaßen aufgebaut:

/var/www/fabrikam.com
    /cache
    /modules
    /styles
    /uploads
    /index.php

Wie sollten die Berechtigungen für diese Verzeichnisse und Dateien festgelegt werden? Ich habe irgendwo gelesen, dass man nie 777 Berechtigungen auf einer Website verwenden sollte, aber ich verstehe nicht, welche Probleme das verursachen könnten. In Zeiten hoher Auslastung speichert die Website automatisch einige Seiten und speichert die Ergebnisse im Cache-Ordner. Alle Inhalte, die von Website-Besuchern eingereicht werden, werden im Ordner "uploads" gespeichert.


283
2018-02-06 01:50


Ursprung


Dies soll ein sein kanonisch antworten Sie auf alle Fragen, die wir über die Website-Berechtigungen bekommen. - Nic
"Ich habe irgendwo gelesen, dass man auf einer Website niemals 777 Berechtigungen verwenden darf, aber ich verstehe nicht ..." - kann der Leser dann die Vorzüge der Antworten verstehen oder zumindest vergleichen? Jede Lösung sollte auf spezifischen Anforderungen basieren - die Anforderungen sind nicht spezifisch genug (was ist das Bedrohungsmodell) - symcbean
Ich finde es gut, dass Sie nach Apache fragen, verwenden aber die Domänen, die Microsoft typischerweise als Beispiele verwendet. - gWaldo
Siehe auch Was ist der beste Weg, Berechtigungen für den Benutzer www-apache2 in / var / www zu behandeln? - Gareth
Sie können hier für vollständige Details über die Berechtigung verweisen, die auf Website-Dateien und Ordnern in Linux erforderlich sind serverfault.com/questions/124800/ ...


Antworten:


Bei der Auswahl der zu verwendenden Berechtigungen müssen Sie genau wissen, wer Ihre Benutzer sind und was sie benötigen. Ein Webserver interagiert mit zwei Arten von Benutzern.

Authentifiziert Benutzer haben ein Benutzerkonto auf dem Server und können mit bestimmten Berechtigungen versehen werden. Dies umfasst normalerweise Systemadministratoren, Entwickler und Dienstkonten. In der Regel ändern sie das System mit SSH oder SFTP.

Anonym Nutzer sind die Besucher Ihrer Website. Obwohl sie nicht berechtigt sind, direkt auf Dateien zuzugreifen, können sie eine Webseite anfordern, und der Webserver handelt in ihrem Namen. Sie können den Zugriff anonymer Benutzer einschränken, indem Sie sorgfältig darauf achten, welche Berechtigungen der Webserverprozess hat. Auf vielen Linux-Distributionen läuft Apache als www-data Benutzer aber es kann anders sein. Benutzen ps aux | grep httpd oder ps aux | grep apache um zu sehen, welcher Benutzer Apache auf Ihrem System verwendet.


Hinweise zu Linux-Berechtigungen

Linux und andere POSIX-kompatible Systeme verwenden traditionelle Unix-Berechtigungen. Es gibt einen ausgezeichneten Artikel auf Wikipedia über Dateisystemberechtigungen also werde ich hier nicht alles wiederholen. Aber es gibt ein paar Dinge, die Sie beachten sollten.

Das Ausführungsbit
Interpretierte Skripte (zB Ruby, PHP) funktionieren ohne die Ausführungsberechtigung einwandfrei. Nur Binaries und Shell-Skripte benötigen das Ausführungsbit. Um ein Verzeichnis zu durchlaufen (eingeben), benötigen Sie eine Ausführungsberechtigung für dieses Verzeichnis. Der Webserver benötigt diese Berechtigung, um ein Verzeichnis aufzulisten oder Dateien darin zu bedienen.

Standardmäßige neue Dateiberechtigungen
Wenn eine Datei erstellt wird, erbt sie normalerweise die Gruppen-ID desjenigen, der sie erstellt hat. Manchmal möchten Sie jedoch, dass neue Dateien die Gruppen-ID des Ordners erben, in dem sie erstellt wurden. Daher würden Sie das SGID-Bit im übergeordneten Ordner aktivieren.

Die Standardberechtigungswerte hängen von Ihrer Umask ab. Die Umask subtrahiert die Berechtigungen neu erstellter Dateien, so dass der gemeinsame Wert 022 dazu führt, dass Dateien mit 755 erstellt werden. Bei der Zusammenarbeit mit einer Gruppe ist es hilfreich, die Umask auf 002 zu ändern, damit von Ihnen erstellte Dateien von Gruppenmitgliedern geändert werden können. Wenn Sie die Berechtigungen hochgeladener Dateien anpassen möchten, müssen Sie entweder die Umask für Apache ändern oder chmod ausführen, nachdem die Datei hochgeladen wurde.


Das Problem mit 777

Wenn du chmod 777 Ihre Website, Sie haben keinerlei Sicherheit. Jeder Benutzer im System kann Dateien auf Ihrer Website ändern oder löschen. Aber im Ernst, denken Sie daran, dass der Webserver im Auftrag von Besuchern Ihrer Website handelt, und dass der Webserver nun in der Lage ist, dieselben Dateien zu ändern, die er gerade ausführt. Wenn auf Ihrer Website Programmierschwachstellen vorhanden sind, können diese ausgenutzt werden, um Ihre Website zu entstellen, Phishing-Angriffe einzufügen oder Informationen von Ihrem Server zu stehlen, ohne dass Sie es jemals merken.

Darüber hinaus, wenn Ihr Server auf einem läuft bekannter Hafen (Dies sollte verhindern, dass Nicht-root-Benutzer Listening-Dienste aufrufen, die weltweit zugänglich sind.) Ihr Server muss daher von root gestartet werden (obwohl jeder vernünftige Server sofort zu einem weniger privilegierten Konto wechselt, sobald der Port gebunden ist). . Mit anderen Worten, wenn Sie einen Webserver betreiben, auf dem die Hauptprogrammdatei Teil der Versionskontrolle ist (z. B. eine CGI-App), lassen Sie ihre Berechtigungen (oder die Berechtigungen des enthaltenen Verzeichnisses), da der Benutzer sie umbenennen könnte die ausführbare Datei) bei 777 ermöglicht irgendein Benutzer zum Ausführen irgendein ausführbar als root.


Definieren Sie die Anforderungen

  • Entwickler benötigen Lese- / Schreibzugriff auf Dateien, damit sie die Website aktualisieren können
  • Entwickler müssen in Verzeichnissen lesen / schreiben / ausführen, damit sie sich durchsuchen können
  • Apache benötigt Lesezugriff auf Dateien und interpretierte Skripte
  • Apache benötigt Lese- / Ausführungszugriff auf Server-Verzeichnisse
  • Apache benötigt Lese- / Schreib- / Ausführungszugriff auf Verzeichnisse für hochgeladenen Inhalt

Wird von einem einzelnen Benutzer verwaltet

Wenn nur ein Benutzer für die Wartung der Site verantwortlich ist, legen Sie sie als Benutzerbesitzer im Website-Verzeichnis fest und geben Sie dem Benutzer die vollständigen Berechtigungen für die Rechteverwaltung. Apache benötigt weiterhin Zugriff, damit die Dateien bereitgestellt werden können. Setzen Sie daher www-data als Gruppeneigner und geben Sie der Gruppe r-x Berechtigungen.

In deinem Fall, Eva, deren Benutzername könnte sein eve, ist der einzige Benutzer, der unterhält contoso.com :

chown -R eve contoso.com/
chgrp -R www-data contoso.com/
chmod -R 750 contoso.com/
chmod g+s contoso.com/
ls -l
drwxr-s--- 2 eve      www-data   4096 Feb  5 22:52 contoso.com

Wenn Sie über Ordner verfügen, die von Apache beschreibbar sein müssen, können Sie einfach die Berechtigungswerte für den Gruppenbesitzer ändern, sodass www-data Schreibzugriff hat.

chmod g+w uploads
ls -l
drwxrws--- 2 eve      www-data   4096 Feb  5 22:52 uploads

Der Vorteil dieser Konfiguration besteht darin, dass es für andere Benutzer im System schwieriger wird (aber nicht unmöglich ist), herumzuschnüffeln, da nur die Benutzer und Gruppenbesitzer Ihr Website-Verzeichnis durchsuchen können. Dies ist nützlich, wenn Sie geheime Daten in Ihren Konfigurationsdateien haben. Sei vorsichtig mit deiner Umask! Wenn Sie hier eine neue Datei erstellen, werden die Berechtigungswerte wahrscheinlich standardmäßig auf 755 gesetzt. Sie können ausführen umask 027so dass neue Dateien standardmäßig auf 640 (rw- r-- ---).


Wird von einer Gruppe von Benutzern verwaltet

Wenn mehr als ein Benutzer für die Wartung der Site verantwortlich ist, müssen Sie eine Gruppe erstellen, die zum Zuweisen von Berechtigungen verwendet wird. Es empfiehlt sich, für jede Website eine eigene Gruppe zu erstellen und die Gruppe nach dieser Website zu benennen.

groupadd dev-fabrikam
usermod -a -G dev-fabrikam alice
usermod -a -G dev-fabrikam bob

Im vorherigen Beispiel haben wir den Gruppenbesitzer verwendet, um Apache Berechtigungen zu erteilen, aber jetzt wird dies für die Entwicklergruppe verwendet. Da der Benutzereigentümer für uns nicht mehr nützlich ist, können Sie mit root einfach sicherstellen, dass keine Berechtigungen verloren gehen. Apache benötigt weiterhin Zugriff, so dass wir Lesezugriff auf den Rest der Welt haben.

chown -R root fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 775 fabrikam.com
chmod g+s fabrikam.com
ls -l
drwxrwxr-x 2 root     dev-fabrikam   4096 Feb  5 22:52 fabrikam.com

Wenn Sie über Ordner verfügen, die von Apache beschreibbar sein müssen, können Sie Apache entweder zum Benutzerbesitzer oder zum Gruppenbesitzer machen. So oder so, es wird alle Zugriffe haben, die es benötigt. Persönlich bevorzuge ich es, ihn zum Benutzerbesitzer zu machen, damit die Entwickler den Inhalt von Upload-Ordnern durchsuchen und ändern können.

chown -R www-data uploads
ls -l
drwxrwxr-x 2 www-data     dev-fabrikam   4096 Feb  5 22:52 uploads

Obwohl dies ein gemeinsamer Ansatz ist, gibt es einen Nachteil. Da jeder andere Benutzer auf dem System die gleichen Berechtigungen wie Apache für Ihre Website besitzt, können andere Benutzer problemlos Ihre Site durchsuchen und Dateien lesen, die geheime Daten enthalten, z. B. Ihre Konfigurationsdateien.

Sie können Ihren Kuchen haben und es auch essen

Dies kann weiter verbessert werden. Es ist vollkommen legal, dass der Eigentümer weniger Rechte als die Gruppe hat. Anstatt den Benutzerbesitzer zu verschwenden, indem wir ihn root zuweisen, können wir Apache zum Benutzerbesitzer für die Verzeichnisse und Dateien auf Ihrer Website machen. Dies ist eine Umkehrung des einzelnen Betreuerszenarios, aber es funktioniert genauso gut.

chown -R www-data fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 570 fabrikam.com
chmod g+s fabrikam.com
ls -l
dr-xrwx--- 2 www-data  dev-fabrikam   4096 Feb  5 22:52 fabrikam.com

Wenn Sie über Ordner verfügen, die von Apache beschreibbar sein müssen, können Sie einfach die Berechtigungswerte für den Benutzer ändern, sodass www-data Schreibzugriff hat.

chmod u+w uploads
ls -l
drwxrwx--- 2 www-data  dev-fabrikam   4096 Feb  5 22:52 fabrikam.com

Eine Sache, die bei dieser Lösung beachtet werden muss, ist, dass der Benutzerbesitzer neuer Dateien mit dem Ersteller übereinstimmt, anstatt auf www-Daten eingestellt zu sein. Daher werden alle neuen Dateien, die Sie erstellen, von Apache erst lesbar, wenn Sie sie erstellt haben.


* Apache-Privilegientrennung

Ich habe bereits erwähnt, dass es für andere Benutzer tatsächlich möglich ist, auf Ihrer Website herumzuschnüffeln, egal welche Art von Privilegien Sie verwenden. Standardmäßig werden alle Apache-Prozesse als derselbe WWW-Datenbenutzer ausgeführt, sodass jeder Apache-Prozess Dateien von allen anderen Websites lesen kann, die auf demselben Server konfiguriert sind, und manchmal sogar Änderungen vornehmen. Jeder Benutzer, der Apache dazu bringen kann, ein Skript auszuführen, kann denselben Zugriff erhalten, den Apache selbst besitzt.

Um dieses Problem zu bekämpfen, gibt es verschiedene Ansätze Privilegtrennung in Apache. Jede Herangehensweise weist jedoch verschiedene Leistungs- und Sicherheitsnachteile auf. Meiner Meinung nach sollte jede Site mit höheren Sicherheitsanforderungen auf einem dedizierten Server ausgeführt werden, anstatt VirtualHosts auf einem gemeinsam genutzten Server zu verwenden.


Weitere Überlegungen

Ich habe es vorher nicht erwähnt, aber es ist normalerweise eine schlechte Übung, dass Entwickler die Website direkt bearbeiten. Bei größeren Sites ist es besser, wenn Sie ein Release-System haben, das den Webserver von den Inhalten eines Versionskontrollsystems aktualisiert. Der Ansatz des einzelnen Betreuers ist wahrscheinlich ideal, aber anstelle einer Person haben Sie automatisierte Software.

Wenn Ihre Website Uploads ermöglicht, die nicht ausgeliefert werden müssen, sollten diese Uploads außerhalb des Stammverzeichnisses des Webs gespeichert werden. Andernfalls könnten Sie feststellen, dass Benutzer Dateien herunterladen, die geheim sein sollten. Wenn Sie z. B. zulassen, dass Schüler Zuweisungen senden, sollten sie in einem Verzeichnis gespeichert werden, das nicht von Apache bereitgestellt wird. Dies ist auch ein guter Ansatz für Konfigurationsdateien, die Geheimnisse enthalten.

Für eine Website mit komplexeren Anforderungen sollten Sie sich die Verwendung von Zugriffssteuerungslisten. Diese ermöglichen eine viel differenziertere Steuerung von Privilegien.

Wenn Ihre Website komplexe Anforderungen erfüllt, sollten Sie ein Skript schreiben, das alle Berechtigungen einrichtet. Testen Sie es gründlich und bewahren Sie es dann sicher auf. Es könnte sein Gewicht in Gold wert sein, wenn Sie jemals wieder aus irgendeinem Grund Ihre Website neu aufbauen müssen.


316
2018-02-06 01:50



"chmod -R 775 fabrikam.com". Sehr wenige Dateien innerhalb der meisten Websites müssen ausführbar sein; ZB PHP-Skript kann 0640 sein, solange der Webserver sie lesen kann. chmod -Ra + X fabrikam.com würde ausführbare Rechte für alle nur auf Verzeichnissen geben.
schöne Beschreibung! - RNA
Beachten Sie, dass Apache als Benutzer ausgeführt wird apache auf von Red Hat abgeleiteten Systemen. - Michael Hampton♦
Das ist hervorragend, aber eine Sache habe ich nicht verstanden: Ich verstehe weder das Ziel noch den Vorteil der Strategie, Apache für den Benutzer / Besitzer eines Dateiverzeichnisses zu machen, wenn es bereits Gruppenbesitz an der Datei hat. - idiotprogrammer
Dies ist ein ausgezeichneter Beitrag. Hier ist mein Beitrag: Der Nachteil der Verwendung von www-data als Besitzer und dev-fabrikam als Gruppe (erwähnt in Sie können Ihren Kuchen haben und es auch essen gilt auch (umgekehrt) für das in. angebotene Szenario Wird von einem einzelnen Benutzer verwaltet. Wenn Apache in diesem Fall einen Ordner oder eine Datei erstellt, hat der Benutzer keinen Zugriff darauf, sodass die Dateien dem ursprünglichen Benutzer zurückgegeben werden müssen. Ich habe die Antwort nicht aktualisiert, da ich mich meiner Aussage nicht hundertprozentig sicher bin. Ich würde es lieber anderen bestätigen lassen, bevor ich die Antwort gepatched habe.


Ich frage mich, warum so viele Leute den "anderen" (o) Teil der Linux-Rechte benutzen (oder empfehlen), um zu kontrollieren, was Apache (und / oder PHP) kann. Indem Sie diesen rechten Teil auf etwas anderes als "0" setzen, erlauben Sie der ganzen Welt, etwas in der Datei / dem Verzeichnis zu tun.

Mein Ansatz folgt:

  • Ich erstelle zwei getrennte Benutzer. Eine für den SSH / SFTP-Zugriff (falls benötigt), die alle Dateien besitzen wird, und eine für den PHP FastCGI-Benutzer (der Benutzer, auf dem die Website läuft). Lassen Sie uns diese Benutzer nennen Bob und Bob-www.
  • Bob wird volle Rechte haben (rwx auf Ordnern, rw- auf Dateien), damit er / sie die gesamte Website lesen und bearbeiten kann.
  • Der PHP FastCGI-Prozess benötigt r-x Rechte für Ordner und r-- Rechte für Dateien, außer für sehr spezifische Ordner wie cache/ oder uploads/, wo auch die "write" Berechtigung benötigt wird. Um PHP FastCGI diese Fähigkeit zu geben, wird es als ausgeführt Bob-www, und Bob-www wird zum automatisch erstellten hinzugefügt Bob Gruppe.
  • Wir stellen jetzt sicher, dass der Besitzer und die Gruppe aller Verzeichnisse und Dateien sind Bob Bob.
  • Etwas fehlt: sogar wir verwenden FastCGI, aber Apache benötigt immer noch Lesezugriff, für statischen Inhalt, oder .htaccess-Dateien, die es versuchen wird, wenn zu lesen AllowOverride ist auf etwas anderes eingestellt als None. Um zu vermeiden, die O Teil der Rechte, füge ich hinzu www-Daten Benutzer zum Bob Gruppe.

Jetzt:

  • Um zu kontrollieren, was der Entwickler tun kann, können wir mit dem spielen u Teil der Rechte (aber das ist der Hinweis unten).
  • Um zu kontrollieren, was Apache und PHP können, können wir mit dem spielen G Teil der Rechte.
  • Das O part wird immer auf 0 gesetzt, sodass niemand auf dem Server die Website lesen oder bearbeiten kann.
  • Es gibt kein Problem wenn Bob Benutzer erstellt neue Dateien, da er automatisch zu seiner Hauptgruppe gehört (Bob).

Dies ist eine Zusammenfassung, aber in dieser Situation, Bob ist erlaubt zu SSH. Wenn es keinen Benutzer erlaubt, die Website zu ändern (z. B. Kunde ändert nur die Website über ein CMS-Admin-Panel und hat keine Linux-Kenntnisse), erstellen Sie zwei Benutzer trotzdem, aber geben Sie /bin/falseals Schale für Bob außerdem, und deaktivieren Sie seine Anmeldung.

    adduser --home /var/www/bobwebsite --shell /bin/bash bob
    adduser --no-create-home --shell /bin/false --disabled-login --ingroup bob bob-www
    adduser www-data bob
    cd /var/www/bobwebsite
    chown -R bob:bob .
    find -type d -exec chmod 750 {} \;
    find -type f -exec chmod 640 {} \;

Hinweis : Leute neigen dazu, das zu vergessen, das begrenzend u (Besitzer-) Rechte sind meistens nutzlos und unsicher, da der Besitzer einer Datei das ausführen kann chmod Befehl, auch die Rechte sind 000.

Sag mir, ob mein Ansatz einige Sicherheitsprobleme hat, weil ich mir nicht 100% ig sicher bin, aber es ist das, was ich benutze.

Ich denke, diese Config hat ein Problem: Wenn PHP / Apache eine neue Datei (zB Upload) erstellt, gehört sie zu Bob-www: Bob, und Bob kann es nur lesen. Vielleicht setuid auf das Verzeichnis kann das Problem lösen.


13
2017-07-19 21:42



Linux ignoriert setuid. Neue Dateien gehören immer dem Ersteller. - Paul
Ich verstehe etwas nicht. Dies scheint nicht die Situation zu berücksichtigen, wenn mehrere Entwickler simultan auf der Website arbeiten, da der einzige Benutzer ist bob. Wie gehst du damit um? Z.B. Durch ssh melden sich beide Benutzer als Bob an. Bob (1) fühlt, dass er sich nicht an das Passwort erinnern kann und ändert es in ein anderes, aber immer noch sicher. Bob (2) versucht sich das nächste Mal einzuloggen, und er / sie kann nicht. - n611x007
@ Naxa Ein marginal gutes System sollte niemals dazu führen, dass einer der Entwickler die Website direkt verändert. Im Idealfall unterliegt die Website der Versionskontrolle, sodass das Benutzerkonto "bob" jede (stabile) Version automatisch abruft und bereitstellt. Die Entwickler führen also die Entwicklung extern aus, und Änderungen werden bereitgestellt, sobald sie auf den Bereitstellungsserver übertragen werden. "bob" ist ein Systembenutzer, der sehr eingeschränkte Netzwerkberechtigungen haben sollte, die keine Remote-Anmeldung beinhalten; Iptables erlaubt Ihnen tatsächlich, nach UID für solche Dinge zu filtern. - Parthian Shot
"Ich frage mich, warum so viele Leute den" anderen "(o) Teil benutzen (oder empfehlen) - dann solltest du das vielleicht eher als Frage als als Antwort geschrieben haben. Es ist nicht ungewöhnlich, dass der Webserver (als der am meisten exponierte Teil des Systems) absichtlich mit der niedrigsten Stufe von Privilegien betrieben wird, während Support-, Entwicklungs- und Admin-Konten auch unterschiedliche Zugriffe benötigen - symcbean


Angesichts der Google-Ranking auf die obige ausgezeichnete Antwort, ich denke, es gibt eine Sache, die beachtet werden sollte, und ich kann nicht scheinen, eine Notiz nach der Antwort zu hinterlassen.

Wenn Sie mit dem Beispiel fortfahren, wenn Sie www-data als Besitzer und dev-fabrikam als Gruppe mit 570 Berechtigungen für das Verzeichnis (oder die Datei) verwenden möchten, ist dies wichtig Linux ignoriert  setuid, so dass alle neuen Dateien dem Benutzer gehören, der sie erstellt hat. Das bedeutet, dass Sie nach dem Erstellen neuer Verzeichnisse und Dateien etwas ähnliches verwenden müssen:

chown -R www-data /newdirectory/
chmod -R 570 /newdirectory/

In Ubuntu 12.04 für Rackspace OpenStack hatte ich ein seltsames Problem, bei dem ich die Berechtigung 570 nicht erhalten konnte, bis ich den Server neu gestartet habe, was das Problem auf magische Weise behob. Verlor haare in einem zunehmenden Tempo über dieses scheinbar einfache Problem ....


9
2018-01-13 22:03



Bitte lass es googeln: In Raspbian (aka auf einem Raspberry Pi, wenn du den Besitz von / var / www unter lighttpd (oder einem anderen Webbrowser) ändern willst, MÜSTest du neu starten. - gbronner
@ gbronner Wenn es schwierig ist, eine Lösung für die Lösung zu finden, können Sie sie als Frage aufwerfen und eine Antwort auf die Frage geben. Es ist jedoch wahrscheinlich angemessener in einer anderen SE Q & A-Site. Meine Vermutung ist Unix und Linux könnte ein guter Ort sein, um das zu tun. - Paul
Es gibt auch raspberpi.stackexchange.com; Es scheint, dass die SE-Sites das Wissen ein wenig fragmentieren. - gbronner
@gbronner lol. Ich wusste nichts davon! Das Raspbian-Tag auf U & L hat ungefähr 120 Fragen. - Paul


Ich gehe mit dieser Konfiguration:

  1. Alle Verzeichnisse, mit Ausnahme von "uploads", werden auf den Besitzer gesetzt root und Gruppe root, Berechtigungen für 0755.
  2. Alle Dateien sind auf Besitzer festgelegt root und Gruppe root, Berechtigungen für 0644.
  3. Uploads Verzeichnis auf Besitzer festgelegt rootGruppe www-data, Berechtigungen für 1770. Mit dem Sticky-Bit kann der Gruppenbesitzer das Verzeichnis und die darin enthaltenen Dateien weder entfernen noch umbenennen.
  4. Inside uploads Ordner ein neues Verzeichnis mit www-data Besitzer Benutzer und Gruppe und 0700 Berechtigungen für jeden www-data Benutzer, die Dateien hochladen.
  5. Apache-Konfiguration:

Verweigern AllowOverride und Index im Upload-Verzeichnis, so dass Apache nicht liest .htaccess Dateien, und der Apache-Benutzer kann den Inhalt des Upload-Ordners nicht indizieren:

<Directory /siteDir>
   Options -Indexes
</Directory>

<Directory /siteDir/uploadDir>
   AllowOverride none
</Directory>

6. php.ini Aufbau:

open_basedir = /siteDir:/tmp:/usr/share/phpmyadmin
post_max_size = 5M
file_uploads = On
upload_max_filesize = 3M
max_file_uploads = 20

Mit dieser Konfiguration wird der www-data Benutzer wird nicht in anderen Verzeichnissen als siteDir/  /tmp und /usr/share/phpmyadmin. Außerdem können Sie die maximale Dateigröße, die maximale Postgröße und die maximal zu ladenden Dateien in derselben Anfrage steuern.


3
2017-10-23 09:54





Wenn Sie einen FTP-Benutzer namens "leo" haben, müssen Sie Dateien in das webverzeichnis von example.com hochladen, und Sie müssen Ihren "apache" -Benutzer außerdem in der Lage sein, uploa-files / sessions / cache-Dateien im Cache-Verzeichnis zu erstellen.

Dieser Befehl weist leo als Besitzer und Gruppe als Apache zu example.com zu, der Apache-Benutzer ist ein Teil des Gruppenapache, so dass er die Berechtigungen der Apache-Gruppe erbt

chown -R leo: apache beispiel.com

Ein weiterer Befehl, der die richtige Berechtigung gewährleistet und auch Sicherheitsbedenken erfüllt.

chmod -R 2774 beispiel.com

Hier ist die erste Nummer 2 für das Verzeichnis und stellt sicher, dass jede neu erstellte Datei in der gleichen Gruppe und den gleichen Berechtigungen bleibt. 77 bedeutet für Besitzer und Gruppe, dass sie vollen Zugriff haben. 4 bedeutet für andere, dass sie nur lesen können.

Folgendes ist hilfreich, um Berechtigungsnummern zu verstehen

Number  Octal Permission Representation
0   No permission
1   Execute permission
2   Write permission
3   Execute and write permission: 1 (execute) + 2 (write) = 3
4   Read permission
5   Read and execute permission: 4 (read) + 1 (execute) = 5
6   Read and write permission: 4 (read) + 2 (write) = 6
7   All permissions: 4 (read) + 2 (write) + 1 (execute) = 7

3
2017-08-09 07:15