Artikelformat
27. Februar 2006

Debian Server einrichten – Debian Sarge 3.1

In diesem Howto geht es darum einen Debian Server einrichten zu können per copy & paste. Viele werden vielleicht auch schon einen Debian Root Server ihr Eigen nennen und hier den Root Server noch etwas verbessern können. Ein Debian Server ist etwas auf das man sich verlassen kann!
Anmerkung: Howto Installation Debian Etch Server / Debian 4.0

Vorbemerkung zum Tutorial “Debian Server einrichten”

Wenn Sie keinen Netdirekt Root Server verwenden, können Sie diesem Debian Root Server Howto auch folgen, aber die ersten Schritte einfach überspringen. Ich konnte das Debian Root Server Tutorial auf meinem aktuellen Server von Strato eins zu eins umsetzen.

Was ist das Ziel dieses Debian Root Server Tutorials:
Einrichten eines Apache2 inklusive Php-Unterstützung, MySQL-Datenbanken (+ PhpMyAdmin) und rel. sicheren FTP-Zugang.

Erste Schritte bzw. Image einspielen und Standardimage somit löschen:

Per SSH auf Rescue-konsole –> newimage –> 3 Sarge minimal –> go –> Passwort –> reboot

Vorbereitungen zum Debian Root Server einrichten

#Anmeldung Admin/ root
Debian Server ~# su
#Quellen/ Paketlisten von APT aktualisieren
Debian Root Server ~# apt-get update
#System auf aktuellen Stand bringen
Debian Root Server ~# apt-get upgrade

Benutzer anlegen für Debian Server:

Debian Server ~# adduser
#anstatt ‘useradd -m’ fragt sie ‘adduser’ alles notwendige (am wichtigsten ist das Feld Full Name)
#mit “usermod” können den Benutzer problemlo später modifizieren

Debian SSHd anpassen:

(wichtig vorher MUSS neuer Benutzer angelegt werden!)
Debian Root Server ~# mcedit /etc/ssh/sshd_config
# ‘PermitRootLogin no’ von YES auf NO

Debian Server – Apache2 Installation

#Install Apache2 mit Php und Anbindung an Mysql-Server; des Weiteren Phpmyadmin zur Verwaltung der Datenbank und GD-Support für Apache zwecks grafik-verarbeitenden Scripten wie CMS-Systemen
Debian Root Server ~# apt-get install apache2-mpm-prefork libapache2-mod-perl2 libapache2-mod-php4 mysql-client-4.1 mysql-server-4.1 libmysqlclient10 libmysqlclient12 libmysqlclient14 php4 php4-cgi php4-cli php4-pear php4-mysql phpmyadmin php4-gd libgd2
#Anmerkung: ‘prefork’ ist nicht die schnellste aber kompatibelste Version in Sachen PHP im Vgl. zu ‘apache2-mpm-worker’
# Phpmyadmin muss noch konfiguriert (https) und abgesichert (.htaccess) werden! Darauf gehe ich zunächst nicht ein.
#Funktionstest:
#http://IP oder http://localhost bei lokaler Installation

Troubelshooting (nur der Vollständigkeit halber):

Php und MySQL:

#Install MySQL-Server
Debian Root Server ~# apt-get install mysql-server-4.1
#Install PHPMyadmin
Debian Root Server ~# apt-get install phpmyadmin
#Install
Debian Root Server ~# apt-get install php4-gd libgd2

Anpassungen von MySQL:

#MySQL-Passwort für root setzen!!!
Debian Root Server ~# mysql -u root mysql
Debian Root Server ~# mysql> UPDATE user SET Password=PASSWORD(‘neues_passwort’) WHERE user=’root’;
Debian Root Server ~# mysql> FLUSH PRIVILEGES;
Debian Root Server ~# mysql -u root -p
#Passworttest über PhpMyAdmin: http://IP/phpmyadmin; Benutzer:root und Passwort:PASSWORT

Toubelshooting Anpassung der Mysqlanbindung an den Indianer

#Php.ini anpassen
Debian Root Server ~# mcedit /etc/php4/apache2/php.ini
#Auskommentieren ‘extension=mysql.so’
# Anpassung ‘memory_limit = 16′
# und ‘upload_max_filesize = 20′ setzen (so dass später im CMS auch größere Daten hoch geladen werden können)

Debian Server – Virtuelle Hosts für Apache2

#Auskommentieren von
Debian Root Server ~# mcedit /etc/apache2/sites-available/default
#’RedirectMatch ^/$ /apache2-default/ im vhost unter /etc/apache2/sites-available/’
#einfach eine Raute davor (=Auskommentieren; Kommentieren = Raute weg nehemen), dann wird nicht vom localhost bzw. Ihrer IP auf localhost/default-apache umgeleitet

Debian Server – Namensbasierten virtuelle Host anlegen

#Sie haben eine Domain und diese zeigt auf die IP dieses Servers, dann können wir schnell für Erreichbarkeit sorgen
Debian Root Server ~#mcedit /etc/apache2/sites-available/MeineDomainDE
#Anmerkung der Name ist irrelevant nur der Inhalt ist wichtig
#Inhalt:
—-
<VirtualHost * >
ServerAdmin EMAIL
ServerName www.Domain.DE
ServerAlias Domain.DE w.Domain.DE ww.Domain.DE
DocumentRoot /var/www/PFAD/ZUR/WEBSEITE
<Directory //var/www/PFAD/ZUR/WEBSEITE>
Order Deny,Allow
Allow from all
# Don’t show indexes for directories
Options -Indexes
</Directory>
</VirtualHost>

