Der perfekte Server - OpenSUSE 10.3 (32-bit)

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man einen OpenSUSE 10.3 basierten Server einrichtet, der alle Dienste anbietet, die von ISPs und Hostern gebraucht werden: Apache-Webserver (SSL-fähig), Postfix-Mailserver mit SMTP-AUTH und TLS, BIND-DNS-Server, Proftpd-FTP-Server, MySQL-Server, Dovecot POP3/IMAP, Quota, Firewall, etc. Die Anleitung ist zwar für die 32-Bit Version von OpenSUSE 10.3 geschrieben - sie sollte aber mit sehr kleinen Modifikationen genausogut für die 64-Bit Version funktionieren.

Ich werde folgende Software benutzen:
  • Webserver: Apache 2.2
  • Datenbankserver: MySQL 5.0
  • Mailserver: Postfix
  • DNS-Server: BIND9
  • FTP-Server: proftpd
  • POP3/IMAP: Ich werde das Maildir-Format nutzen und deshalb Courier-POP3/Courier-IMAP installieren.
  • Webalizer für Webseiten-Statistiken
Das Ziel dieser Anleitung ist, dass man ein betriebssicheres, stabiles System erhält. Jeder der möchte kann sich die kostenlose Server-Verwaltungssoftware ISPConfig herunter laden (z.B. ISPConfig läuft hervorragend)

Allerdings möchte ich an dieser Stelle darauf hinweisen, dass dies hier nicht der einzige Weg ist, ein solches System zu installieren. Es gibt viele Möglichkeiten - ich selbst habe mich für diese entschieden. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

1 Voraussetzungen

Um dieses System zu installieren braucht man:

2 Vorbemerkung

In dieser Installationsanleitung benutze ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100 und die Schnittstelle 192.168.0.1. Die Einstellungen können für jeden unterschiedlich sein, deshalb muss man sie gegebenenfalls anpassen.

3 Das Basissystem

Starte von der OpenSUSE 10.3 DVD:


Man wählt Installation:


Zunächst muss man die Sprache wählen:


Überspringe den Media Check indem Du auf Next klickst:


Stimme dem Lizenzvertrag zu:


Wähle New Installation:


Wähle Deine Zeitzone:


Gehe im Desktop Selection Fenster auf Other und danach auf Text Mode:


Das Installation Settings Fenster listet die verfügbaren Installationseinstellungen auf. Jede dieser Kategorien kannst Du ändern indem Du Dich zu der entsprechenden Überschrift manövrierst. Zuerst verändere ich das Partitionslayout indem ich erst auf Partitioning , dann auf Create Custom Partition Setup und danach auf Next klicke:



Wähle Custom Partitioning (for experts):



Nun erstellen wir die Partitionen. Ich werde das folgende Partitionslayout verwenden:

/boot 100 MB
swap 500 MB
/ Rest der Festplatte

Eine Partition erstellen: Klicke auf Create, wähle Primary Partition, wähle das Format. Bis auf die Auslagerungspartitioin, vom Typ Swap, werde ich für alle Partitionen ext3 verwenden (Ich möchte später noch Quota installieren und Quota funtioniert am Besten mir ext3 - es kann sein, dass Du auf Probleme mit reiserFS stoßen wirst!). Wähle dann den Mountpoint gemäß dem obrigen Partitionslayout.






Je nach Festplattengröße sollte deine Partitionstabelle ungefähr so aussehen wie diese. Klicke auf Accept um fortzufahren.


Gehe nun in den Expert Modus (die Registerkarte Expert in den Installation Settings), wähle ein Keyboard Layout und Accept:



Zurück im Installation Settings Fenster klickst Du erst auf Accept und dann auf Install:


Die Festplatte wird nun formatiert:


Die Paketinstallation beginnt nun (klicke auf die Registerkarte Details um den Installationsfortschritt sichtbar zu machen):


Nach der Basis-Paketinstallation startet das System neu. Entferne die SUSE DVD und vergewissere Dich, dass Du von der Festplatte startest:




Gib ein Passwort für den Benutzer ein nachdem das System wieder angelaufen ist. Drücke solange die Tabulatortaste bis Next markiert ist und drücke dann die Entertaste.


Als Nächstes müssen wir einen Hostname und Domain Name dem System zur Verfügung stellen. Mein Servername ist server1.example.com, gib also server1 als Hostname und example.com als Domain Name ein. Danach deaktivieren wir Change Hostname via DHCP da der Servername festehend sein sollte. Write Hostname to /etc/hosts aktiviert.


