13 MySQL-Passwörter festlegen und phpMyAdmin konfigurieren
Setzen Sie Passwörter für das MySQL-Root-Konto:
mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation
HINWEIS: DAS AUSFÜHREN ALLER TEILE DIESER SCRIPTES WIRD FÜR ALLE MySQL SERVER IM PRODUKTIVE EINSATZ EMPFOHLEN! BITTE LESEN SIE JEDEN SCHRITT SORGFÄLTIG!
Um sich bei MySQL anzumelden, um es zu sichern, benötigen wir das aktuelle Passwort für den Root-Benutzer. Wenn Sie MySQL gerade installiert haben und Sie das Root-Passwort noch nicht festgelegt haben, wird das Passwort leer sein, also sollten Sie hier einfach die Eingabetaste drücken.
Aktuelles Passwort für root eingeben (für keines eingeben): OK, Passwort erfolgreich verwendet, weiter…
Das Festlegen des Root-Passworts stellt sicher, dass niemand ohne die entsprechende Autorisierung auf den MySQL-Root-Benutzer zugreifen kann.
Root-Passwort festlegen? [Y/n] <– EINGABETASTE Neues Passwort: <– yourrootsqlpassword Neues Passwort erneut eingeben: <– yourrootsqlpassword Passwort erfolgreich aktualisiert! Privilegientabellen werden neu geladen.. … Erfolg!
Standardmäßig hat eine MySQL-Installation einen anonymen Benutzer, der es jeder Person ermöglicht, sich bei MySQL anzumelden, ohne dass ein Benutzerkonto für sie erstellt werden muss. Dies ist nur für Tests gedacht und soll die Installation etwas reibungsloser gestalten. Sie sollten diese vor dem Übergang in eine Produktionsumgebung entfernen.
Anonyme Benutzer entfernen? [Y/n] <– EINGABETASTE … Erfolg!
Normalerweise sollte root nur von ‘localhost’ aus verbunden werden dürfen. Dies stellt sicher, dass niemand das Root-Passwort über das Netzwerk erraten kann.
Root-Login aus der Ferne verweigern? [Y/n] <– EINGABETASTE … Erfolg!
Standardmäßig kommt MySQL mit einer Datenbank namens ‘test’, auf die jeder Zugriff hat. Dies ist ebenfalls nur für Tests gedacht und sollte vor dem Übergang in eine Produktionsumgebung entfernt werden.
Testdatenbank und Zugriff darauf entfernen? [Y/n] <– EINGABETASTE
- Testdatenbank wird gelöscht… … Erfolg!
- Berechtigungen für die Testdatenbank werden entfernt… … Erfolg!
Das Neuladen der Berechtigungstabellen stellt sicher, dass alle bisher vorgenommenen Änderungen sofort wirksam werden.
Berechtigungstabellen jetzt neu laden? [Y/n] <– EINGABETASTE … Erfolg!
Aufräumen…
Alles erledigt! Wenn Sie alle oben genannten Schritte abgeschlossen haben, sollte Ihre MySQL-Installation jetzt sicher sein.
Danke, dass Sie MySQL verwenden!
[root@server1 tmp]#
Jetzt konfigurieren wir phpMyAdmin. Wir ändern die Apache-Konfiguration, damit phpMyAdmin Verbindungen nicht nur von localhost zulässt (indem wir die
-Stanza auskommentieren):
vi /etc/httpd/conf.d/phpmyadmin.conf
CentOS ist inkonsistent in den Dateinamen, die seine Pakete verwenden. Je nach
Reihenfolge Ihres Repositorys kann es sein, dass die phpmyadmin-Konfigurationsdatei
in CamelCase vorliegt. Wenn der obige vi-Befehl zu einer leeren neuen Datei
führt, verwenden Sie stattdessen diesen Befehl:
vi /etc/httpd/conf.d/phpMyAdmin.conf
| ```
#
# Webanwendung zur Verwaltung von MySQL
#
#
# Order Deny,Allow
# Deny from all
# Allow from 127.0.0.1
#
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /mysqladmin /usr/share/phpmyadmin
``` |
Als nächstes ändern wir die Authentifizierung in phpMyAdmin von Cookie auf HTTP:
vi /usr/share/phpmyadmin/config.inc.php
| ```
[...]
/* Authentifizierungstyp */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]
``` |
Dann erstellen wir die Systemstartlinks für Apache und starten ihn:
chkconfig --levels 235 httpd on
/etc/init.d/httpd start
Jetzt können Sie Ihren Browser auf http://server1.example.com/phpmyadmin/ oder http://192.168.0.100/phpmyadmin/ richten und sich mit dem Benutzernamen root und Ihrem neuen Root-MySQL-Passwort anmelden.
Wenn Sie eine Fehlermeldung wie diese erhalten:
[root@server1 tmp]# /etc/init.d/httpd start
Starting httpd: httpd: apr_sockaddr_info_get() fehlgeschlagen für server1.example.com
httpd: Konnte den vollständig qualifizierten Domainnamen des Servers nicht zuverlässig bestimmen, verwende 127.0.0.1 für ServerName
dann ist Ihr Hostname in DNS nicht auflösbar oder noch nicht in der /etc/hosts-Datei festgelegt. Um dieses Problem zu beheben, führen Sie aus:
echo "192.168.1.100 server1.example.com server1" >> /etc/hosts
ersetzen Sie "server1.example.com" im obigen Befehl durch Ihren vollständigen Hostnamen und "server1" durch den Teil des Hostnamens.
### 14 Amavisd-new, SpamAssassin und ClamAV installieren
Um amavisd-new, spamassassin und clamav zu installieren, führen Sie den folgenden Befehl aus:
yum -y install amavisd-new spamassassin clamav clamd unzip bzip2 unrar perl-DBD-mysql
Dann starten wir freshclam, amavisd und clamd.amavisd:
sa-update
chkconfig --levels 235 amavisd on
chkconfig --del clamd
chkconfig --levels 235 clamd.amavisd on
/usr/bin/freshclam
/etc/init.d/amavisd start
/etc/init.d/clamd.amavisd start
### 15 Apache2 mit mod_php, mod_fcgi/PHP5 und suPHP installieren
ISPConfig 3 ermöglicht es Ihnen, mod_php, mod_fcgi/PHP5, cgi/PHP5 und suPHP auf einer pro Website-Basis zu verwenden.
Wir können Apache2 mit mod_php5, mod_fcgid und PHP5 wie folgt installieren:
yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel
Als nächstes öffnen wir /etc/php.ini...
vi /etc/php.ini
... und ändern die Fehlerberichterstattung (so dass Hinweise nicht mehr angezeigt werden) und kommentieren cgi.fix_pathinfo=1 aus:
| ```
[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
[...]
; cgi.fix_pathinfo bietet *echte* PATH_INFO/PATH_TRANSLATED-Unterstützung für CGI. PHPs
; vorheriges Verhalten war es, PATH_TRANSLATED auf SCRIPT_FILENAME zu setzen und nicht zu verstehen,
; was PATH_INFO ist. Für weitere Informationen zu PATH_INFO siehe die CGI-Spezifikationen. Das Setzen
; dies auf 1 bewirkt, dass PHP CGI seine Pfade an die Spezifikation anpasst. Eine Einstellung
; von null bewirkt, dass PHP sich wie zuvor verhält. Standard ist 1. Sie sollten Ihre Skripte
; so anpassen, dass sie SCRIPT_FILENAME anstelle von PATH_TRANSLATED verwenden.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]
``` |
Als nächstes installieren wir suPHP (es gibt ein mod_suphp-Paket in den Repositories, aber leider ist es nicht mit ISPConfig kompatibel, daher müssen wir suPHP selbst erstellen):
cd /tmp
wget http://suphp.org/download/suphp-0.7.1.tar.gz
tar xvfz suphp-0.7.1.tar.gz
cd suphp-0.7.1/
./configure --prefix=/usr --sysconfdir=/etc --with-apr=/usr/bin/apr-1-config --with-apxs=/usr/sbin/apxs --with-apache-user=apache --with-setid-mode=owner --with-php=/usr/bin/php-cgi --with-logfile=/var/log/httpd/suphp_log --enable-SUPHP_USE_USERGROUP=yes
make
make install
Dann fügen wir das suPHP-Modul zu unserer Apache-Konfiguration hinzu...
vi /etc/httpd/conf.d/suphp.conf
| ```
LoadModule suphp_module modules/mod_suphp.so
``` |
... und erstellen die Datei /etc/suphp.conf wie folgt:
vi /etc/suphp.conf
| ```
[global]
;Pfad zur Protokolldatei
logfile=/var/log/httpd/suphp.log
;Protokollebene
loglevel=info
;Benutzer, unter dem Apache läuft
webserver_user=apache
;Pfad, in dem sich alle Skripte befinden müssen
docroot=/
;Pfad zu chroot(), bevor das Skript ausgeführt wird
;chroot=/mychroot
; Sicherheitsoptionen
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Überprüfen, ob das Skript innerhalb von DOCUMENT_ROOT ist
check_vhost_docroot=true
;Sendet kleinere Fehlermeldungen an den Browser
errors_to_browser=false
;PATH-Umgebungsvariable
env_path=/bin:/usr/bin
;Umask, die festgelegt werden soll, in oktaler Notation
umask=0077
; Mindest-UID
min_uid=100
; Mindest-GID
min_gid=100
[handlers]
;Handler für PHP-Skripte
x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler für CGI-Skripte
x-suphp-cgi="execute:!self"
``` |
Schließlich starten wir Apache neu:
/etc/init.d/httpd restart
#### 15.1 Ruby
Ab Version 3.0.3 hat ISPConfig 3 eine integrierte Unterstützung für Ruby. Anstelle von CGI/FastCGI hängt ISPConfig davon ab, dass mod_ruby im Apache des Servers verfügbar ist.
Für CentOS 6.4 gibt es kein mod_ruby-Paket, also müssen wir es selbst kompilieren. Zuerst installieren wir einige Voraussetzungen:
yum -y install httpd-devel ruby ruby-devel
Als nächstes laden wir mod_ruby herunter und installieren es wie folgt:
cd /tmp
wget http://fossies.org/unix/www/apache_httpd_modules/mod_ruby-1.3.0.tar.gz
tar zxvf mod_ruby-1.3.0.tar.gz
cd mod_ruby-1.3.0/
./configure.rb --with-apr-includes=/usr/include/apr-1
make
make install
Schließlich müssen wir das mod_ruby-Modul zur Apache-Konfiguration hinzufügen, also erstellen wir die Datei /etc/httpd/conf.d/ruby.conf...
vi /etc/httpd/conf.d/ruby.conf
| ```
LoadModule ruby_module modules/mod_ruby.so
RubyAddPath /1.8
``` |
... und starten Apache neu:
/etc/init.d/httpd restart
(Wenn Sie die RubyAddPath /1.8-Direktive weglassen, sehen Sie Fehler wie die folgenden im Fehlerprotokoll von Apache, wenn Sie Ruby-Dateien aufrufen:
[Thu May 26 02:05:05 2011] [error] mod_ruby: ruby:0:in `require': keine solche Datei zum Laden -- apache/ruby-run (LoadError)
[Thu May 26 02:05:05 2011] [error] mod_ruby: konnte apache/ruby-run nicht laden
[Thu May 26 02:05:05 2011] [error] mod_ruby: Fehler in Ruby
)
#### 15.2 Python
Um mod_python zu installieren, führen wir einfach aus...
yum -y install mod_python
... und starten Apache danach neu:
/etc/init.d/httpd restart
#### 15.3 WebDAV
WebDAV sollte bereits aktiviert sein, aber um dies zu überprüfen, öffnen Sie /etc/httpd/conf/httpd.conf und stellen Sie sicher, dass die folgenden drei Module aktiv sind:
vi /etc/httpd/conf/httpd.conf
| ```
[...]
LoadModule auth_digest_module modules/mod_auth_digest.so
[...]
LoadModule dav_module modules/mod_dav.so
[...]
LoadModule dav_fs_module modules/mod_dav_fs.so
[...]
``` |
Wenn Sie /etc/httpd/conf/httpd.conf ändern müssen, vergessen Sie nicht, Apache danach neu zu starten:
/etc/init.d/httpd restart
#### 15.4 Zusätzliche PHP-Versionen
Ab ISPConfig 3.0.5 ist es möglich, mehrere PHP-Versionen auf einem Server zu haben (wählbar über ISPConfig), die über FastCGI und PHP-FPM ausgeführt werden können. Das Verfahren zum Erstellen zusätzlicher PHP-Versionen auf CentOS wird in diesem Tutorial beschrieben: Wie man mehrere PHP-Versionen (PHP-FPM & FastCGI) mit ISPConfig 3 (CentOS 6.3) verwendet.
### 16 PureFTPd installieren
PureFTPd kann mit dem folgenden Befehl installiert werden:
yum -y install pure-ftpd
Dann erstellen Sie die Systemstartlinks und starten PureFTPd:
chkconfig --levels 235 pure-ftpd on
/etc/init.d/pure-ftpd start
Jetzt konfigurieren wir PureFTPd, um FTP- und TLS-Sitzungen zuzulassen. FTP ist ein sehr unsicheres Protokoll, da alle Passwörter und alle Daten im Klartext übertragen werden. Durch die Verwendung von TLS kann die gesamte Kommunikation verschlüsselt werden, wodurch FTP viel sicherer wird.
OpenSSL wird von TLS benötigt; um OpenSSL zu installieren, führen wir einfach aus:
yum install openssl
Öffnen Sie /etc/pure-ftpd/pure-ftpd.conf...
vi /etc/pure-ftpd/pure-ftpd.conf
Wenn Sie FTP- und TLS-Sitzungen zulassen möchten, setzen Sie TLS auf 1:
| ```
[...]
# Diese Option kann drei Werte annehmen:
# 0 : SSL/TLS-Verschlüsselungsschicht deaktivieren (Standard).
# 1 : sowohl traditionelle als auch verschlüsselte Sitzungen akzeptieren.
# 2 : Verbindungen ablehnen, die keine SSL/TLS-Sicherheitsmechanismen verwenden,
# einschließlich anonymer Sitzungen.
# Kommentieren Sie dies _nicht_ blind aus. Stellen Sie sicher, dass:
# 1) Ihr Server mit SSL/TLS-Unterstützung kompiliert wurde (--with-tls),
# 2) Ein gültiges Zertifikat vorhanden ist,
# 3) Nur kompatible Clients sich anmelden können.
TLS 1
[...]
``` |
Um TLS zu verwenden, müssen wir ein SSL-Zertifikat erstellen. Ich erstelle es in /etc/ssl/private/, daher erstelle ich zuerst dieses Verzeichnis:
mkdir -p /etc/ssl/private/
Anschließend können wir das SSL-Zertifikat wie folgt generieren:
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Landname (2-Buchstaben-Code) [XX]: <-- Geben Sie Ihren Landnamen ein (z.B. "DE").
Bundesland oder Provinzname (vollständiger Name) []: <-- Geben Sie Ihren Bundesland- oder Provinznamen ein.
Ortsname (z.B. Stadt) [Standardstadt]: <-- Geben Sie Ihre Stadt ein.
Organisationsname (z.B. Firma) [Standardfirma GmbH]: <-- Geben Sie Ihren Organisationsnamen ein (z.B. den Namen Ihres Unternehmens).
Name der organisatorischen Einheit (z.B. Abteilung) []: <-- Geben Sie den Namen Ihrer organisatorischen Einheit ein (z.B. "IT-Abteilung").
Allgemeiner Name (z.B. Ihr Name oder der Hostname Ihres Servers) []: <-- Geben Sie den vollständig qualifizierten Domainnamen des Systems ein (z.B. "server1.example.com").
E-Mail-Adresse []: <-- Geben Sie Ihre E-Mail-Adresse ein.
Ändern Sie die Berechtigungen des SSL-Zertifikats:
chmod 600 /etc/ssl/private/pure-ftpd.pem
Schließlich starten Sie PureFTPd neu:
/etc/init.d/pure-ftpd restart
Das war's. Sie können jetzt versuchen, sich mit Ihrem FTP-Client zu verbinden; Sie sollten jedoch Ihren FTP-Client so konfigurieren, dass er TLS verwendet.