Zugriffsrechte für Ordner in der LMN7

Hallo miteinander,
ich habe für meinen Informatik-Kurs XAMPP auf den Linuxclients installiert und auch in dessen Einstellungen dafür gesorgt, dass das Verzeichnis /home/$USER/media/$USER/ als Order www erkannt wird. D.h. die Schüler sollen die Möglichkeit haben, in ihren Dateien einen Ordner „www“ zu erstellen und dieser soll von XAMPP als Quelle für Webseiten verwendet werden.

Der Teil, der jetzt nicht funktioniert sind die Zugriffsrechte auf den Ordner www. XAMPP meldet beim Öffnen des Ordners ein „Access Denied“ und ich konnte den Ordner (zumindest bisher) weder mit chmod noch mit setfacl so weit öffnen, dass XAMPP die Rechte bekommt.

Aktueller Stand ist:

root@rechner:/home/username/media/username# getfacl www/
file: www/
owner: username
group: domain\040users
user::rwx
group::—
other::—

Änderungen der Rechte über die GUI werden sofort wieder zurückgesetzt.
Habt ihr vielleicht irgendwelche Vorschläge?

Vielen Dank, liebe Grüße und bleibt gesund,
Wolfgang

Hallo Wolfgang,

Du könntest versuchen die ACL zu löschen und dann mit chmod der Gruppe unter welcher der Webserver läuft, Leserechte auf das Verzeichnis geben.
Oder Du ergänzt die ACL für die Gruppe des Webservers, so daß dieser Leserechte bekommt. Evtl. mußt Du auch die ACL für /home bzw. auch die Default ACL ändern, so daß neue Verzeichnisse automatisch die Rechte für die Gruppe des Webservers haben.

Viele Grüße
Klaus

Hallo Klaus,

vielen Dank erstmal für deine Rückmeldung!
Das klingt alles sehr vielsprechend, allerdings habe ich keine Ahnung, wie ich das umsetzen soll.
Ein setfacl -b -R www/ hatte zumindest schon mal keinen Effekt auf das Verzeichnis.
Liebe Grüße,

Wolfgang

Hallo Wolfgang,

mit setfacl -b -R www entfernst Du die ACL. Einen Effekt sollte es auf jeden Fall haben, wenn auch nicht den gewünschten.

Hier ist das Mysterium ACL ganz gut beschrieben:
https://wiki.ubuntuusers.de/ACL/

Was Du brauchst ist wahrscheinlich:
ACL modifizieren, so daß die Gruppe www-data in das Verzeichnis www wechseln darf und darin lesen darf:
setfacl -m g:www-data:rx www

Setzen der Default ACL, so daß neu erstellte Dateien/Verzeichnisse unterhalb www auch für www-data lesbar sind:
setfacl -d -m g:www-data:rx www

Vorausgesetzt der Webserver läuft mit der Gruppe www-data.
Wie gesagt, es kann sein, daß Du aber schon weiter oben in /home ansetzen musst.

Viele Grüße
Klaus

Hallo Wolfgang,
das Problem könnte darin liegen, dass Dein Zielverzeichnis ein Serververzeichnis ist – auf das hat der lokale root (den Du wahrscheinlich verwendest, um an Rechten rumzuspielen) dort keine Schreibrechte hat, weil da noch die Samba-Benutzerverwaltung dazwischen hängt.

Irgendwelche Skripte, die auf dem Serververzeichnis Rechte setzen müssen auf dem Client entweder nach dem Anmelden mit Userrechten laufen oder auf dem Server mit dem dortigen root.

Oder Du verbiegst das www des apachen einfach auf /home/$USER, also das lokale persönliche Verzeichnis. Müssen die Schuls halt dran denken, am Ende des Unterrichts Ihre Endergebnisse ins Serververzeichnis zu schieben.

Gruß
Sascha

Lieber Klaus, lieber Sascha,
vielen Dank für eure Beiträge an denen ich mich heute wieder etwas versuchen konnte.
Leider hat jedoch bisher kein Vorschlag zum Erfolg geführt.
Änderungen der ACL haben am Client wie schon erwähnt überhaupt keinen Effekt.
Zwischenzeitlich habe ich herausgefunden, dass XAMPP als Benutzer und Gruppe daemon ausgeführt wird (wenn man es mit sudo startet, was bei mir der Fall ist).