Weiter mit der Network Configuration. Um im Textmodus zu navigieren, verwende die Tabulator- und Pfeiltasten. Indem Du die Entertaste drückst kannst Du eine Auswahl aktivieren bzw. deaktivieren.

Markiere Network Interfaces und drücke Enter:


Halte die Tabulatortaste so lange gedrückt bis [Configure] markiert ist. Drücke dann Enter.


Jetzt solltes Du im Network Card Setup Bildschirm sein. Ich möchte keine IP Adressen vom DHCP Server bekommen, da ein Server feststehende IP Adressen haben sollte. Also ändere ich das indem ich Statically assigned IP Address wähle und eine IP Address (e.g. 192.168.0.100), eine Subnet Mask (e.g. 255.255.255.0), und den Hostnamen server1.example.com eingebe. Klicke danach Next:


Gehe dann zu [Hostname/DNS]:


Der Hostname sollte (server1.example.com) sollte schon da sein (wir haben diesen schon in einem vorherigen Schritt festgelegt). Gebe bis zu drei Name Servers (e.g. 213.191.92.86 und 145.253.2.75, 193.174.32.18) ein. Gehe dann auf[Routing]:


Gib das Default Gateway ein. Bei mir ist das 192.168.0.1: Drücke dann [Accept]:


Unsere Netzwerkkonfiguration ist nun beendet. Daher klicken wir [Next] auf dem Network Configuration Bildschirm:


Nun wird die Internetverbindung des Systems getestet:



Konfiguriere nun die Online Update Funktion und installiere die Neusten Updates, falls verfügbar:





Ein Update Server (für die neusten Paket Updates) sollte Deiner Konfiguration hinzugefügt worden sein. Drücke [OK]:


Wähle Run Update:


Eine Liste verfügbarer Updates wird angezeigt. Klicke [OK] um sie zu installieren:


Die Updates werden runter geladen und installiert:


Drücke danach [Next]:


Wenn gefragt wird, wie Benutzer sich authentifizieren sollen, wähle Local (/etc/passwd):


Richte einen zweiten Nutzer ein, der sich vom Benutzer unterscheidet (z.B. administrator - verwende dabei nicht den Namen admin da er bereits im System belegt ist):


Lese die Freigabebestimmungen (wenn Du magst ...) und drücke [Next]:


Glückwunsch! Deine Basisinstallation ist beendet.


Nun zum nächsten Schritt ...

4 Konfiguration von Online Paketdatenbanken

Ich werde YaST nun online Paketdatenbanken hinzufügen und die DVD als Paketdatenbank deaktivieren. Das ist besonders nützlich wenn Dein Server beim Installieren von Paketen an einem entfernten Ort ist, an dem es nicht möglich ist, eine DVD einzulegen. Außerdem beinhalten die online Paketdatenbanken mehr Pakete als eine DVD.

Lass Folgendes in der Befehlzeile laufen:

yast2

Sobald YaST gestartet ist, gehe auf Software > Community Repositories:


Wähle nun folgende Datenbanken und klicke auf [Finish]:
  • Main Repository (OSS)
  • Main Repository (NON-OSS)
  • Main Update Repository
  • openSUSE BuildService - Database
  • openSUSE BuildService - Mail Server
  • openSUSE BuildService - PHP

Falls Du einen Lizenzvertrag siehst, stimme ihm zu:


Die online Paketdatenbanken werden nun hinzugefügt:


Es kann sein, dass Dein SUSE Programm nicht alle keys der online Datenbank kennt. Falls es also einen key gibt, den Dein System nicht kennt, wähle [Trust and Import the Key]:


Gehe dann auf Software > Software Repositories:


Hier findest Du eine Liste all Deiner Software Datenbanken (die, die Du gerade unter Software > Community Repositories hinzugefügt hast und Deine OpenSUSE DVD). Wähle die OpenSUSE DVD und deaktiviere sie:

5 Installation einiger Software

Jetzt installieren wir ein paar Pakete, die wir später noch brauchen werden. Lass Folgendes laufen:

yast2 -i findutils readline libgcc glibc-devel findutils-locate gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim telnet cron iptables iputils man man-pages


6 Quota

Um Quota zu installieren, lasse dies laufen

yast2 -i quota

