2009-08-06 6 views
2

Also, für meine Kunden, die Websites auf meinem Server gehostet haben, erstelle ich Benutzerkonten, mit Standard-Home-Ordner innerhalb/home.Zugriffskontrolllisten in Debian Lenny

Ich habe ein SSH-Gefängnis für alle collective Benutzer eingerichtet, weil ich wirklich gegen die Verwendung eines separaten FTP-Servers bin. Dann habe ich ACL installiert und acl zu meinem /etc/fstab hinzugefügt - alles gut.

  1. Ich cd in /home und chmod 700 ./*.
    • An diesem Punkt können Benutzer nicht in andere Benutzer Home-Verzeichnisse (yay) sehen, aber Apache kann sie entweder (boo)
    • nicht sehen. Ich lief setfacl u:www-data:rx ./*. Ich habe auch einzelne Verzeichnisse ausprobiert.
    • Jetzt kann Apache die Seiten wieder sehen, aber auch alle Benutzer. ACL hat die Berechtigungen der Basisordner in 750 geändert.

Wie richte ich ACL so, dass Apache die Websites in Benutzer-Home-Ordner und 2. Benutzer gehosteten sehen können außerhalb ihrer Heimat und in dem von anderen Dateien nicht sehen.

Antwort

2

Da ich die Frage kreuzweise gepostet habe (ich wusste nicht über ServerFault, bis ich gefragt habe), werde ich die Antwort cross-post, da ich persönlich finde die Frage für beide Gemeinden geeignet.

hayalci des (auf ServerFault) anmerken, dass

chmod und setfacl nicht allzu gut zusammenarbeiten.

half ein gutes Geschäft. Statt CHMOD der Verwendung andere Gruppen zu verhindern, dass die Daten zugreifen, benutzen ich:

cd /home 
setfacl -m g::0 joeuser # Removes permissions for the owning group. 
setfacl -m g:www-data:r joeuser # Adds read permissions for Apache 
cd joeuser/joeuser.com/static/ 
setfacl -m g:www-data:rwx uploads # So apache can write to the uploads directory. 
1

Ein Trick, den ich auf Shared-Boxen verwendet habe, ist:

  • rekursiv den Inhalt der Home-Verzeichnisse auf keinen Zugriff auf "andere" Benutzern zu erlauben,

    chmod -R o-rwx /home/*

  • Legen Sie fest, dass alle Home-Verzeichnis-Berechtigungen des übergeordneten Benutzers von anderen Benutzern ausgeführt werden können

  • Wechsel jeden public_html Verzeichnis Gruppe www-Daten des Benutzers (oder der Apache-Gruppe)

    chgrp www-data/home/*/public_html

  • Änderung alle Verzeichnisse unter/home/*/public_html setgid

    find/home/benutzer/public_html -type d -exec chmod 2750 {} \;

Fügen Sie keine der Benutzer zu den www-Daten (oder Apache-Gruppe) hinzu. Obwohl sie keine Mitglieder sind, macht der Setgid-Trick die Dateien dennoch lesbar durch Apache. Es ist nicht vollständig sicher (das Verschieben von Dateien ändert nicht immer den Gruppeneigentümer und manchmal bleiben die anderen Benutzerrechte bestehen, wenn sie vor einem Umzug vorhanden sind), aber es funktioniert auf meiner Box. Hoffe das hilft ein wenig! Vielleicht hat jemand anderes eine bessere Lösung.

+0

Ich kann sehen, wie es funktionieren würde, aber ich mag die Idee des Ordners /home/joeuser/joeuser.com nicht, die von etwas anderem als joeuser: collective gehört. – arbales

1

Meine typische Art und Weise, es zu tun, unter der Annahme, dass alle Benutzer in der Gruppe „Benutzer“ sind:

chmod 701 /home/* 
chgrp users /home/* 

Optional Machen Sie dasselbe auf/home selbst, um zu verhindern, dass Benutzer eine Liste von Home-Verzeichnissen sehen. Sie können jedoch fast die gleiche Liste aus/etc/passwd oder getent passwd

ziehen Jetzt wird jeder Benutzer in der Benutzergruppe den Zugriff auf alle Homedir (mit Ausnahme ihrer eigenen) verweigert. Nicht-Mitglieder von Benutzern (wie Apache und andere Dienste) werden weiterhin in der Lage sein, in die Homedirs einzutreten, können aber keine ls ausführen.

chmod 755 /home/*/public_html < - Ersetzen Sie mit dem, was www Pfad, den Sie verwenden

Jetzt Apache und andere Dienste zu cd/home/foobar/public_html frei Dateien aufzulisten und was sonst ein Webserver benötigt.