Schlagwort-Archive: debian

Debian mit cron-apt sicher halten

Der geneigte Administrator hat bei der Wahl seiner Sicherheitsstrategie immer wieder aufs neue elementare Dinge zu beachten. Zum einen muss er Augen und Ohren offen halten um Sicherheitlöcher mitzubekommen, zum anderen muss er sich immer wieder aufs neue Zeitfenster schaffen in denen er die entsprechenden Sicherheitsupdates auch einspielt.

Letzteres findet in aller Regel nach Feierabend und/oder Nachts statt.

Da ich von meiner Tendenz her eher zu den fauleren Administratoren gehöre und mich lieber mit der Arbeit an und mit Systemen anstatt mit dem Stopfen von Löchern beschäftige, kommt mir ein Programm wie cron-apt grade recht.

Mein freundlicher Arbeitskollege, der sich aktuell mit einer möglichst angenehmen Art und Weise des aktuell haltens unserer Serverlandschaft beschäftigt, wies mich darauf hin. Es handelt sich letztendlich nur um ein kleines Tool und einen zusätzlichen Cronjob, welcher die eingestellte Auswahl an Software aktuell hält und ggf. Downloads oder auch gleich (wie bei mir) die installation ausführt.

Da es mir primär um Sicherheitsupdates geht, gibt es einige Anpassungen die von der Standardinstallation abweicht. Diese lassen sich aber schön einfach zusammenfassen – ganz wie ich es mag 🙂

Installation

apt-get update && apt-get install cron-apt

Konfiguration

In diesem Beispiel werden nur Security Updates gesucht und installiert.

cat /etc/apt/sources.list | grep security > /etc/apt/sec-sources.list

cat > /etc/cron-apt/config << EOF
OPTIONS=“-q -o Dir::Etc::SourceList=/etc/apt/sec-sources.list“
MAILON=“upgrade“
MAILTO=“deine@adresse.de“
EOF

und zu guter letzt noch

cat > /etc/cron-apt/action.d/3-download << EOF
autoclean -y
dist-upgrade -y -o APT::Get::Show-Upgraded=true
EOF

Damit erreichen wir folgendes:

  • Es gibt einen Cronjob um 4 Uhr morgens (standard)
  • Es gibt eine zusätzliche apt-sources list nur für Sicherheitsupdates die von Cron-apt genutzt wird.
  • Updates werden heruntergeladen und auch gleich installiert
  • Es findet eine Bereinigung statt, sodass APT die Festplatte nicht sonderlich voll müllt.
  • Ihr bekommt (bei eingerichtetem MTA) eine Mail über die Updates, welche durchgeführt wurden.

Vielen Dank an MM für diese Steigerung der Lebensqualität.

Apache Webserver mit FastCGI in einfach unter Debian Wheezy

Da es immer wieder vor kommt, dass man einen Webserver installieren muss, habe ich hier mal alle bei mir so üblichen Schritte zusammengefasst. Dabei behandle ich nur die grobe allgemeine Instalaltion wie ich sie gern habe. Nicht mehr! Folgende Punkte sollen erreicht werden:

  • Debian Stable System mit der Option auf Testing Pakete
  • Apache2 Webserver (MPM-Worker) mit ein paar wichtigen Modulen
  • PHP als FastCGI
  • MySQL Datenbank
  • FTP Server
  • Ein paar Sicherheitsallgemeinheiten

1. Grundinstallation

Bei der Grundinstallation achte ich darauf, dass wirklich nichts ausser dem SSH-Server installiert wird. Alles andere wird per default nicht so gemacht wie ich es mir wünsche. Daher nehme ich nur die Konfiguration der Festplatte, des Netzwerkes und der Paketquellen mit.

2. Paketquellen anpassen

Ich nehme direkt zu Beginn den Testing-Zweig in die Paketquellen mit auf:

nano /etc/apt/sources.list

# Testing-Pakete

deb http://security.debian.org/ testing/updates main

deb http://ftp.de.debian.org/debian/ testing main

Anschließend werden werden die Prioritäten angepasst:

nano /etc/apt/preferences.d/priority

Package: *

Pin: release n=wheezy

Pin-Priority: 990

3. Software installieren

aptitude install apache2 apache2-mpm-worker libapache2-mod-fcgid php5-cgi php5-mysql php5-xcache php5-sqlite php5-mcrypt php5-json php5-gd php5-fpm php5-curl mysql-server

aptitude install -t testing vsftpd

4. Software Konfigurieren

Apache2: Module aktivieren

a2enmod rewrite mem_cache fcgid deflate alias

a2dismod php5_cgi

service apache2 restart

usermog www-data -G ftp