Bearbeite /etc/fstab so, dass es wie folgt aussieht (Ich habe ,usrquota,grpquota angehängt um /dev/sda3 zu partitionieren(mount point /; Dein Gerätename könnte /dev/hda2 sein oder ähnlich wie):

vi /etc/fstab

/dev/sda3            /                    ext3       acl,user_xattr,usrquota,grpquota        1 1
/dev/sda1 /boot ext3 acl,user_xattr 1 2 /dev/sda2 swap swap defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs noauto 0 0 debugfs /sys/kernel/debug debugfs noauto 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0 /dev/fd0 /media/floppy auto noauto,user,sync 0 0
Lass dann dies laufen:

touch /aquota.user /aquota.group
chmod 600 /aquota.*

mount -o remount /


quotacheck -avugm
quotaon -avug

7 DNS Server

Lass Folgendes laufen

yast2 -i bind bind-chrootenv bind-devel bind-utils

Dann hängen wir die System Startup Links für BIND an und starten es:

chkconfig --add named
/etc/init.d/named start

BIND wird in einem chroot Gefängnis unter /var/lib/named laufen.

8 MySQL

Um MySQL zu installieren, lassen wir dies laufen

yast2 -i mysql mysql-client mysql-shared perl-DBD-mysql perl-DBI perl-Data-ShowTable libmysqlclient-devel

Dann hängen wir die System Startup Links für MySQL an und starten es:

chkconfig --add mysql
/etc/init.d/mysql start

Überprüfe nun ob der Netzwerkbetrieb aktiviert ist. Lass dies laufen

netstat -tap | grep mysql

Im Ergebnis solltest Du in etwa Folgendes sehen:

server1:~ # netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 8566/mysqld
server1:~ #

Falls Du nich so eine Zeile sehen solltest, bearbeite /etc/my.cnf, kommentiere die Zeile skip-networking aus:

vi /etc/my.cnf

[...]
#skip-networking [...]
und starte Deinen MySQL Server neu:

/etc/init.d/mysql restart

Lass dies laufen

mysqladmin -u root password yourrootsqlpassword

um ein Passwort für den Nutzer root@localhost einzurichten.

Wie Du in der netstat Ausgabe gesehen hast, hört MySQL nicht nur auf dem lokalen Host sondern auch auf allen Anschlüssen, was bedeutet, dass von außen darauf zugegriffen werden kann. Daher müssen wir auch ein Passwort für den Benutzer einrichten root@server1.example.com. Nur gibt es da ein kleines Problem: höchstwahrscheinlich beinhaltet die Host Spalte in der mysql.user Tabelle nicht den server1.example.com, sondern server1. Das werden wir jetzt ändern. Danach richten wir das MySQL Passwort für den Benutzer ein root@server1.example.com.

Wir verbinden uns mit MySQL:

mysql -u root -p

Gib das Passwort für den MySQL Root Benutzer ein. Gib Folgendes in die MySQL Kommandozeile ein:

mysql> USE mysql;

mysql> SELECT * FROM user;

Die Ausgabe könnte wie folgt aussehen:
+-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | +-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+ | localhost | root | *5172022923C5A97E5A842DA249B93473314416D5 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | | server1 | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | | 127.0.0.1 | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | +-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+ 3 rows in set (0.00 sec)
Wie Du siehst, heißt es in der zweiten Zeile server1 an Stelle von server1.example.com in der Host Spalte. Wir werden dies nun durch server1.example.com ersetzen:

mysql> UPDATE user SET Host = 'server1.example.com' WHERE Host = 'server1';

mysql> FLUSH PRIVILEGES;

Jetzt können wir die MySQL Kommandozeile verlassen:

mysql> quit;

Wieder in der noremalen Kommandozeile angekommen, können wir das MySQL Passwort für den Nutzer root@server1.example.com einrichten:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword


9 Postfix mit SMTP-AUTH und TLS

Lass uns jetzt Postfix und Cyrus-SASL installieren:

yast2 -i postfix cyrus-sasl cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi cyrus-sasl-otp cyrus-sasl-plain cyrus-sasl-saslauthd procmail

Dann fügen wir die System Startup Links für Postfix und saslauthd hinzu und starten diese:

chkconfig --add postfix
/etc/init.d/postfix start

chkconfig --add saslauthd
/etc/init.d/saslauthd start

Danach erstellen wir die Zertifikate für TLS:

mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024

chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr

openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt

openssl rsa -in smtpd.key -out smtpd.key.unencrypted


mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Als Nächstes konfigurieren wir Postfix für SMTP-AUTH und TLS:

postconf -e 'mydomain = example.com'
postconf -e 'myhostname = server1.$mydomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,check_relay_domains'
postconf -e 'inet_interfaces = all'
postconf -e 'alias_maps = hash:/etc/aliases'
postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'

Um TLS Verbindungen in Postfix zu aktivieren, bearbeite /etc/postfix/master.cf und aktiviere die Zeile tlsmgr so, dass sie wie folgt aussieht:

vi /etc/postfix/master.cf

[...]
tlsmgr unix - - n 1000? 1 tlsmgr [...]
Starte Postfix nun neu:

/etc/init.d/postfix restart

Um zu sehen, ob SMTP-AUTH und TLS richtig funktionieren, lass folgenden Befehl laufen:

telnet localhost 25

Nachdem Du die Verbindung zu Deinem Postfix Mail Server erstellt hast, tippe

ehlo localhost

Wenn Du die Zeilen

250-STARTTLS

und

250-AUTH LOGIN PLAIN

siehst, ist alles Bestens.

Auf meinem System sieht die Ausgabe wie folgt aus:

server1:/etc/postfix/ssl # telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server1.example.com ESMTP Postfix
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
server1:/etc/postfix/ssl #

Tippe

quit

um zur Kommandozeile zurück zu kehren.

10 Courier-IMAP/Courier-POP3

Ich möchte einen POP3/IMAP Daemon verwenden, der Maildir Unterstützung hat. Daher verwende ich Courier-IMAP und Courier-POP3.

yast2 -i courier-imap fam-server courier-authlib expect tcl

Danach fügen wir die System Startup Links hinzu und starten POP3, IMAP, POP3s und IMAPs:

chkconfig --add fam
chkconfig --add courier-authdaemon
chkconfig --add courier-pop
chkconfig --add courier-imap
/etc/init.d/courier-pop start
/etc/init.d/courier-imap start
chkconfig --add courier-pop-ssl
chkconfig --add courier-imap-ssl
/etc/init.d/courier-pop-ssl start
/etc/init.d/courier-imap-ssl start

Wenn Du ISPConfig nicht benutzen möchtest, dann konfiguriere Postfix um E-mails zum Maidir* eines Nutzers zuzustellen:

postconf -e 'home_mailbox = Maildir/'
postconf -e 'mailbox_command ='
/etc/init.d/postfix restart

*Achtung: Wenn Du die Absicht hast ISPConfig auf Deinem System zu verwenden, brauchst Du dies nicht zu tun, da ISPConfig die nötige Konfiguration vornimmt indem es Procmails Rezepte verwendet. Aber bitte vergewissere Dich, Maildir unter Management -> Server -> Settings -> EMail im ISPConfig Web Interface zu aktivieren.

11 Apache/PHP5

Nun installieren wir Apache mit PHP5:

yast2 -i apache2 apache2-devel apache2-mod_perl apache2-mod_php5 apache2-prefork perl-HTML-Parser perl-HTML-Tagset perl-Tie-IxHash perl-URI perl-libwww-perl php5 php5-devel zlib zlib-devel

Dann installieren wir einige PHP5 Module:

yast2 -i php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mhash php5-mysql php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl

Als Nächstes bearbeiten wir /etc/apache2/httpd.conf:

vi /etc/apache2/httpd.conf

und ändern DirectoryIndex so
[...]
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php5 index.php4 index.php3 index.pl index.html.var index.aspx default.aspx [...]
Bearbeite /etc/sysconfig/apache2 und füge rewrite der APACHE_MODULES Zeile hinzu:

vi /etc/sysconfig/apache2

[...]
APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user authn_dbm autoindex cgi dir env expires include log_config mime negotiation setenvif ssl suexec userdir php5 rewrite" [...]
Hänge weiterhin SSL der APACHE_SERVER_FLAGS Zeile an:
[...]
APACHE_SERVER_FLAGS="SSL" [...]
Konfiguriere nun Dein System sodass Apache beim Hochfahren startet:

chkconfig --add apache2

Lass dann Folgendes laufen

SuSEconfig
/etc/init.d/apache2 start

11.1 Globale Deaktivierung von PHP und Perl

(Wenn Du nicht planst, ISPConfig auf Deinem Server zu installieren, dann überspringe bitte diesen Absatz!)

Auf ISPConfig kann man PHP und Perl individuell pro Website einstellen, das heißt Du kannst festlegen, welche Website PHP- und Per-Skriptel laufen lassen kann und welche nicht. Dies kann nur dann funktionieren, wenn PHP und Perl global deaktiviert sind, denn sonst könnten auf allen Websites PHP/Perl-Skripte laufen, egal was Du im ISPConfig festgelegt hast.

Um PHP und Perl global zu deaktivieren, bearbeiten wir /etc/mime.types und kommentieren die Zeilen application/x-perl und application/x-php aus:

vi /etc/mime.types

[...]
#application/x-perl pl pm al perl #application/x-php php php3 php4 [...]
Dann bearbeiten wir /etc/apache2/conf.d/php5.conf und kommentieren allen AddHandler Zeilen aus:

vi /etc/apache2/conf.d/php5.conf

<IfModule mod_php5.c>
#AddHandler application/x-httpd-php .php4 #AddHandler application/x-httpd-php .php5 #AddHandler application/x-httpd-php .php #AddHandler application/x-httpd-php-source .php4s #AddHandler application/x-httpd-php-source .php5s #AddHandler application/x-httpd-php-source .phps DirectoryIndex index.php4 DirectoryIndex index.php5 DirectoryIndex index.php </IfModule>
Danach starten wir Apache neu:

/etc/init.d/apache2 restart

12 Proftpd

Ich möchte Proftpd an Stelle von vsftpd verwenden, welcher SUSE's Standard FTP Server ist, da die Server Management Software, die ich auf diesem Server (ISPConfig) installieren werde, Proftpd auf OpenSUSE 10.3 benötigt (auf anderen Distributionen ist das anders). Da es keine OpenSUSE Pakete für Proftpd gibt, muss ich es manuell erstellen:

cd /tmp/
wget --passive-ftp ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1rc3.tar.gz
tar xvfz proftpd-1.3.1rc3.tar.gz
cd proftpd-1.3.1rc3/
./configure --sysconfdir=/etc
make
make install
cd ..
rm -fr proftpd-1.3.1rc3*

Erstelle jetzt die Datei /etc/init.d/proftpd:

vi /etc/init.d/proftpd

#! /bin/sh
# Copyright (c) 2000-2001 SuSE GmbH Nuernberg, Germany. # All rights reserved. # # Original author: Marius Tomaschewski <mt@suse.de> # # Slightly modified in 2003 for use with SuSE Linux 8.1, # by http://www.learnlinux.co.uk/ # # Slightly modified in 2005 for use with SuSE Linux 9.2, # by Falko Timme # # /etc/init.d/proftpd # ### BEGIN INIT INFO # Provides: proftpd # Required-Start: $network $remote_fs $syslog $named # Required-Stop: # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Description: Starts ProFTPD server ### END INIT INFO # Determine the base and follow a runlevel link name. base=${0##*/} link=${base#*[SK][0-9][0-9]} # Force execution if not called by a runlevel directory. test $link = $base && START_PROFTPD=yes # Modified by learnlinux.co.uk test "$START_PROFTPD" = yes || exit 0 # Modified by learnlinux.co.uk # Return values acc. to LSB for all commands but # status (see below): # # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess argument(s) # 3 - unimplemented feature (e.g. "reload") # 4 - insufficient privilege # 5 - program is not installed # 6 - program is not configured # 7 - program is not running proftpd_cfg="/etc/proftpd.conf" proftpd_bin="/usr/local/sbin/proftpd" proftpd_pid="/usr/local/var/proftpd.pid" [ -r $proftpd_cfg ] || exit 6 [ -x $proftpd_bin ] || exit 5 # Source status functions . /etc/rc.status # First reset status of this service rc_reset case "$1" in start) echo -n "Starting ProFTPD Server: " test -f /etc/shutmsg && rm -f /etc/shutmsg /sbin/startproc $proftpd_bin rc_status -v ;; stop) echo -n "Shutting down ProFTPD Server: " test -x /usr/local/sbin/ftpshut && /usr/local/sbin/ftpshut now && sleep 1 /sbin/killproc -TERM $proftpd_bin test -f /etc/shutmsg && rm -f /etc/shutmsg rc_status -v ;; restart) ## If first returns OK call the second, if first or ## second command fails, set echo return value. $0 stop $0 start rc_status ;; try-restart) ## Stop the service and if this succeeds (i.e. the ## service was running before), start it again. ## Note: not (yet) part of LSB (as of 0.7.5) $0 status >/dev/null && $0 restart rc_status ;; reload|force-reload) ## Exclusive possibility: Some services must be stopped ## and started to force a new load of the configuration. echo -n "Reload ProFTPD Server: " /sbin/killproc -HUP $proftpd_bin rc_status -v ;; status) # Status has a slightly different for the status command: # 0 - service running # 1 - service dead, but /var/run/ pid file exists # 2 - service dead, but /var/lock/ lock file exists # 3 - service not running echo -n "Checking for ProFTPD Server: " checkproc $proftpd_bin rc_status -v ;; probe) ## Optional: Probe for the necessity of a reload, ## give out the argument which is required for a reload. [ $proftpd_cfg -nt $proftpd_pid ] && echo reload ;; *) echo "Usage: $0 {start|stop|status|restart|reload|try-restart|probe}" exit 1 ;; esac # Set an exit status. rc_exit
Lass Folgendes laufen

chmod 755 /etc/init.d/proftpd
chkconfig --add proftpd

Starte Proftpd:

/etc/init.d/proftpd start

Aus Gründen der Sicherheit kannst Du die folgenden Zeilen /etc/proftpd.conf hinzufügen.

vi /etc/proftpd.conf

[...]
DefaultRoot ~ IdentLookups off ServerIdent on "FTP Server ready." [...]
Gehe sicher, dass Du folgende Zeilen auskommentierst um ftp Nutzern zu erlauben, einen CHMOD auszuführen:
[...]
# Bar use of SITE CHMOD by default #<Limit SITE_CHMOD> # DenyAll #</Limit> [...]
und starte Proftpd neu:

/etc/init.d/proftpd restart


13 Webalizer

Um den webalizer zu installieren, lass einfach Folgendes laufen

yast2 -i webalizer


14 Anpassen der Uhr

Wenn Du möchtest, dass die System Uhr an einen NTP Server angeglichen wird, tu einfach Folgendes:

yast2 -i xntp

Füge dann die System Startup Links für ntp hinzu und starte ntp:

chkconfig --add ntp
/etc/init.d/ntp start

15 Installation einiger Perl Module, die von SpamAssassin (kommt zusammen mit ISPConfig) benötigt werden

Lass Folgendes laufen

yast2 -i perl-HTML-Parser perl-Net-DNS perl-Digest-SHA1


16 Deaktivierung von AppArmor

AppArmor ist eine Sicherheitserweiterung von SUSE (ähnlich wie Fedora's SELinux), die erweiterte Sicherheit gewährleisten sollte. Meiner Ansicht nach braucht man dies nicht um ein sicheres System zu konfigurieren. Es verursacht für gewöhnlich mehr Probleme als es Vorteile bringt (nachdem Du eine Woche mit der Fehlersuche beschäftigt warst, weil eine Sache nicht so funktioniert hat wie sie sollte und Du dann heraus findest, dass alles in Ordnung war und nur AppArmor die Probleme verursacht hat, wirst Du anders darüber denken). Daher deaktiviere ich es (das ist ein Muss wenn Du später ISPConfig installieren möchtest).

So können wir es deaktivieren:

/etc/init.d/boot.apparmor stop
chkconfig -d boot.apparmor

17 Das Ende

Die Konfiguration des Servers ist nun beendet. Wenn Du magst, kannst Du nun ISPConfig darauf installieren indem dieser Anleitung folgst: http://www.ispconfig.org/manual_installation.htm

17.1 Eine Notiz zu SuExec

Wenn Du CGI Skripte unter suExec laufen lassen möchtest, solltest Du /srv/www als den Web Root für Websites festlegen, die von ISPConfig erstellt wurden, da SUSE's suExec mit /srv/www as Doc_Root erstellt wird. Lass Folgendes laufen

/usr/sbin/suexec2 -V

und die Ausgabe sollte so aussehen:

server1:~ # /usr/sbin/suexec2 -V
-D AP_DOC_ROOT="/srv/www"
-D AP_GID_MIN=96
-D AP_HTTPD_USER="wwwrun"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=96
-D AP_USERDIR_SUFFIX="public_html"
server1:~ #

Wenn Du also suExec mit ISPConfig verwenden möchtest, ändere den Standard Web Root nicht, welcher/srv/www ist, wenn Du den Expertenmodus während der ISPConfig Installation verwendest (im Standardmodus kann man den Web Root sowieso nicht verändern, also kann man suExec in jedem Fall benutzen).

18 Links