#F2 für speichern und F10 für schließen und fertig
#Aktivieren bzw. versymlinken des virtuellen Hosts
Debian Root Server ~# a2ensite MeineDomainDE
Debian Root Server ~# /etc/init.d/apache2 reload
#Anmerkung löschen sie nicht den default oder setzen sie die Seite nicht an erste Stelle (Reihenfolge abhänig von Reihenfolge der verlinkung; nicht nach Alphabet)
#Neustart Debian Apache und fertig
Debian Root Server ~# /etc/init.d/apache2 restart
#und fertig ist ihr Vhost

Debian Server – Namensbasierten virtuelle Host mit SSL-Verschlüsselung also https

# Zertifikat erstellen
Debian Server ~# apache2-ssl-certificate -days 365
#-days gibt die Gültigkeitsdauer an
#alle Fragen können nach belieben beantwortet werden, aber Rechnername/ Domain muss mit Vhost übereinstimmen bsp. IP oder Domain
#SSl-Modul aktivieren
Debian Server ~# a2enmod ssl
#Vhost mit SSL erstellen
Debian Server ~# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default-ssl
Debian Server ~# mcedit etc/apache2/sites-available/default-ssl
#Inhalt:
—-
NameVirtualHost *:443
<VirtualHost *:443>
# SSL (START)
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/ZERTIFIKATSNAME.0
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
# SSL (ENDE)
ServerAdmin EMAIL
#kann auch einfach eine IP sein
ServerName www.Domain.DE
ServerAlias Domain.DE w.Domain.DE ww.Domain.DE
DocumentRoot /var/www/PFAD/ZUR/WEBSEITE
<Directory //var/www/PFAD/ZUR/WEBSEITE>
Order Deny,Allow
Allow from all
# Don’t show indexes for directories
Options -Indexes
</Directory>
</VirtualHost>

# Eintragen des SSLCertificateKeyFile /etc/apache2/ssl/ZUFALLSNAME.0
Debian Server ~# ls -l /etc/apache2/ssl/
# Der Name der datei die mit xxx.0 endet muss im vHost ergänzt werden.
#Apache den Ports noch mitteilen auf den er horchen soll
Debian Root Server ~# mcedit /etc/apache2/ports.conf
#Inhalt:
—-
Listen 80
Listen 443
—-
# Default-SSL aktivieren
Debian Server ~# a2ensite default-ssl
#Apache Neustart
Debian Server ~# apache2ctl restart

Debian FTP Server

#Install
Debian Server ~# apt-get install proftpd
#Gruppen
Debian Server ~# addgroup ftpprouser #uneingeschränkter user
Debian Server ~# addgroup ftpuser #eingesckränkter user
#Möglichkeit Anmeldung an System unterbinden und NUR FTP-Anmeldung für bestimmte Benutzer erlauben
#Vorbereitung
#Shell ohne Anmeldung über SSH o.ä. kopieren
Debian Server ~# cp /bin/false /bin/ftp
Debian Server ~# echo “/bin/ftp” >> /etc/shells
#Ftp-User
Debian Server ~# useradd USERNAME #legt nur den Usernamen an sonst nichts
Debian Server ~# usermod -G ftpuser USERNAME#chroot ungleich ftpprouser siehe später proftpd.conf
Debian Server ~# usermod -d /HOME/ERZEICHNIS USERNAME
Debian Server ~# usermod -s /bin/ftp USERNAME#keine Anmeldung an System
#Ftp-User per Hand gruppen zuordnen; eigentlich unnötig (dieser Schritt kann bei simpler Konfiguration übersprungen werden)
Debian Root Server ~# mcedit /etc/group
—Beispiel:

ftpprouser:x:1004:user1
ftpuser:x:1005:user2

#Proftpd-Config anpassen
Debian Root Server ~# mcedit /etc/proftpd.config
#Inhalt
—-
# chroot für alle User der Gruppe ftpuser
# Sehr wichtig zwecks Sicherheit, aber bringt mit sich, dass auf nichts außerhalb des Homeverzeichnisses zugegriffen werden kann; einzelne Verzeichisse können über mount –bind nicht über Symlinks “herein verfachtet” werden; im Anschluss ein Beispiel
DefaultRoot ~ ftpuser
# Login nur von Mitgliedern der Gruppe ftpuser erlauben
<Limit LOGIN>
DenyGroup !ftpuser !ftpprouser
</Limit>
# Root-Login verbieten und gültige Shell verlangen (in /etc/shells)
<Global>
RootLogin off
RequireValidShell on
</Global>
# Speed erhoehen
UseReverseDNS off
IdentLookups off
—-
#Ftp neustart
Debian Server ~# /etc/init.d/proftpd restart

Chrootet FTP-Benutzern oder Gruppen Verzeichnisse außerhalb des Homeverzeichnisses

#Bsp. für ein Verzeichnis von User2
# Ein Verzeichnis von User1 –> User2
# Verzeichnis bei User2 erstellen in dem die Daten landen sollen
Debian Root Server ~# mkdir /home/USER2/OrdnerTestVonUser1/
# Verzeichnis mounten; mount –bind /Ursprungsverzeichnis /Zielverzeichnis
Debian Root Server ~# mount –bind /home/USER1/OrdnerTest/ /home/USER2/OrdnerTestVonUser1/
#Anmerkung:
# über ‘mount’ kann man alle Mountpunte ich anzeigen lassen und über ‘umount’ löschen
# nach Neustart sind alle Mountpunkte weg, falls sie konsitent sein sollen sie einfach in die /etc/fstab eintragen