seth: dateirechte bei apache

gudn tach!

angenommen auf einem apache (v2.4) sollen zwei oder mehr verschiedene user jeweils mind. einen virtuellen host pflegen koennen. wie setzt man da am besten welche rechte?

beispiel:

  • user_A mit a.example.org,
  • user_B mit b.example.org.

verzeichnisse:

  • /data/www/a.example.org
  • /data/www/b.example.org

apache ist user www-data und in der gruppe www-data.

was waere nun am sinnvollsten und weshalb?

drwxrwxr-x user_A www /data/www/a.example.org drwxrwxrwx user_A www /data/www/a.example.org/writabledir drwxrwxr-x user_B www /data/www/b.example.org drwxrwxrwx user_B www /data/www/b.example.org/writabledir

wobei user_A und user_B der gruppe www angehoeren.
oder

2. ~~~
drwxr-x--- user_A www-data /data/www/a.example.org
drwxrwx--- user_A www-data /data/www/a.example.org/writabledir
drwxr-x--- user_B www-data /data/www/b.example.org
drwxrwx--- user_B www-data /data/www/b.example.org/writabledir

oder

  1. apache in die gruppe www hinzufuegen und dann
drwxr-x--- user_A www /data/www/a.example.org
drwxrwx--- user_A www /data/www/a.example.org/writabledir
drwxr-x--- user_B www /data/www/b.example.org
drwxrwx--- user_B www /data/www/b.example.org/writabledir

oder

viertens: apache in die gruppen www_A und www_B hinzufuegen und dann

drwxr-x--- user_A www_A /data/www/a.example.org
drwxrwx--- user_A www_A /data/www/a.example.org/writabledir
drwxr-x--- user_B www_B /data/www/b.example.org
drwxrwx--- user_B www_B /data/www/b.example.org/writabledir

oder ganz anders?

die erste loesung scheint mir doof zu sein, weil dann user_B auch ins verzeichnis von user_A reinschreiben koennte. das gleiche scheint mir fuer die dritte loesung zu gelten.

gegen die zweite loesung spricht, wenn ich's richtig verstanden habe, wiki.ubuntuusers.de/Apache. oder ich hab's falsch verstanden und das bezieht sich nur aufs www-root-verzeichnis, also hier /data/www?

ausserdem: wenn ueber ein CMS dann dateien erzeugt werden koennen, sollten die per default ja nicht unbedingt als

-rw-r--r-- www-data www-data /data/www/a.example.org/writabledir/sonstwas.txt

erzeugt werden. heisst das, dass man das am besten mit gid- und acl-kram steuert?

prost

