|
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
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)
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
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
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
| apt install apache2-mpm-itk
a2enmod mpm-itk
service apache2 restart
|
Benutzer für Seite1 vorbereiten
| useradd -m -d /var/www/html/Seite1 www-seite1
adduser user1 www-seite1
adduser user2 www-seite1
|
vhost für Seite1 anpassen
| <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
| [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)
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
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
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: | 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:
| $ 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)
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
Anmeldungsdatum: 30. Januar 2008
Beiträge: 477
|
Das Homeverzeichnis der User läuft auf /bin/false wie eingestellt.
| 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)
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.
|