Hinweis: Diese Seite gibt meinen Wissensstand von ca. 2014 wieder und sollte heutzutage nicht mehr als Blaupause für das Anlegen eines Fileservers genutzt werden. Für eine Anleitung, die erst später veraltet sein wird, bitte die übergeordnete Seite betrachten. ;-) |
Als Nächstes steht die Konfiguration des Webservers auf dem Plan. Dazu wird dieser zuerst installiert:
# pacman -S apache
Die Konfiguration liegt im Verzeichnis /etc/httpd/conf/
. In dem Tutorial
Step by
Step: Configuring SSL Under Apache werden Zertifikat und Server-Key getrennt voneinander dort abgelegt,
weil dies der Default-Konfiguration des Webservers entspricht. Ob man das am Ende genauso macht bleibt letztlich
jedem selbst überlassen. Der Konsistenz halber mache ich das genauso wie bei vsftpd
(im
Prinzip kann man sogar dasselbe Zertifikat benutzen).
# openssl req -new -x509 -days 365 -sha1 -newkey rsa:1024 -nodes -keyout /etc/ssl/certs/httpd.pem -out /etc/ssl/certs/httpd.pem [...] # chmod 600 /etc/ssl/certs/httpd.pem # openssl x509 -fingerprint -in /etc/ssl/certs/httpd.pem -noout SHA1 Fingerprint=8C:E6:C1:A1:D8:69:D3:1D:6A:86:07:1E:7B:6E:67:BA:3B:80:49:90 # vi /etc/httpd/conf/httpd.conf
Die Beispiel-Konfiguration ist bereits ein wahres Monster. Wenn man dieser folgt, dann würde man die
Konfigurationsdatei extra/httpd-ssl.conf
einbinden und zusätzlich zum normalen Webserver auf
Port 80 einen virtuellen Webserver auf Port 443 erhalten, der SSL macht. Das ist jedoch für unseren
Anwendungsfall Quatsch und vergrößert nur die Angriffsfläche. Stattdessen werden wir die
bestehende Konfiguration umbauen.
#Listen 80 User felix Group users DocumentRoot "/srv/http" <Directory "/srv/http"> Options Indexes FollowSymLinks AllowOverride None #Require all granted AuthName "My files" AuthType Basic AuthUserFile /etc/httpd/conf/auth_file Require valid-user </Directory>
Zuerst kommentieren wir die Listen
-Anweisung für Port 80 aus. Danach werden die existierenden
Einträge User
und Group
geändert. Damit läuft der Webserver mit genau
den Privilegien, die der normale User-Account hat -- das ist notwendig, weil sämtliche Dateizugriffsrechte
ebenfalls auf diesen User laufen.
DocumentRoot
und der dazugehörige Directory
-Eintrag bleiben auf
/srv/http
stehen. Details siehe unten.
Der nächste Abschnitt sorgt für den Zugriffsschutz. Zwar wollen wir, dass die Dateien per HTTPS durchsuchbar sind, aber natürlich soll das nicht jeder können. Für diesen Zweck reicht Basic Authentication dicke aus, denn die Übertragung der Login-Daten ist ja durch das SSL geschützt. (Das sieht übrigens auch die Apache-Dokumentation zu mod_auth_digest so.)
Als Nächstes habe ich die Konfiguration aus extra/httpd-ssl.conf
direkt unterhalb des
auskommentierten "Listen 80
" eingefügt und auf das Folgende abgespeckt:
Listen 443 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/run/httpd/ssl_scache(512000)" SSLSessionCacheTimeout 300 SSLEngine on SSLCertificateFile "/etc/ssl/certs/httpd.pem" SSLCertificateKeyFile "/etc/ssl/certs/httpd.pem" BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0
Jetzt müssen noch die folgenden Module geladen werden:
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule ssl_module modules/mod_ssl.so
Als letzter Schritt wird die in der Konfiguration angekündigte Datei /etc/httpd/conf/auth_file
angelegt und der Service gestartet. (Die Passwort-Datei sollte mit normalen Benutzerrechten angelegt werden,
damit sie dem richtigen Benutzer gehört).
# htpasswd -cs /etc/httpd/conf/auth_file felix New password: Re-type new password: Adding password for user felix # chown felix:users /etc/httpd/conf/auth_file # chmod 600 /etc/httpd/conf/auth_file # systemctl start httpd.service
Wir werden später die SVN-Repositories über den URL https://filebox/svn
zugängig
machen. Damit es nicht zu Überdeckungen von Verzeichnissen bzw. Dateien kommt, sollen die auf dem Server
abgelegten Dateien über https://filebox/files
erreichbar sein. Außerdem soll für
den Fall, dass nur https://filebox/
angegeben wird, eine Art Startseite mit Links auf die
(logischen) Unterverzeichnisse angezeigt werden.
Zu diesem Zwecke legen wir in /srv/http
, das per Directory
-Eintrag bzw.
DocumentRoot
als "/" angezeigt wird, einen symbolischen Link auf /mnt/files
an.
Außerdem wird eine Datei mit Namen index.html
angelegt, die als Startseite dient.
# cd /srv/http # ln -s /mnt/files # vi index.html <html> <head> <title>My stuff</title> </head> <body> <h1>My stuff</h1> <ul> <li><a href="files/">files/</a></li> <li><a href="svn/">svn/</a></li> </ul> </body> </html>
Damit ist die grundlegende Konfiguration abgeschlossen. Wer allerdings etwas mehr Zeit investieren kann, der
sollte sich die httpd.conf
noch mal genau ansehen und evtl. nicht benötigen Krempel entfernen.
Die Dokumentation auf der Apache-Webseite ist ziemlich gut, aber das Thema ist auch sehr umfangreich.