staging.inyokaproject.org

Ordnerberechtigungen Apache vHosts

Status: Gelöst | Ubuntu-Version: Server 18.04 (Bionic Beaver)
Antworten |

SickofSociety

Avatar von SickofSociety

Anmeldungsdatum:
11. September 2006

Beiträge: Zähle...

Hallo zusammen, vermutlich sehe ich nur den Wald vor lauter Bäumen nicht, aber ich habe ein Verständnisproblem mit den Ordner/Datei-Berechtigungen auf dem Apache. Folgendes Szenario mit VHosts:

- /var/www/html/Seite1 - /var/www/html/Seite2 - /var/www/html/Seite3

Besitzer von /var/www/ ist www-data.

Ich möchte jetzt Zugriff per SFTP oder komfortabler über SAMBA für unterschiedliche User gewähren. Rein theoretisch müsste lesen/schreiben ausreichen. Ausgeführt werden muss von den Usern nichts. Sie müssen lediglich Zugriff auf die Dateien in den Ordnern haben und diese ändern können. Einfache HTML Files.

- Seite1 = user1, user2 - Seite2 = user1, user2, user3 - Seite3 = user1

Ich lese immer wieder "User einfach der Gruppe www-data hinzufügen, dann geht das." Aber ist das nicht unsicher? Dann hat ja jeder dieser User die gleichen Rechte wie www-data und kann auch auf die anderen Seiten(Ordner) zugreifen, oder täusche ich mich da? Also könnte ich aber user1, der Zugriff auf alle Ordner benötigt, ruhig der Gruppe www-data hinzufügen, oder? Was mache ich aber mit user2 und user3, die auf Seite3 nicht zugreifen dürfen?

Wie ist das korrekte Vorgehen bei dieser Anforderung?

Der Zugriff sollte per SFTP oder über SAMBA erfolgen. Würdet ihr grundsätzlich davon abraten, Freigaben auf Webverzeichnisse zu machen? Zum Verständnis, wir reden hier von einem lokalen Webserver, der keinen Zugriff ins Internet hat.

Vielen Dank im Voraus.

bugblatterbeast

Avatar von bugblatterbeast

Anmeldungsdatum:
30. Januar 2008

Beiträge: 477

Bei lokalen Testservern verwende ich meistens auch Zugriff über Samba, aus reiner Bequemlichkeit. Ansonsten beschränke ich mich ausschließlich auf sftp.

Das Dilemma mit den Berechtigungen hast Du (soweit ich das sehe) erstmal vollkommen richtig erkannt. user1 könntest Du in die Gruppe www-data nehmen, die anderen aber nicht.

Wenn Du das Ganze aber eh mit Samba realisierst, würde ich über einen anderen Ansatz nachdenken:

Mach die Zugriffssteuerung über die Samba Freigaben aber erzwinge dass Dateien und Ordner mit Benutzer www-data und Gruppe www-data geschrieben werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[seite1]
    path = /var/www/html/Seite1
    read only = no
    writeable = yes
    browseable = yes
    valid users = user1, user2
    create mask = 0644
    directory mask = 0755
    force user = www-data
    force group = www-data

[seite2]
    path = /var/www/html/Seite2
    read only = no
    writeable = yes
    browseable = yes
    valid users = user1, user2, user3
    create mask = 0644
    directory mask = 0755
    force user = www-data
    force group = www-data

[seite3]
    path = /var/www/html/Seite3
    read only = no
    writeable = yes
    browseable = yes
    valid users = user1
    create mask = 0644
    directory mask = 0755
    force user = www-data
    force group = www-data

EDIT: Wenn Du die Zugriffssteuerung so über die Samba-Freigaben regelst, musst Du user1, user2 und user3 zur Gruppe www-data hinzufügen, weil sie sonst zwar auf die Samba Freigabe zugreifen können (für die sie die Berechtigung haben) aber ihnen auf aufgrund der Dateisystemrechte trotzdem der Zugang verwehrt wird. Sollten die Dateirechte 0664 und 0775 gewählt werden, damit das Schreiben auf wirklich möglich ist. Ich hatte zunächst nicht ausreichend beachtet, dass neben der Samba-Zugriffssteuerung ja trotzdem noch weiterhin die Berechtigungen des Dateisystems gelten.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Für die Funktion des Webdienstes selbst ist in der Regel nur der Besitzer in Form des Benutzers entscheidend - bei der Wahl der Gruppe bist du weniger stark eingeschränkt. Das heißt im Umkehrschluss, dass du für jedes Verzeichnis eine eigene Gruppe anlegen könntest und dann je nach Bedarf die jeweiligen Benutzer diesen Gruppen hinzufügst oder entfernst.

SickofSociety

(Themenstarter)
Avatar von SickofSociety

Anmeldungsdatum:
11. September 2006

Beiträge: 309

Erstmal danke für eure Antworten. Den Ansatz über Samba fand ich charmant, aber dann bleibt ja wieder das Problem mit www-data.

@Cranvil.

Meinst du das so:

/var/www/html/Seite1 bekommt Gruppe Seite1-rw (Mitglieder nach Bedarf)

