Mit dem Paket system-user-wwwrun wurden aus Sicherheitsgründen Restriktionen für den Apache2-User wwwrun eingeführt, die es diesem nicht mehr erlauben, sich am System einzuloggen oder Daten mittels scp, sftp oder ftp zu übertragen

Wird dieses benötigt, ist hierzu ein entsprechender User-Acount einzurichten. Der Name des Users ist beliebig und sollte zur Vermeidung von Brute-Force-Angriffen keinesfalls einem weit verbreiteten Usernamen entsprechen. Ich nutze in der folgenden Beschreibung mal beispielhaft den Usernamen “webdoedel”.

Zunächst ist im eisfair-Menü unter “User administration|Unix users” mit F7 der User “webdoedel” als normaler User einzurichten. Nun schauen wir nach, welcher Gruppe die Verzeichnisse in /var/www zugeordnet sind; in der Regel wird dies nogroup sein:

ls -la /var/www
total 36
drwxr-xr-x  5 root   root    4096 Aug  1  2022 .
drwxr-xr-x 21 root   root    4096 Oct  2 22:14 ..
drwxr-xr-x  2 wwwrun nogroup 4096 Jun 23 12:29 cgi-bin
drwxr-xr-x 16 wwwrun nogroup 4096 Oct 21 17:36 htdocs
drwxr-xr-x  2 wwwrun nogroup 4096 Oct 23 00:00 log

Anschließend fügen wir den User “webdoedel” unter “User administration|Unix users” (Taste F5) nun zusätzlich auch dieser Gruppe hinzu.

Damit der User “webdoedel” nun in das Docroot des Apachen schreiben darf, müssen gegebenenfalls noch Schreibrechte für diese Gruppe erteilt werden:

# Schreibrecht in /var/www
chmod -R g+w /var/www

# Schreibrecht in /var/www/htdocs
chmod -R g+w /var/www/htdocs

# Schreibrecht in /var/www/htdocs/irgendein_unterverzeichnis
chmod -R g+w /var/www/htdocs/irgendein_unterverzeichnis

Wer scp oder sftp zum Befüllen der Webspace nutzt, ist schon fertig. Weitere Konfiguration ist erforderlich, wenn auf dem eisfair-Server ein FTP-Server (proftpd oder pure-ftpd) eingerichtet wird und zur Übertragung von Daten genutzt werden soll.

Der oben generierte Benutzer würde nach Einloggen in den FTP-Server nur sei Home-Verzeichnis “/home/webdoedel” sehen und hätte keinen Zugriff auf den Webspace. Zudem müssen wir nun auch zwischen den beiden FTP-Servern unterscheiden, da sich sich in ihrem Verhalten unterscheiden: pure-ftpd folgt symbolischen Links im Homeverzeichnis von “webdoedel” auch dann, wenn sie außerhalb des Homerverzeichnisses liegen, so dass wir z. B. folgende symbolischen Links anlegen können, wobei der Name des Links frei wählbar ist, ich nehme mal Namen nach dem Schema “link_auf_”:

cd /home/webdoedel

# Link auf /var/www
ln -s /var/www link_auf_www

# Link auf /var/www/htdocs
ln -s /var/htdocs link_auf_htdocs

# Link auf /var/www/htdocs/irgendein_unterverzeichnis
ln -s /var/www/htdocs/irgendein_unterverzeichnis link_auf_irgendein_unterverzeichnis

Der proftpd folgt in der auf eisfair vorliegenden gehärteten Konfiguration solchen Links nicht, weshalb wir hier mit “mount bind” arbeiten müssen. Natürlich funktioniert diese Methode auch mit dem pure-ftpd. Mount binds können auf zwei Weisen angelegt werden: “Eintragung in /etc/fstab„ oder “native Systemd-Units”.

1. Eintragung in die /etc/fstab

Die zugehörigen Zielverzeichnisse im Homeverzeichnis von “webdoedel” sind frei wählbar und sind hier mal beispielhaft immer mit “mount_auf_” eingeleitet. Systemd generiert daraus dann Systemd-Units und legt die Zielverzeichnisse automatisch an, falls sie noch nicht existieren:

# Sofortiges Mounten beim Boot
/var/www /home/webdoedel/mount_auf_www none bind 0 0
/var/www/htdocs /home/webdoedel/mount_auf_htdocs none bind 0 0
/var/www/irgendein_unterverzeichnis /home/webdoedel/mount_auf_irgendein_unterverzeichnis none bind 0 0
 
# Kein sofortiges Mounten beim Boot
/var/www /home/webdoedel/mount_auf_www none bind,noauto 0 0
/var/www/htdocs /home/webdoedel/mount_auf_htdocs none bind,noauto 0 0
/var/www/irgendein_unterverzeichnis /home/webdoedel/mount_auf_irgendein_unterverzeichnis none bind,noauto 0 0

2. Anlegen nativer Systemd-Units

Für jeden “mount bind” ist in /etc/systemd/system eine Datei mit dem vollen Pfad zum Zielverzeichnis und der Dateinamenserweiterung “.mount” als Dateinamen anzulegen, wobei “/” durch ”-” zu ersetzen ist, also z. B: “home-webdoedel-mount_auf_www.mount”. Entsprechend den unter 1. genannten Beispielen müssen diese Unitdateien folgenden Inhalte haben:

Unitdatei home-webdoedel-www.mount:

[Unit]
Description=Mount bind auf /var/www
 
[Mount]
What=/var/www
Where=/home/webdoedel/mount_auf_www
Type=none
Options=bind

[Install]
WantedBy=multi-user.target

Unitdatei home-webdoedel-htdocs.mount:

[Unit]
Description=Mount bind auf /var/www/htdocs
 
[Mount]
What=/var/www/htdocs
Where=/home/webdoedel/mount_auf_htdocs
Type=none
Options=bind

[Install]
WantedBy=multi-user.target

Unitdatei home-webdoedel-irgendein_unterverzeichnis.mount:

[Unit]
Description=Mount bind auf /var/www/htdocs/irgendein_unterverzeichnis
 
[Mount]
What=/var/www/htdocs/irgendein_unterverzeichnis
Where=/home/webdoedel/mount_auf_irgendein_unterverzeichnis
Type=none
Options=bind

[Install]
WantedBy=multi-user.target

Unabhängig davon, ob nun Methode 1 oder 2 gewählt wurde, sind diese nun noch dem Systemd bekannt zu machen:

service daemon-reload

Aktivieren der Mounts auf der Kommandozeile:

service start home-webdoedel-mount_auf_www.mount
service start home-webdoedel-mount_auf_htdocs.mount
service start home-webdoedel-mount_auf_irgendein_unterverzeichnis.mount

Deaktivieren der Mounts auf der Kommandozeile:

service stop home-webdoedel-mount_auf_www.mount
service stop home-webdoedel-mount_auf_htdocs.mount
service stop home-webdoedel-mount_auf_irgendein_unterverzeichnis.mount

Statusabfrage der Mounts auf der Kommandozeile:

service status home-webdoedel-mount_auf_www.mount
service status home-webdoedel-mount_auf_htdocs.mount
service status home-webdoedel-mount_auf_irgendein_unterverzeichnis.mount

Die folgenden Befehle sind nur bei Anlegen der Mounts als native Systemd-Units sinnvoll, da bei Eintragung dieser in die fstab, alleine der fstab-Eintrag das Verhalten beim Boot bestimmt.

Sollen diese Mount beim Rechnerboot automatisch eingebunden werden, sind sie nun noch zu aktivieren:

service enable home-webdoedel-mount_auf_www.mount
service enable home-webdoedel-mount_auf_htdocs.mount
service enable home-webdoedel-mount_auf_irgendein_unterverzeichnis.mount

Abschalten der automatischen Mounts geschieht mittels:

service disable home-webdoedel-mount_auf_www.mount
service disable home-webdoedel-mount_auf_htdocs.mount
service disable home-webdoedel-mount_auf_irgendein_unterverzeichnis.mount