Nun habe ich sowohl bei meinem Home als auch dem Ordner www über den Server die ACLs für daemon und www-data gesetzt, aber bekomme trotzdem die Meldung „Zugriff verweigert“.

Das einzige, was er zulässt ist (wie von Sascha beschrieben) eine Umleitung nach /home/$USER/www, welches ich auch mit chmod bearbeiten kann, allerdings werden die Inhalte ja nicht gespeichert.
Falls jemand also noch weitere Vorschläge hat, bin ich für alles offen. :slight_smile:

Vielen Dank und liebe Grüße,
Wolfgang

Hallo Wolfgang,

ist denn das Apache Modul mod_userdir aktiviert und wie ist es konfiguriert?
Wie rufst Du das Verzeichnis im Browser auf?

Was bedeutet das? /home/$USER ist das servergespeicherte Homelaufwerk, wenn ich das richtig verstehe. Wieso werden die Inhalte nicht gespeichert? Wie sehen die Rechte des Verzeichnisses /home/$USER/www aus?

Viele Grüße
Klaus

Hallo,

wir haben das so umschifft, indem wir auf den Clients in der Konfig von XAMPP den document root nach /tmp verbogen haben.

Hallo Carsten,
dann seh ich über http://localhost zwar das tmp-Verzeichnis, aber es ändert nichts an den fehlenden Rechten zum persönlichen Home-Verzeichnis.
Oder habt ihr da dann wiederrum einen Link gesetzt?
Liebe Grüße,
Wolfgang

Hallo Klaus,
in der /opt/lampp/etc/httpd.conf steht die Zeile

LoadModule userdir_module modules/mod_userdir.so
weshalb ich mal davon ausgehe, dass es aktiviert ist, weiß aber nicht, wo ich das noch wie konfigurieren müsste.

Ich hatte bisher in der /opt/lampp/etc/httpd.conf einfach nur

<Directory /www/>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all

und im alias_module einen entsprechenden Eintrag hinterlegt.

Der Inhalt inkl. der Rechte meines Homes sieht dann noch so aus:

root@r306-pc01:/home/hh# ls -all
insgesamt 160
drwxr-xr-x 29 hh domain users 4096 Jan 11 12:05 .
drwxr-xr-x 5 root root 4096 Jan 11 11:35 …
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .arduino
-rw------- 1 hh domain users 12788 Jan 11 11:56 .bash_history
-rw-r–r-- 1 hh domain users 220 Jan 11 11:36 .bash_logout
-rw-r–r-- 1 hh domain users 3771 Jan 11 11:36 .bashrc
lrwxrwxrwx 1 hh domain users 24 Jan 11 11:36 Bilder → /home/hh/media/hh/Bilder
drwxr-xr-x 30 hh domain users 4096 Jan 11 12:05 .cache
drwxr-xr-x 4 hh domain users 4096 Jan 11 11:36 .cinnamon
drwxr-xr-x 25 hh domain users 4096 Jan 11 11:36 .config
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 .dbus
lrwxrwxrwx 1 hh domain users 27 Jan 11 11:36 Dokumente → /home/hh/media/hh/Dokumente
lrwxrwxrwx 1 hh domain users 27 Jan 11 11:36 Downloads → /home/hh/media/hh/Downloads
lrwxrwxrwx 1 hh domain users 40 Jan 11 11:36 .eclipse → /home/hh/media/hh/Einstellungen/.eclipse
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:59 .gnupg
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .greenfoot
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .gvfs
-rw-r–r-- 1 root root 5 Jan 11 11:36 .hidden
-rw------- 1 hh domain users 6166 Jan 11 11:36 .ICEauthority
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .icons
drwxr-xr-x 4 hh domain users 4096 Jan 11 11:36 .java
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 .local
drwxr-xr-x 8 root root 4096 Jan 11 11:36 media
lrwxrwxrwx 1 hh domain users 41 Jan 11 11:36 .minetest → /home/hh/media/hh/Einstellungen/.minetest
drwxr-xr-x 3 hh domain users 4096 Jan 11 12:05 .mono
drwxr-xr-x 4 hh domain users 4096 Jan 11 11:36 .mozilla
lrwxrwxrwx 1 hh domain users 23 Jan 11 11:36 Musik → /home/hh/media/hh/Musik
lrwxrwxrwx 1 hh domain users 29 Jan 11 11:36 Öffentlich → /home/hh/media/hh/Öffentlich
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .oracle_jre_usage
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 ovtr
drwxr-xr-x 5 hh domain users 4096 Jan 11 11:36 .p2
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 .pki
-rw-r–r-- 1 hh domain users 807 Jan 11 11:36 .profile
lrwxrwxrwx 1 hh domain users 30 Jan 11 11:36 Schreibtisch → /home/hh/media/hh/Schreibtisch
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 .scratch
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:35 Scratch
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 sketchbook
drwx------ 3 hh domain users 4096 Jan 11 11:36 snap
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:38 .ssh
-rw-r–r-- 1 hh domain users 0 Jan 11 11:35 .sudo_as_admin_successful
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .swt
drwxr-xr-x 2 hh domain users 4096 Jan 11 11:36 .themes
lrwxrwxrwx 1 hh domain users 44 Jan 11 11:36 .thunderbird → /home/hh/media/hh/Einstellungen/.thunderbird
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 .tooling
drwxr-xr-x 3 hh domain users 4096 Jan 11 11:36 var
lrwxrwxrwx 1 hh domain users 24 Jan 11 11:36 Videos → /home/hh/media/hh/Videos
lrwxrwxrwx 1 hh domain users 26 Jan 11 11:36 Vorlagen → /home/hh/media/hh/Vorlagen
-rw-r–r-- 1 hh domain users 294 Jan 11 11:36 .wget-hsts