/var/www/html/Seite2 bekommt Gruppe Seite2-rw (Mitglieder nach Bedarf)

usw.

Welche Rechte müssen diese Ordner dann bekommen? Wer ist Besitzer? Normal sollte doch immer www-data Besitzer aller Ordner unter /var/www/ bleiben, oder? Ich stehe echt auf dem Schlauch.

Edit: Wie wird denn das bei Share-Hostern gelöst? Da muss man ja auch unterschiedliche Rechte für unterschiedliche User auf den VHosts einstellen. Oder wird dort mit chroot gearbeitet?

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

An und für sich ist es egal, wer der Besitzer dieser Ordner ist. Wichtig ist nur, dass die Benutzerkonten, die den Zugriff auf die Ressourcen benötigen, um arbeiten zu können, diesen auch erhalten, ohne dass sie selbst oder andere zu viele Berechtigungen erhalten.

Du könntest also beispielsweise als Besitzer einen beliebigen Benutzer setzen, als Gruppe eine beliebige Gruppe setzen, für andere (other) zumindest Leserecht und Ausführen auf Verzeichnisse und es läuft trotzdem. Und je nach Ressource ist es nicht einmal weniger sicher dadurch.

Wie du schon anmerkst, machen die Hoster viel über chroot. Allerdings geht das auch genausogut über Berechtigungen. Man sorgt dafür, dass das Benutzerkonto des Mieters Besitzer des entsprechenden Verzeichnisses ist und sorgt dafür, dass der Webserverdienst selbst zumindest über die Gruppenzugehörigkeit mitlesen darf. Ich kann nur vermuten, dass bei solchen Angeboten die Berechtigungen für o nicht gesetzt sind.

bugblatterbeast

Avatar von bugblatterbeast

Anmeldungsdatum:
30. Januar 2008

Beiträge: 477

Den Ansatz über Samba fand ich charmant, aber dann bleibt ja wieder das Problem mit www-data.

Wenn die Benutzer user2 und user3 noch andere Zugriffsmöglichkeiten außer Samba haben, dann ist das tatsächlich ein Problem. Solange sie nur über diese Samba Freigaben zugreifen können würde deren Zugriffskontrolle (valid users = ...) das zufriedenstellend regeln.

Wie wird denn das bei Share-Hostern gelöst? Da muss man ja auch unterschiedliche Rechte für unterschiedliche User auf den VHosts einstellen. Oder wird dort mit chroot gearbeitet?

Mir ist nicht bekannt, das Shared-Hoster gestaffelte Rechte (so wie Du sie haben möchtest) ermöglichen.

bugblatterbeast

Avatar von bugblatterbeast

Anmeldungsdatum:
30. Januar 2008

Beiträge: 477

Ein weiterer Lösungsansatz (der unter anderem auch manchmal beim shared hosting eingesetzt wird) wäre für jede Seite einen Benutzer mit Gruppe anzulegen (als Home-Verzeichnis am besten DocumentRoot wählen), das Paket apache2-mpm-itk zu installieren und die vhosts so zu konfigurieren, dass sie mit verschiedenen UIDs/GIDs arbeiten.

Apache2 vorbereiten

1
2
3
apt install apache2-mpm-itk
a2enmod mpm-itk
service apache2 restart

Benutzer für Seite1 vorbereiten

1
2
3
useradd -m -d /var/www/html/Seite1 www-seite1
adduser user1 www-seite1
adduser user2 www-seite1

vhost für Seite1 anpassen

1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
  ServerName Seite1

  <ifmodule mpm_itk_module>
    AssignUserID www-seite1 www-seite1
  </ifmodule>

  DocumentRoot /var/www/html/Seite1
  ...

EDIT:

Damit kannst Du Dir die Zugriffskontrolle von Samba sparen. Falls Du Samba-Freigaben verwendest, wirst Du aber nicht auf force user und force group verzichten können. Ohne diese Direktiven werden Dateien immer mit der Standard UID und GID des Benutzers angelegt. Du könntest natürlich den für den Apache angelegten Benutzer zu den Gruppen user1 und user2 hinzufügen aber so ein Durcheinander an Benutzerrechten würde ich unbedingt vermeiden.

Samba Freigabe für Seite1

1
2
3
4
5
6
7
8
9
[seite1]
  path = /var/www/html/Seite1
  read only = no
  writeable = yes
  browseable = yes
  create mask = 0644
  directory mask = 0755
  force user = www-seite1
  force group = www-seite1

Da Du jetzt auf die Zugriffssteuerung von Samba verzichtest und statt dessen die Zugriffssteuerung des Dateisystems verwendest, solltest Du jetzt die Modi 644 und 755 verwenden.

SickofSociety

(Themenstarter)
Avatar von SickofSociety

Anmeldungsdatum:
11. September 2006

Beiträge: 309

Hallo zusammen, nochmal vielen Dank für eure Hilfe. Ich habe es jetzt so gelöst:

Alle User sind in der Gruppe www-data. Die User wurden mit useradd -s /bin/false username angelegt, also ohne home und ohne SSH Zugriff.

