Einrichtung eines "Upload"-Users für das Apache-Docroot
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