seth

  1. Tach,

    angenommen auf einem apache (v2.4) sollen zwei oder mehr verschiedene user jeweils mind. einen virtuellen host pflegen koennen. wie setzt man da am besten welche rechte?

    das hängt davon ab, wie die genauen Anforderungen sind.

    die erste loesung scheint mir doof zu sein, weil dann user_B auch ins verzeichnis von user_A reinschreiben koennte. das gleiche scheint mir fuer die dritte loesung zu gelten.

    Ja, das würde ich auch sagen.

    gegen die zweite loesung spricht, wenn ich's richtig verstanden habe, wiki.ubuntuusers.de/Apache. oder ich hab's falsch verstanden und das bezieht sich nur aufs www-root-verzeichnis, also hier /data/www?

    Nein, das verstehst du richtig, jeder User sollte nur jeweils da schreiben (und etwsa eingeschränkter lesen) können, wo es nötig ist.

    ausserdem: wenn ueber ein CMS dann dateien erzeugt werden koennen, sollten die per default ja nicht unbedingt als

    -rw-r--r-- www-data www-data /data/www/a.example.org/writabledir/sonstwas.txt
    

    erzeugt werden. heisst das, dass man das am besten mit gid- und acl-kram steuert?

    Ich würde von ACL die Finger lassen, solange die Menge an Usern und Überschneidungen nicht groß ist oder man etwas braucht, was sich nur mit ACL umsetzen lässt; sich mit einem „ls -la “ die Übersicht über die Dateirechte geben zu lassen, ist erheblich einfacher, als alles im Zweifelsfall mit getfacl handlen zu müssen. Unter Linux hast du auf den Besitzer neu angelegter Dateien nicht viel Einfluss, suEXEC ist aber mindestens einen Blick wert; die Gruppe kann über setgid gesteuert werden und die Rechte über eine entsprechende Umask.

    Bei einer überschaubaren Menge an Usern, würde ich eine weitere (nicht die Standardgruppe des jeweiligen Users) anlegen, wo die jeweiligen User und der Apache Mitglied sind und den Verzeichnissen dann jeweils Rechte von drwxr-s--- verpassen (Schreibrechte für die Gruppe, dann in Unterverzeichnissen wie benötigt; oder besser noch außerhalb des Document_Root).

    mfg
    Woodfighter

  2. Tach!

    angenommen auf einem apache (v2.4) sollen zwei oder mehr verschiedene user jeweils mind. einen virtuellen host pflegen koennen. wie setzt man da am besten welche rechte?

    Wenn die beiden nicht derselbe Kunde oder dasselbe Projekt sind, trennt man sie besser so weit wie es geht. Also Variante 4. Soweit ich weiß, kann der Apache von Haus aus aber nur mit einen Nutzer auf die VHosts zugreifen. Somit kann jeder bei jedem lesen. Bei statischen Dateien, die sowieso 1:1 zu den Clients durchgereicht werden, ist das kein Problem. Dateien mit Passwörtern und ähnlich geschäftskritischen Dingen sollten so nicht lesbar sein. Die Frage ist dann, wie bekommt man den Apachen dazu, separat unter festgelegte Nutzerkennungen zu agieren? Eine Lösung ist, PHP (und ähnliches) unter FCGI oder PHP-FPM laufen zu lassen.

    AUf den Seiten von HowToForge finden sich Anleitungen für eine Menge gängiger Liunux-Distributionen zu "The Perfect Server" mit ISPConfig. Das ist eine Software für kleine Hosting-Provider mit Kundenverwaltung. Jeder Kunde bekommt eine Gruppe, jede Website eine Userkennung und ist Mitglied der Kundengruppe. So kann man zumindest auch noch innerhalb der Gruppe einen gemeinsamen Datenzugriff haben.

    Das weit verbreitete Plesk geht (leider) nach Variante 1 vor, alle Kunden sind in derselben Gruppe. Man kann aber separate Nutzer für Websites vergeben. Damit hat man eine Trennung, aber kann nicht kundenseparat auf gemeinsame Dateien zugreifen. Dafür müssten zwei Websites unter derselben Kennung laufen.

    Bei der Recherche fand ich auch noch, dass es (mindestens) eine einbaubare Lösung für den Apachen gibt, auch Nicht-CGI-Geschichten über eine eigene Nutzerkennung laufen zu lassen: Wie der Zufall so will, war es eine HowToForge-Anleitung mit mpm-itk. Ich hab nicht gesucht, ob es dort weitere Anleitungen für andere Distributionen gibt, aber meist machen die das für mehrere.

    Im Apachen selbst gibt es auch noch mod_suexec, aber das behandelt nur (F)CGI-Programme.

    Übrigens gibt es neben facl auch noch attr (lsattr, chattr), mit dem man neben anderem einige Berechtigungsschweinereien machen kann. So setzt beispielsweise ISPConfig das i(mmutable)-Bit auf das Kunden-Root-Verzeichnis, und hebt das nur für das DocumentRoot und ein private-Verzeichnis auf. Wenn man eigene nicht im Web zugängliche Verzeichnisse anlegen möchte, muss man das i entfernen (lassen vom root) oder sich unterhalb vom private ausbreiten.

    dedlfix.

    1. Moin!

      Im Apachen selbst gibt es auch noch mod_suexec, aber das behandelt nur (F)CGI-Programme.

      Dann muss php eben als fcgid laufen.

      Jörg Reinholz