Die Zugriffe steuere ich über Samba mit Gruppen. Somit kann trotz www-data Zugehörigkeit nicht auf die anderen Ordner/Freigaben zugegriffen werden. Man sieht die Freigabe zwar, wird aber nach einem Passwort gefragt, wenn man nicht in der richtigen Gruppe ist.

Im Prinzip reicht das für meine Anforderungen. Die User können über eine einfache Freigabe grafisch auf die Dateien zugreifen, kommen aber nicht an die Ordner, für die sie keine Berechtigungen haben. Shell Zugriff ist nicht möglich, damit sollte es ja einigermaßen sicher sein.

Dein Hinweis mit force user und force group war sehr gut @bugblatterbeast. Somit werden alle erstellten Dateien gleich unter dem richtigen Apache-User ausgeführt.

Das Ganze erscheint mir zwar immer noch nicht korrekt, aber es funktioniert. Im Prinzip genau anders rum, wie bei Windows Freigaben. Dort würde ich die Freigabe mit rwx erstellen und dann mit Gruppen auf die Ordner berechtigen.

Eine Frage habe ich noch. Da ich die User mit useradd -s angelegt habe, gibt es ja kein Homeverzeichnis. Allerdings wird nach der Anmeldung am Share auch die Freigabe "Username" angezeigt.

Also zB: \\10.0.100.50\username

Dort kann der User zwar nichts ändern, ich hätte das aber trotzdem gerne weg. Kommt das von Samba? Wird automatisch für jeden Samba User eine Freigabe erstellt?

bugblatterbeast

Avatar von bugblatterbeast

Anmeldungsdatum:
30. Januar 2008

Beiträge: 477

Wird automatisch für jeden Samba User eine Freigabe erstellt?

Ja, wenn Du die Spezial-Freigabe [homes], die in ihrer Konfiguration keinen Pfad braucht, aktiviert hast. Ich benutze die nie. Kann sein, dass es da zu Problemen kommt, wenn ein Samba Benutzer kein Home-Verzeichnis hat.

bugblatterbeast

Avatar von bugblatterbeast

Anmeldungsdatum:
30. Januar 2008

Beiträge: 477

Die User wurden mit useradd -s /bin/false username angelegt, also ohne home und ohne SSH Zugriff.

Um die Erstellung des Standard Home Verzeichnisses zu verhindern muss soweit ich weiß auch die Option -M (kurz für --no-create-home) gewählt werden. Du kannst ja mal mit folgendem Befehl nachsehen, ob die Benutzer wirklich kein Home-Verzeichnis haben:

1
less /etc/passwd | grep username

Du musst Dir übrigens keine Sorgen machen, dass mit diesem Befehl das Benutzerpasswort oder dessen Hash-Wert angezeigt werden. Der Name der Konfigurationsdatei ist historisch. Das Passwort wird schon seit Jahrzehnten woanders gespeichert.

Beispiel:

1
2
3
4
$ less /etc/passwd | grep user1
user1:x:1000:1000:Hauptuser,,,:/home/user1:/bin/bash
$ less /etc/passwd | grep user2
user2:x:1001:1001:NoLoginUser,,,:/nonexistent:/sbin/nologin

SickofSociety

(Themenstarter)
Avatar von SickofSociety

Anmeldungsdatum:
11. September 2006

Beiträge: 309

Das Homeverzeichnis der User läuft auf /bin/false wie eingestellt.

user:x:1001:1001::/home/user:/bin/false

Ich habe allerdings in der smb.conf den Abschnitt [homes] drin.

[homes]
comment = Home Directories
browsable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %s

Kann ich den Abschnitt einfach rausnehmen? Das hatte ich aus der Default.conf übernommen.

bugblatterbeast

Avatar von bugblatterbeast

Anmeldungsdatum:
30. Januar 2008

Beiträge: 477

Das Homeverzeichnis der User läuft auf /bin/false wie eingestellt.

1
user:x:1001:1001::/home/user:/bin/false

Das ist nicht richtig. Der Eintrag "/bin/false" steht für die shell und bedeutet, dass die Benutzer sich nicht einloggen können (kann in dem Fall "/bin/false" oder "/sbin/nologin" sein - Unterschied liegt nur in der zurückgegeben Fehlermeldung beim Login-Versuch). Wenn die Benutzer wirklich kein Home-Verzeichnis hätten, dürfte da nicht "/home/user" stehen sondern so etwas wie "/nonexistent".

Kann ich den Abschnitt einfach rausnehmen?

Ja, den Abschnitt [homes] kannst Du einfach raus nehmen oder auskommentieren.

SickofSociety

(Themenstarter)
Avatar von SickofSociety

Anmeldungsdatum:
11. September 2006

Beiträge: 309

Hallo bugblatterbeast, vielen Dank für die Antwort. [homes] auszukommentieren hat genau den gewünschten Effekt gebracht. Es wird kein Share mit Usernamen mehr angezeigt.

Wegen dem home Verzeichnis für User, habe ich mich dummerweise auf die Anleitung im Internet verlassen. Du hast natürlich recht. mit -s wird nur der Shellzugriff unterbunden. Um ohne home anzulegen, muss -M gesetzt werden.

Vielen Dank nochmal.

Antworten |