|
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.