Das gewüschte Verzeichnis wollte ich nun in /home/hh/media/hh/www legen, aber ich nehme an, es scheitert schon daran, dass media dem root gehört?

Liebe Grüße und vielen Dank für eure Mühen,
Wolfgang

Hallo Wolfgang,

man muß erstmal wissen, ob es das richtige Verzeichnis ist, in welches der Webserver schreiben will. Also muß man sich die Konfiguration des Moduls mod_userdir.so ansehen. Bei einer einfachen Apache Installation ist das userdir.conf. Bei mir sieht das so aus:

<IfModule mod_userdir.c>
  UserDir public_html
  UserDir disabled root

  <Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
  </Directory>
</IfModule>

Siehe auch:
https://httpd.apache.org/docs/2.4/mod/mod_userdir.html
https://httpd.apache.org/docs/2.4/howto/public_html.html

Das ist kein Userdir aus der Sicht von Apache. Siehe userdir.conf.

Was hast Du da gemacht, und wie sieht das aus?

Das scheitert nicht daran, denn jeder User kann mit den Rechten 755 in das Verzeichnis wechseln.

Viele Grüße
Klaus

Hallo Klaus,

vielen Dank für deine Rückmeldung.
Mit deiner Hilfe hatte ich es tatsächlich geschafft das userdir zu aktivieren und habe auch über localhost/~hh/ das Verzeichnis /home/hh/public_html/ gesehen.

Ungünstigerweise wird das Verzeichnis nach einem synchronisierten Neustart jedoch zurückgesetzt, weshalb ich Dateien immer im Unterordner /home/hh/media/hh/ speichern muss.
Unabhängig davon, ob ich den Pfad in der userdir.conf anpasse oder einen symbolischen Link ins gewünschte Verzeichnis anlege, bekomme ich weiterhin die „Zugriff verweigert“-Meldung.

Mein bisheriger Versuch sah in der /opt/lampp/etc/httpd.conf so aus:

<Directory /www/>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</ Directory>

< IfModule alias_module>
Alias /www /home/$USER/media/$USER/www/

</IfModule alias_module>

Wenn ich das mit diesen Einstellungen aus einer Windows-Umgebung mache, kann ich zusätzliche Pfade für Webseiten hinzufügen und diese dann über http://localhost/www/ erreichen.

Liebe Grüße,
Wolfgang

Hallo Wolfgang,

userdir.conf:

<IfModule mod_userdir.c>
  UserDir /home/*/www
  UserDir disabled root

  <Directory /home/*/www>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
  </Directory>
</IfModule>

Im Loginscript des Users dann beim Login einen Link erstellen lassen:

ln -s /home/$USER/media/$USER/www /home/$USER

Deinen obigen http.conf Block dann weg.
Das sollte doch funktionieren.

