Aktualisierte Zusammenfassung
Das / var / www-Verzeichnis ist Eigentum von, root:root
was bedeutet, dass niemand es verwenden kann und es völlig nutzlos ist. Da wir alle einen Webserver wollen, der tatsächlich funktioniert (und sich niemand als "root" anmelden sollte), müssen wir dies beheben.
Nur zwei Entitäten benötigen Zugriff.
PHP / Perl / Ruby / Python benötigen alle Zugriff auf die Ordner und Dateien, da sie viele von ihnen erstellen (dh
/uploads/
). Diese Skriptsprachen sollten unter Nginx oder Apache (oder sogar unter FastCGI für PHP) ausgeführt werden.Die Entwickler
Wie bekommen sie Zugang? Ich weiß, dass jemand das schon einmal gemacht hat. Bei so vielen Milliarden von Websites würde man meinen, dass es mehr Informationen zu diesem Thema geben würde.
Ich weiß, dass 777 eine vollständige Lese- / Schreib- / Ausführungsberechtigung für Eigentümer / Gruppe / Andere hat. Das scheint also nicht richtig zu sein , da es zufälligen Benutzern volle Berechtigungen gibt.
Welche Berechtigungen müssen verwendet /var/www
werden, damit:
- Quellcodeverwaltung wie Git oder Svn
- Benutzer in einer Gruppe wie "Websites" ( oder sogar zu "WWW-Daten" hinzugefügt )
- Server wie Apache oder Lighthttpd
- Und PHP / Perl / Ruby
Können alle dort Dateien (und Verzeichnisse) lesen, erstellen und ausführen?
Wenn ich richtig liege, werden Ruby- und PHP-Skripte nicht direkt "ausgeführt", sondern an einen Interpreter übergeben. Es ist also nicht erforderlich, Berechtigungen für Dateien in /var/www
... auszuführen . Es scheint also die richtige Erlaubnis zu sein, chmod -R 1660
die das machen würde
- Alle Dateien, die von diesen vier Entitäten gemeinsam genutzt werden können
- Alle Dateien sind versehentlich nicht ausführbar
- Blockieren Sie alle anderen Personen vollständig aus dem Verzeichnis
- Setzen Sie den Berechtigungsmodus für alle zukünftigen Dateien auf "sticky"
Ist das richtig?
Update 1: Ich habe gerade festgestellt, dass für Dateien und Verzeichnisse möglicherweise unterschiedliche Berechtigungen erforderlich sind. Ich habe oben über Dateien gesprochen, daher bin ich mir nicht sicher, welche Verzeichnisberechtigungen erforderlich sind.
Update 2: Die Ordnerstruktur /var/www
verändert sich drastisch, da eine der vier oben genannten Entitäten immer Ordner und Unterordner mit einer Tiefe von mehreren Ebenen hinzufügt (und manchmal entfernt). Sie erstellen und entfernen auch Dateien, auf die die anderen 3 Entitäten möglicherweise Lese- / Schreibzugriff benötigen. Daher müssen die Berechtigungen die vier oben genannten Schritte für Dateien und Verzeichnisse ausführen. Da keiner von ihnen eine Ausführungserlaubnis benötigen sollte (siehe Frage zu Ruby / PHP oben), würde ich davon ausgehen, dass die rw-rw-r--
Erlaubnis alles ist, was benötigt wird und absolut sicher ist, da diese vier Entitäten von vertrauenswürdigem Personal (siehe Nr. 2) und allen anderen Benutzern ausgeführt werden Das System hat nur Lesezugriff.
Update 3: Dies ist für persönliche Entwicklungsmaschinen und private Unternehmensserver. Keine zufälligen "Web-Kunden" wie ein gemeinsamer Host.
Update 4: In diesem Artikel von slicehost wird anscheinend am besten erklärt, was zum Einrichten von Berechtigungen für Ihren WWW-Ordner erforderlich ist. Ich bin mir jedoch nicht sicher, welcher Benutzer oder welche Gruppe Apache / Nginx mit PHP oder Svn / Git ausführt und wie ich sie ändern soll.
Update 5: Ich habe (glaube ich) endlich einen Weg gefunden, dies alles zum Laufen zu bringen (Antwort unten). Ich weiß jedoch nicht, ob dies der richtige und SICHERE Weg ist, dies zu tun. Deshalb habe ich ein Kopfgeld angefangen. Die Person mit der besten Methode zum Sichern und Verwalten des WWW-Verzeichnisses gewinnt.
quelle
Ich bin nicht sicher, ob es "richtig" ist, aber hier ist, was ich auf meinem Server mache:
Denken Sie daran, dass das Ausführungsbit für Verzeichnisse aktiviert sein sollte, damit Sie den Inhalt auflisten können.
quelle
Nach weiteren Recherchen scheint es, dass git / svn- TOOLS KEIN Problem sind, da sie so ausgeführt werden, wie sie von jedem Benutzer verwendet werden. (Allerdings sind die git / svn-Daemons eine andere Sache!) Alles, was ich mit git erstellt / geklont habe, hatte meine Berechtigungen und das git-Tool wurde aufgelistet, in
/usr/bin
das diese These passt.Git Berechtigungen gelöst.
Benutzerberechtigungen scheinen lösbar zu sein, wenn alle Benutzer, die Zugriff auf das WWW-Verzeichnis benötigen, zu der
www-data
Gruppe hinzugefügt werden, unter der Apache (und Nginx) ausgeführt werden.Eine Antwort auf diese Frage scheint also so zu lauten :
Standardmäßig
/var/www
gehörtroot:root
und niemand kann dort Dateien hinzufügen oder ändern.1) Ändern Sie den Gruppeneigentümer
Zuerst müssen wir die www-Verzeichnisgruppe ändern, damit sie "www-data" anstelle der "root" -Gruppe gehört
2) Benutzer zu www-Daten hinzufügen
Dann müssen wir den aktuellen Benutzer (und alle anderen) zur WWW-Datengruppe hinzufügen
3) CHMOD www Verzeichnis
Ändern Sie die Berechtigungen so, dass NUR der Eigentümer (root) und alle Benutzer in der Gruppe "www-data" Dateien und Verzeichnisse rwx (lesen / schreiben / ausführen) können ( niemand anderes sollte überhaupt darauf zugreifen können ).
Jetzt können alle Dateien und Verzeichnisse, die von einem Benutzer erstellt wurden, der Zugriff hat (dh in der Gruppe "www-data"), von Apache und damit von PHP gelesen / geschrieben werden.
Ist das richtig? Was ist mit Dateien, die PHP / Ruby erstellt - können die WWW-Datenbenutzer darauf zugreifen?
quelle
Klebrigkeit ist keine Vererbung von Berechtigungen. Stickiness in einem Verzeichnis bedeutet, dass nur der Eigentümer einer Datei oder der Verzeichnisbesitzer diese Datei im Verzeichnis umbenennen oder löschen kann, obwohl die Berechtigungen etwas anderes angeben. Also 1777 auf / tmp /.
In klassischem Unix gibt es keine Vererbung von Berechtigungen basierend auf dem Dateisystem, sondern nur auf der aktuellen umask des Prozesses. Bei * BSD oder Linux mit setgid im Verzeichnis wird das Gruppenfeld der neu erstellten Dateien auf dasselbe wie das des übergeordneten Verzeichnisses gesetzt. Für alles Weitere müssen Sie sich mit ACLs befassen, wobei die 'Standard'-ACL für Verzeichnisse verwendet wird, damit Sie Berechtigungen erben können.
Sie sollten zunächst Folgendes definieren: * Welche Benutzer haben Zugriff auf das System? * Was ist Ihr Bedrohungsmodell?
Wenn Sie zum Beispiel Webhosting mit mehreren Kunden durchführen und nicht möchten, dass diese sich gegenseitig die Dateien anzeigen, können Sie eine gemeinsame Gruppe "Webcusts" für alle diese Benutzer und den Verzeichnismodus 0705 verwenden. Dann werden die Dateien von bereitgestellt Der Webserver-Prozess ( nicht in "webcusts") sieht die anderen Perms und ist zulässig. Kunden können die Dateien nicht sehen und die Benutzer können mit ihren eigenen Dateien herumspielen. Dies bedeutet nicht jedoch, dass der Moment , den Sie CGI oder PHP können Sie haben , um sicherzustellen , dass die Prozesse wie die spezifischen Benutzer ausgeführt (gute Praxis wie auch immer, für mehrere Anwender-on-one-Host, für die Rechenschaftspflicht). Andernfalls könnten die Kunden durch ein CGI mit den Dateien der jeweils anderen Benutzer in Konflikt geraten.
Wenn jedoch der Laufzeitbenutzer für eine Website derselbe wie der Eigentümer der Website ist, treten Probleme auf, wenn Sie im Falle einer Sicherheitslücke im Skript nicht in der Lage sind, Inhalte vor Missbrauch zu schützen. Hier gewinnen dedizierte Hosts, sodass Sie einen Laufzeitbenutzer haben können, der sich vom Eigentümer des statischen Inhalts unterscheidet, und sich nicht so sehr um die Interaktion mit anderen Benutzern kümmern müssen.
quelle
rename()
,unlink()
) nicht berücksichtigt, sondern nur für Aktionen für die Datei selbst (open()
). Dies ist das "übliche" Verhalten.Ich glaube, dass der beste Weg, dies zu tun, die Verwendung von Posix-ACLs ist. Sie sind komfortabel zu bedienen und bieten alle Funktionen, die Sie benötigen.
http://en.wikipedia.org/wiki/Access_control_list#Filesystem_ACLs
quelle
Der Eigentümer der Datei sollte die Person sein, die sie erstellt, während die Gruppe aus WWW-Daten bestehen sollte. Der Modus für Verzeichnisse / Dateien ist dann im Allgemeinen 755/644. Während für Verzeichnisse und Dateien die Gruppe Schreibzugriff benötigt, ist der Mod 775/664. Angenommen, Paddy ist der Entwickler. Insgesamt macht dies:
quelle
Als Ergänzung zur Antwort von @ Xeoncross halte ich es für sinnvoll, die Berechtigungen für Dateien und Verzeichnisse separat zu konfigurieren.
Dadurch können Entwickler Verzeichnisse in / var / www erstellen und ändern. Dies scheint wichtig zu sein, da Entwickler möglicherweise zusätzliche Verzeichnisse erstellen oder ein Verzeichnis entfernen müssen, das nicht mehr benötigt wird.
Außerdem können Entwickler Code-Dateien erstellen und ändern (HTML-, PHP-Dateien und ähnliches lesen). Erlaubt jedoch weiterhin nur den Lesezugriff für alle anderen.
quelle