Es gibt mittlerweile viele Wege um einen Webserver aufzusetzen und ihn anschließend optimal zu konfigurieren. Ich zeige euch heute eine der leichtesten und zugleich effektivsten.
Die meisten Admins versuchen das Problem mit den Sicherheitsfeatures von PHP zu erschlagen, und spielen mit Konfigurationen wie open_basedir oder safe_mode rum, andere versuchen PHP – mit Hilfe des Paketes suphp – als den jeweiligen User auszuführen.
Meine Methode geht direkt auf den Apache los, dort wo es wohl am schlauesten ist. Mit dem Paket apache2-mpm-itk von Ubuntu bzw. Debian ist es möglich jeden VHost als einen separaten User auszuführen.
Ich habe mich momentan für den Ubuntu 10.04 LTS Server entschieden, da hier alle benötigten Pakete in einer aktuellen Version vorhanden sind. Für die Installation benötigt ihr folgende Befehle:
1 2 3 4 5 |
# Superuser rechte erlangen sudo su # Apache / PHP / Mysql / PureFTPD aptitude install apache2-mpm-itk aptitude install php5 php5-curl php5-gd php5-imagick php5-imap php5-mcrypt php5-mysql aptitude install mysql-server aptitude install pure-ftpd # Editor aptitude install vim-nox |
Falls bei eurer Installation kein aptitude vorhanden ist müsst ihr es vorher mit „apt-get install aptitude“ installieren.
Konfiguration des FTP-Servers:
PureFTPD ist sehr sicher und leicht zu konfigurieren. Für einen reibungslosen Betrieb Schlage ich folgende Parameter vor:
1 2 3 4 5 6 7 |
cd /etc/pure-ftpd/conf echo yes > BrokenClientsCompatibility echo yes > ChrootEveryone echo yes > DontResolve echo 4 > MaxClientsPerIP echo 50 > MaxClientsNumber danach müsst ihr den FTP Server neustarten "/etc/init.d/pure-ftpd restart" |
Da PureFTPD und apache2-mpm-itk auf Unixbenutzer geht, müssen wir normale Benutzer anlegen. Natürlich wollen wir nicht dass diese Benutzer einen Shell-Zugang auf unseren Server bekommen. Deshalb fügen wir /dev/null zu den shells hinzu – was dazu führt, dass User den FTP-Dienst benutzen können, jedoch keine Shell auf dem Server aufrufen dürfen.
Mithilfe von „echo /dev/null >> /etc/shells“ fügt ihr /dev/null an das Ende der Datei hinzu.
Einen Benutzer anlegen:
1 2 3 4 5 6 |
mkdir /var/www/www.example.com mkdir /var/www/www.example.com/www useradd -d /var/www/www.example.com/ -s /dev/null user1 passwd user1 chown user1.user1 /var/www/www.example.com -R mkdir /var/www/www.example.com/logs |
Es ist gewollt, dass der Ordner logs als User root angelegt wird – der ftp-Nutzer sollte keine Erlaubnis haben Log-Dateien zu löschen, sondern nur anzusehen.
An diesem Punkt könnt ihr euch zum ersten mal auf eurem Server via ftp einloggen.
Konfiguration von Apache:
In der Standardkonfiguration ist das rewrite modul, welches von vielen cms’en wie Joomla oder Typo3 gerne verwendet wird deaktiviert. Mit dem Befehl „a2enmod rewrite“ könnt ihr dieses Modul aktivieren. Nach jeder Änderung müsst ihr den Webserver neustarten „/etc/init.d/apache2 restart“
Der restliche Zauber findet in der VHost datei statt. Hier ein Beispiel wie sie bei mir aussieht:
1 |
vi /etc/apache2/sites-available/www.example.com |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<VirtualHost *:80> ServerAdmin me@example.com ServerName www.example.com ServerAlias example.com php_admin_value open_basedir "/var/www/www.example.com:/tmp" DocumentRoot /var/www/www.example.com/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/www.example.com/www/> Options FollowSymLinks MultiViews -Indexes AllowOverride AllOrder allow,deny allow from all </Directory> ErrorLog /var/www/www.example.com/logs/error.log LogLevel warn CustomLog /var/www/www.example.com/logs/access.log combined <IfModule mpm_itk_module> AssignUserId user1 user1 </IfModule> </VirtualHost> |
Zum Schluss die default Seite deaktivieren und die neu erstellte Seite aktivieren und anschließend den Webserver reloaden.
1 2 3 |
a2dissite default a2ensite www.example.com /etc/init.d/apache2 reload |
Logrotate konfigurieren:
Ich habe zusätzlich noch Logrotate so konfiguriert, dass die Apache Logs ein Jahr aufgehalten werden. Eine neue Datei „vi /etc/logrotate.d/www.example.com“ mit folgendem Inhalt anlegen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/var/www/www.example.com/logs/*.log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then /etc/init.d/apache2 reload > /dev/null fi endscript } |
Der Server sollte somit fertig sein. Falls ihr Anregungen bzw Verbesserungsvorschläge habt, würde ich mich freuen wenn ihr mir eine Nachricht hinterlasst.
Leave a reply
Du musst angemeldet sein, um einen Kommentar abzugeben.