FastCGI:

nano /etc/apache2/mods-enabled/fcgid.conf

<IfModule mod_fcgid.c>

AddHandler    fcgid-script .fcgi

FcgidConnectTimeout 20

FcgidIOTimeout              60

FcgidMaxRequestsPerProcess  400

FcgidIdleTimeout            60

FcgidMinProcessesPerClass   0

</IfModule>

VsFTPD: Konfiguration erstellen

listen=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=0022

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

connect_from_port_20=YES

chown_uploads=YES

idle_session_timeout=600

data_connection_timeout=120

nopriv_user=ftp

ftpd_banner=Willkommen zum FTP-Server

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

allow_writeable_chroot=YES                               #Dieser Punkt ist der Grund weshalb wir testing installiert haben

secure_chroot_dir=/var/run/vsftpd/empty

pam_service_name=vsftpd

rsa_cert_file=/etc/ssl/private/vsftpd.pem

Wichtig ist, das wir die zukünftig verwendeten Shells auch aktivieren, da ansonsten der vsftpd streikt. In der Datei /etc/vsftpd.chroot_list werden alle Benutzer eingetragen die NICHT gechrooted werden sollen.

echo „/bin/false“ >> /etc/shells

Fail2ban

nano /etc/fail2ban/jail.conf

[ssh]

enabled  = true

port     = ssh

filter   = sshd

logpath  = /var/log/auth.log

maxretry = 2

[vsftpd]

enabled  = false

port     = ftp,ftp-data,ftps,ftps-data

filter   = vsftpd

logpath  = /var/log/vsftpd.log

maxretry = 3

Mailserver

Da Debian ja ohnehin schon mit einem Mailserver daher kommt können wir diesen für einfache Aufgaben auch nutzen. In diesem Fall möchte ich einfach einen Mailversand über einen Smarthos realisieren.

dpkg-reconfigure exim4-config

5. Benutzer anlegen

useradd webuser -c „Benutzer fuer dasWebsystem via FTP“ -d /var/www/webseite.de -m -s /bin/false -U

usermod -G ftp && passwd webuser

6. Webseite einrichten

Zunächst einmal legen wir eine virtuelle Konfigurationsdatei an:

nano /etc/apache2/sites-enabled/webseite.de

<VirtualHost webseite:80>

ServerName webseite.de

ServerAdmin webmaster@webseite.de

DocumentRoot /var/www/webseite.de/httpdocs/

<Directory /var/www/webseite.de/httpdocs>

Options +ExecCGI

AddHandler fcgid-script .php

FCGIWrapper /usr/bin/php-cgi .php

AllowOverride All

Order allow,deny

allow from all

</Directory>

ErrorLog ${APACHE_LOG_DIR}/webseite.de_error.log

LogLevel warn

CustomLog ${APACHE_LOG_DIR}/webseite.de_access.log combined

</VirtualHost>

Nun müssen wir noch die Verzeichnisse anlegen. Dies geschieht unterhalb des Homeverzeichnisses des Benutzers:

mkdir /var/www/webseite.de/httpdocs && chown :ftp /var/www/webseite.de/httpdocs

Fazit

Was haben wir bisher erreicht?

  • Wir haben einen zügigen Webserver
  • PHP mit Hilfe von FastCGI ausführt.
  • Der FTP-Server bietet die Möglichkeit Chrootfreie Benutzer zuzulassen
  • Systembenutzer können sich via FTP auf dem Server einloggen und landen in Ihrem Homeverzeichnis
  • Unterhalb des Homeverzeichnisses gibt es ein httpdocs Order der die Webseiten vorhalten wird
  • MySQL speichert seine Tabellen freundlicherweise in einzelnen InnoDB Dateien

Mehrere PHP Versionen innerhalb von Plesk 11.5

Bei der Arbeit mit Plesk kann es sinnvoll sein mehrere unterschiedliche Versionen von PHP innerhalb von Plesk zur Verfügung zu haben. Zum einen erleichtert es doch immens die Arbeit bei der Migration von Webseiten, zum anderen kann man so individueller auf die Bedürfnisse der Umgebung eingehen. Ziel ist es die jeweils zu verwendende PHP Version innerhalb des Plesk Panels auswählen zu können.

Grundsätzlich werden alle PHP Versionen als FastCGI zur Verfügung gestellt.

Das diese Pakete nicht vorkompiliert zur Verfügung stehen muss selbst hand angelegt werden. Hier gibt es diverse Anleitungen im Netz wie man unter Debian das alle Voraussetzungen schafft um ein sauberes Kompilat zu erhalten. Als hilfreich hat sich folgende Umgebung herausgestellt:

apt-get install apache2-suexec libpcre3-dev libpcre++-dev libpng12-dev libbz2-dev libcurl4-openssl-dev libc-client2007e-dev libjpeg-dev libgif-dev libgif4 libpthread-stubs0 libpthread-stubs0-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxpm-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev libxml2-dev libmysqlclient-dev libfreetype6-dev build-essential make wget build-essential

An dieser stelle muss nach Bedarf ergänzt werden, was man braucht oder aber eben nicht.

Nun fangen wir an mit der Einrichtung von PHP 5.3:
cd /usr/src
wget http://de1.php.net/get/php-5.3.28.tar.gz/from/this/mirror -O php.tar.gz
tar xzvf php.tar.gz
cd php-5.3.28

ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

./configure –prefix=/usr/share/php53 –datadir=/usr/share/php53 –mandir=/usr/share/man –bindir=/usr/bin/php53 –with-libdir=lib/x86_64-linux-gnu –includedir=/usr/include/php53 –sysconfdir=/etc/php53/apache2 –with-config-file-path=/etc/php53/apache2 –with-config-file-scan-dir=/etc/php53/conf.d –enable-libxml –enable-session –with-pcre-regex=/usr –enable-xml –enable-simplexml –enable-filter –disable-debug –enable-inline-optimization –disable-rpath –disable-static –enable-shared –with-pic –with-gnu-ld –with-mysql –with-gd –with-jpeg-dir –with-png-dir –with-xpm-dir –enable-exif –with-zlib –with-bz2 –with-curl –with-ldap –with-mysqli –with-freetype-dir –enable-soap –enable-sockets –enable-calendar –enable-ftp –enable-mbstring –enable-gd-native-ttf –enable-bcmath –enable-zip –with-pear –with-openssl=/usr/ –with-imap –with-imap-ssl –with-kerberos –enable-phar –enable-pdo –with-pdo-mysql –with-mysqli

make
make test
make install

Wenn alles durchgelaufen ist, erhalten wir eine interessante Übersicht:
Installing PHP SAPI module:       cgi
Installing PHP CGI binary: /usr/bin/php53/
Installing PHP CLI binary:        /usr/bin/php53/
Installing PHP CLI man page:      /usr/share/man/man1/
Installing build environment:     /usr/share/php53/lib/php/build/
Installing header files:          /usr/include/php53/php/
Installing helper programs:       /usr/bin/php53/
program: phpize
program: php-config
Installing man pages:             /usr/share/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment:      /usr/share/php53/lib/php/
[PEAR] Archive_Tar    – already installed: 1.3.11
[PEAR] Console_Getopt – already installed: 1.3.1
[PEAR] PEAR           – already installed: 1.9.4
Wrote PEAR system config file at: /etc/php53/apache2/pear.conf
You may want to add: /usr/share/php53/lib/php to your php.ini include_path
[PEAR] Structures_Graph- already installed: 1.0.4
[PEAR] XML_Util       – already installed: 1.2.1
/usr/src/php-5.3.28/build/shtool install -c ext/phar/phar.phar /usr/bin/php53
ln -s -f /usr/bin/php53/phar.phar /usr/bin/php53/phar
Installing PDO headers:          /usr/include/php53/php/ext/pdo/

Das ist aus dem Grund interessant, weil es und etwas anschaulicher zeigt wo unsere
Datein liegen.

Nun kopieren wir noch die Beispielkonfigurationsdatei:
cp php.ini-production /etc/php53/apache2/php.ini

Wenn das erledigt ist, können wir Plesk mitteilen, wo es unser neues PHP findet, wie es heißen soll und was es damit anfangen soll:

/usr/local/psa/bin/php_handler –add -id PHP-5.3.28 -displayname NEWPHP-5.3 -path /usr/bin/php53/php-cgi -type fastcgi -phpini /etc/php53/apache2/php.ini

Haben wir das erledigt brauchen wir einfach nur noch unseren Apache neu starten und haben in den Hostingeinstellung der Pleskdomain unsere neue Version PHP mit dem Namen NEWPHP-5.3 zur Verfügung.

 

Quellen:

  • http://massivelydigital.com/run-two-versions-of-php-on-one-plesk-11-server/
  • http://blogs.reliablepenguin.com/2013/10/01/plesk-11-5-with-multiple-php-versions
  • http://zgadzaj.com/how-to-install-php-53-and-52-together-on-ubuntu-1204
  • http://wiki.apache.org/httpd/php-fcgid
  • http://www.soeren-hentzschel.at/technik/linux-server/2013/05/17/php-5-3-und-5-4-unter-debian-7-wheezy-parallel-installieren/