Viele Grüße
Klaus

EDIT: public_html durch www ersetzt

Hallo Klaus,

habe deine Änderungen umgesetzt, bekomme aber immer noch ein „Zugriff verweigert“.
In der error_log steht dazu

Symbolic link not allowed or link target not accessible: /home/hh/www

Liebe Grüße,

Wolfgang

Hallo Wolfgang,

dann musst Du Dir die Rechte von /home/$USER/media/$USER/www ansehen. Kann der Webserver User in dieses Verzeichnis absteigen?

Viele Grüße
Klaus

Liebe Community, lieber Klaus,

leider muss ich den Thread aus gegebenem Anlass wieder rauskramen.
Zwischenzeitlich haben wir das Setup ein wenig umgestellt, was aber auf mein ursprüngliches Problem keinen Einfluss hat.
Nochmal zum aktuellen Stand:
Ich habe auf dem Client einen Apache installiert mit der userdir.conf aktiviert und den Einstellungen, wie Klaus sie am 14.1. empfohlen hat.
Gleichzeitig funktioniert der symbolische Link von /home/hh/www nach /home/hh/media/hh/www, wo meine Dateien liegen.
Navigiere ich zu localhost/~hh/ bekomme ich nach wie vor eine 403 Forbidden - Meldung und in der error.log heißt es:

AH00037: Symbolic link not allowed or link target not accessible: /home/hh/www

Meine Vermutung ist, dass der Client mit seinem lokalen Benutzer nicht auf die AD-Nutzer des Server zugreifen kann.
ein getfacl des entsprechenden Servers sieht aktuell so aus:

# file: www
# owner: LINUXMUSTER\134hh
# group: users
user::rwx
user:root:rwx
user:3000019:rwx
user:3000022:rwx
user:3000024:rwx
group::---
group:daemon:r-x
group:www-data:r-x
group:users:---
group:LINUXMUSTER\134admins:rwx
group:LINUXMUSTER\134global-admins:rwx
group:\134owner\040rights:rwx
group:LINUXMUSTER\134hh:rwx
mask::rwx
other::---
default:user::rwx
default:user:root:rwx
default:user:daemon:r-x
default:user:3000019:rwx
default:user:3000022:rwx
default:user:3000024:rwx
default:user:LINUXMUSTER\134hh:rwx
default:group::---
default:group:daemon:r-x
default:group:www-data:rwx
default:group:users:---
default:group:LINUXMUSTER\134admins:rwx
default:group:LINUXMUSTER\134global-admins:rwx
default:group:\134owner\040rights:rwx
default:group:LINUXMUSTER\134hh:rwx
default:mask::rwx
default:other::---

Ich wäre sehr dankbar, wenn jemand noch weitere Ideen oder Vorschläge hat.

Liebe Grüße,
Wolfgang

Lieber Wolfgang,

oje, die zusätzlichen Datei-Attribute machen auch mir das Leben oft schwer. Aber vielleicht könntest Du Deine Apache- direktiven so anpassen, dass den symbolischen Links wirklich nachgegangen wird:

```
Options FollowSymLinks Indexes
        AllowOverride None
``.

(innerhalb der directory- Direktive).

Ich habe mir aber auch überlegt, ob ich an Deiner Stelle nicht „einfach“ einen docker-Container (auf den Windows clients) installieren würde, um diesen ganzen Problemen zu entgehen.
Dazu würde ich den persistenten Teil der Dateien, die dann später auch noch von den Schülern beibehalten werden sollen, auslagern auf ein Home- Unterverzeichnis. Es gibt bereits fertige Dockercontainer, entweder mit xanpp oder besser: mit einer PHP MySQL-Entwicklungsumgebung.
Das ganze klingt vielleicht nach einem aufwendigen workarround, aber man kann die Dockercontainer sehr schnell upgraden und bei Bedarf solche Dinge wie nodejs oder anderes nachinstallieren… vielleicht eine Option!
In jedem Fall muss die interne Firewall so angepasst werden, dass die Webserver gegenseitig erreicht werden können, sofern Du möchtest, dass sich die Schüler gegenseitig ihre Ergebnisse anzeigen.

Viel Erfolg
Christoph G.

P.S. für docker brauchst du das WSL.
P.P.S ich habe keinerlei Erfahrung mit docker unter Windows!!!