Apache Chroot

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung.
Installationsmethoden LiveCDs Kernel & Hardware Laptops & Notebooks Portage System Netzwerke & Services X Software Anderes alphabetischer HOWTO Index


Inhaltsverzeichnis

[Bearbeiten] Apache2

Der folgende Artikel geht davon aus, das Sie ein lauffähiges apache2 installiert und für PHP und SSL konfiguriert haben. die folgenden Anweisungen beruhen auf apache-2.0.55-r1 und php-5.1.4

Code: Installation von apache und php
echo "apache mpm-prefork" >> /etc/portage/package.use
echo "dev-lang/php unicode" >> /etc/portage/package.use
emerge -av apache dev-lang/php


[Bearbeiten] separate chroot-Partition

Das chroot-Verzeichnis sollte möglichst auf einer separaten Partition liegen, die als "nosuid" gemountet werden kann. Da Dateien mit gesetztem suid-Bit von Angreifern genutzt werden können, um aus dem chroot-Gefängnis auszubrechen, sollte man im chroot-Bereich niemals Dateien mit suid-Bit verwenden. Eine mit "nosuid" gemountete Partition kann insofern helfen, Konfigurationsfehler auszugleichen.

Code: /etc/fstab
/dev/xyz    /chroot    auto    noatime,nosuid    0  2


[Bearbeiten] Härten der chroot

Der Ausbruch aus einer "normalen" chroot ist mit verschiedenen Tricks möglich. Möglichkeiten, sich davor zu schützen, werden im Anhang beschrieben. Da der Apache hierzu neu kompiliert werden muss, sollte man dies vor Einrichtung der chroot tun, um die gehärteten Binaries dort verwenden zu können. Ob diese spezielle Härtung erforderlich ist, hängt vom Einsatzgebiet des Webservers und auch etwas von Ihrer "Paranoidität" ab.

[Bearbeiten] Installation von "jail"

"jail" ist ein sehr nützliches Tool zur Einrichtung von chroot-Umgebungen.

Code: jail
emerge -av app-misc/jail

[Bearbeiten] Definieren der Variablen CHROOT

Um ein Copy und Paste der folgenden Befehle zu ermöglichen, wird die Variable CHROOT definiert. Den Pfad müssen Sie an Ihre Gegebenheiten anpassen.

Code: CHROOT-Variable
CHROOT=/chroot/apache


[Bearbeiten] Erstellen einer Basis chroot-Umgebung für Apache

Der folgende Befehl erstellt das Verzeichnis "apache" und wenige elementare Dateien darin. Je weniger Dateien sich in der chroot-Umgebung befinden, desto besser. Etwas Nacharbeit ist erforderlich.

Code: chroot zusammenbauen
mkjailenv $CHROOT
mknod -m 444 $CHROOT/dev/random c 1 8 
mkdir $CHROOT/lib
cp /lib/ld-linux.so.2 $CHROOT/lib
cp /etc/mime.types $CHROOT/etc/
mkdir -p $CHROOT/var/www/localhost/htdocs
chown apache:apache $CHROOT/var/www/localhost/htdocs
chmod 550 $CHROOT/var/www/localhost/htdocs
mkdir -p $CHROOT/var/{log,cache,run}
install -d -o apache -g apache -m 750 $CHROOT/var/{log,cache}/apache2


[Bearbeiten] Anlegen des Users "apache" in der chroot

Außer einem root-Prozess, der die Verwaltungsarbeit erledig, startet Apache mehrere Sub-Prozesse, die aus Sicherheitsgründen unter dem User "apache" laufen sollten. Der folgende Befehl legt diesen in den Dateien passwd, shadow und group in der chroot-Umgebung an. Die Werte für Homeverzeichnis (/dev/null) und Shell (/usr/sbin/nologin) sind absichtlich "ungültig".

Code: User "apache" anlegen
addjailuser $CHROOT /dev/null /usr/sbin/nologin apache

[Bearbeiten] Herausfinden, welche Dateien der Apache benötigt

Um dies herauszubekommen, muss der Apache wie üblich gestartet werden. Dem Programm "addjailsw" wird hierfür außer dem Pfad der chroot-Umgebung der komplette Programmaufruf als Parameter übergeben. Er arbeitet als "wrapper". addjailsw startet den Apache, analysiert, welche Dateien geöffnet werden und kopiert diese automatisch in die chroot-Umgebung. Die ersten beiden Anweisungen (s.u.) dienen dazu, herauszubekommen, wie der Apache-Programmaufruf genau aussieht. Dazu wird das Apache-Init-Script der "normalen" Apache-Installation gestartet. Gegebenenfalls vorher Port 80 und 443 in der lokalen Firewall nach außen blockieren, falls Sie Ihrem nicht-chroot Apache nicht trauen.

Code: addjailsw analysiert und kopiert
/etc/init.d/apache start          # Starten des "normalen" Apache
ps aux | grep apache2 | grep root # wie sieht der Programmaufruf aus? (/usr/sbin/apache2 ...)
/etc/init.d/apache stop           # das war's. Kann wieder gestoppt werden
addjailsw $CHROOT -P /usr/sbin/apache2 "-D DEFAULT_VHOST -D PHP5 -D SSL -D SSL_DEFAULT_VHOST -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k start"

[Bearbeiten] Überprüfung des Ergebnisses

Nach dem Aufruf von addjailsw sollten Sie prüfen, ob der Apache problemlos gestartet ist. Dazu dienen die folgenden Befehle. Nach den Tests können Sie den Apache wieder stoppen, sofern er gestartet ist.

Code: Überprüfungen
echo $?			# Returncode=0?
ps aux | grep apache2	# Prozesse gestartet?
killall -TERM apache2	# falls ja, wieder sanft beenden
cd $CHROOT/etc
ls passwd shadow group hosts host.conf resolv.conf mime.types nsswitch.conf
# alle Dateien sollten gefunden werden

[Bearbeiten] Kopieren fehlender Dateien

Einige Dateien müssen manuell in die chroot hineinkopiert werden, da sie von "addjailsw" nicht entdeckt wurden.

Code: manuelles Kopieren
cd $CHROOT/etc
rm apache2 -rf
cp -a /etc/apache2 $CHROOT/etc/	# Konfigurationsdateien kopieren
cd $CHROOT/usr/lib/apache2/ 
rm logs conf -rf
cp -d /usr/lib/apache2/* $CHROOT/usr/lib/apache2/ # fehlende Links kopieren
# die Meldung "cp: omitting directory..." können Sie ignorieren


[Bearbeiten] wichtige Überprüfungen

Es sollte überprüft werden, ob die Links aus dem vorigen Absatz richtig kopiert wurden.

Code: Links richtig angelegt?
ls -l $CHROOT/usr/lib/apache2/
# Die Ausgabe sollte etwa so aussehen (3 Links und 1 Verzeichnis):
#...conf -> /etc/apache2
#...lib -> /usr/lib
#...logs > /var/log/apache2
#...modules

Ferner sollte überprüft werden, ob die x509-Server-Zertifikate richtig übernommen wurden.

Code: x509-Zertifikate
cd $CHROOT/etc/apache2/ssl
ls -l    # server.crt und server.key gefunden?
openssl x509 -in server.crt -text | less    # ist es das richtige Zertifikat?

[Bearbeiten] Dateiberechtigungen überprüfen und korrigieren

Die Dateiberechtigungen sollten unbedingt überprüft werden, denn wenn er hierbei Fehler gibt, nützt die ganze chroot nichts!

Code: Datei-Berechtigungen
find $CHROOT/etc -type f -exec chmod -x {} ';' #Berechtigungen korrigieren
find $CHROOT/lib -not -perm 0755 # es dürfte nichts gefunden werden
find $CHROOT/usr/{lib,sbin} -not -perm 0755  # es dürfte nichts gefunden werden
find $CHROOT/etc -type f -perm -6000 # gibt es suid- bzw. guid-Dateien?
find $CHROOT -perm -0002 -or -perm -0020 # Schreibberechtigung für "world" bzw. "group"?
Datei: Bildschirmausgabe von find...
Die Ausgabe des letzten Befehls sollte etwa so aussehen:
.../dev/null	# 0666, OK
.../dev/zero	# 0666, OK
.../tmp		# 1777, OK
.../var/tmp	# 1777, OK
.../usr/lib/apache2/lib  # link, daher ist 0777 OK
.../usr/lib/apache2/conf # link, daher ist 0777 OK
.../usr/lib/apache2/logs # link, daher ist 0777 OK

[Bearbeiten] unnötige User/Gruppen löschen

Die chroot sollte so spartanisch wie möglich sein. Daher sollen alle Benutzer und Gruppen bis auf "apache" gelöscht werden:

Code: Benutzer löschen
# alle User/Gruppen löschen außer "apache" in folgenden Dateien
# Vorsicht bei folgenden Befehlen!
# Sie müssen im Verzeichnis $CHROOT/etc sein, nicht im Verzeichnis /etc!
cd $CHROOT/etc
if [[ $PWD != "/etc" ]]
then 
   sed -i -n '/^apache.*/p' passwd
   sed -i -n '/^apache.*/p' group
   sed -i -n '/^apache.*/p' shadow
fi


[Bearbeiten] Probe aufs Exempel

Nachdem alle Vorarbeiten abgeschlossen sind, kann der Versuch unternommen werden, Apache in der chroot-Umgebung zu starten. Wie Sie den in Ihrem System gültigen Startbefehl herausbekommen, wurde oben beschrieben.

Code: Apache in chroot starten
chroot $CHROOT /usr/sbin/apache2 -D DEFAULT_VHOST -D PHP5 -D SSL -D SSL_DEFAULT_VHOST -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k start
echo $?  		# Returncode = 0?
ps aux | grep apache2	# Prozesse gestartet?
less $CHROOT/var/log/apache2/error_log # was sagt das Logfile?
ls -la $CHROOT/var/run/  # "apache2.pid" und "cgisock" vorhanden?

[Bearbeiten] Erfolg gehabt?

Als letztes sollte geprüft werden, ob die Prozesse tatsächlich in der chroot-Umgebung laufen. Sonst wäre alle Mühe umsonst gewesen.

Code: Prozesse laufen in chroot?!
APACHE_PIDS="$(pgrep apache2)" # welches sind die Prozess-IDs?
for process in $APACHE_PIDS; do ls /proc/$process/root; done

Der letzte Befehl prüft, wie die "root" (also das, was man sieht, wenn man "ls /" eingibt) für die Apache-Prozesse aussieht. Wenn sie die "normale" root sehen, dann laufen Sie nicht in der chroot-Umgebung. Wenn sie jedoch die abgespeckte root sehen, dann ist alles OK. Diese müsste so aussehen:

Datei: Bildschirmausgabe: die root aus Sicht der chroot-Prozesse
dev	etc	lib	tmp	usr	var

Wer immer noch misstrauisch ist, kann sich ausgeben lassen, wie die passwd aussieht, die die Prozesse sehen:

Code: chroot-Prozesse sehen abgespeckte passwd
APACHE_PIDS="$(pgrep apache2)" # welches sind die Prozess-IDs?
for process in $APACHE_PIDS; do cat /proc/$process/root/etc/passwd; done

Der letzte Befehl müsste für jeden Prozess die abgespeckte, nur aus einer Zeile bestehende passwd ausgeben.

Datei: Bildschirmausgabe: passwd aus Sicht der chroot-Prozesse
apache:x:81:81:added by portage for apache:/dev/null:/usr/sbin/nologin


[Bearbeiten] neues Init-Script schreiben

An dieser Stelle sollte man ein angepasstes Init-Script für den chroot-Start schreiben. Ich würde das vorhandene gentoo apache-Init-Script nicht abändern, damit man den nicht chrooteten Apache weiterhin starten kann, wenn man ihn braucht. Das neue Script unterscheidet sich im Prinzip nur dadurch, dass "chroot $CHROOT..." vor den üblichen Programmaufruf gesetzt werden muss.

CHROOT=/chroot/apache
chroot $CHROOT /usr/sbin/apache2 ...

Ich (Slalomsk8er) würde es möglichst nach dem Original gestalten, also mit den selben Funktionen, wie zum Beispiel einer Konfiguration in einer externen Datei im /etc/conf.d Verzeichniss. Aber das ist eine Geschmacksfrage.

Code: chroot Apache-Init-Script: /etc/init.d/apache2_chroot
#!/sbin/runscript
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

opts="${opts} reload configtest"

# this next comment is important, don't remove it - it has to be somewhere in
# the init script to kill off a warning that doesn't apply to us
# svc_start svc_stop

depend() {
        need net
        use mysql dns logger netmount postgresql
        after sshd
}

configtest() {
        ebegin "Checking Apache Configuration"
        checkconfig
        eend $?
}

checkconfig() {

        SERVERROOT="${SERVERROOT:-/usr/lib/apache2}"
        if [ ! -d "${CHROOT}/${SERVERROOT}" ]; then
                eerror "SERVERROOT does not exist: ${SERVERROOT}"
                return 1
        fi

        CONFIGFILE="${CONFIGFILE:-/etc/apache2/httpd.conf}"
        [ ${CONFIGFILE:0:1} != "/" ] && CONFIGFILE="${SERVERROOT}/${CONFIGFILE}"
        if [ ! -r "${CHROOT}/${CONFIGFILE}" ]; then
                eerror "Unable to read configuration file: ${CONFIGFILE}"
                return 1
        fi

        # check to see if the old config files exist and aren't used
        #if [[ "${CONFIGFILE}" != "/etc/apache2/conf/apache2.conf" &&
        #               -e "/etc/apache2/conf/apache2.conf" ]]; then
        #       eerror "Found old apache2.conf in /etc/apache2/conf. Configuration locations \n have moved, please check ${CONFIGFILE} to make sure it is correct, \n and remove /etc/apache2/conf/apache2.conf.\n\n Please see http://www.gentoo.org/doc/en/apache-upgrading.xml\n for more information."
        #       return 1
        #fi

        [ -n "${SERVERROOT}" ] && APACHE2_OPTS="${APACHE2_OPTS} -d ${SERVERROOT}"
        [ -n "${CONFIGFILE}" ] && APACHE2_OPTS="${APACHE2_OPTS} -f ${CONFIGFILE}"
        [ -n "${STARTUPERRORLOG}" ] && APACHE2_OPTS="${APACHE2_OPTS} -E ${STARTUPERRORLOG}"

        # set a sane default for KEEPENV and OLDENV
        KEEPENV=${KEEPENV:-PATH}
        OLDENV=

        for env_var in ${KEEPENV}; do
                OLDENV="${OLDENV} ${env_var}=`printenv ${env_var}`"
        done

        APACHE_ENV="env -i ${OLDENV}"
        APACHE2="/usr/sbin/apache2"

        $APACHE_ENV chroot ${CHROOT} ${APACHE2} ${APACHE2_OPTS} -t 1>/dev/null 2>&1
        ret=$?
        if [ $ret -ne 0 ]; then
                eerror "Apache2 has detected a syntax error in your configuration files:"
                chroot ${CHROOT} ${APACHE2} ${APACHE2_OPTS} -t
        fi

        return $ret
}

start() {
        checkconfig || return 1
        ebegin "Starting apache2"
        [ -f /var/log/apache2/ssl_scache ] && rm /var/log/apache2/ssl_scache
        $APACHE_ENV chroot ${CHROOT} ${APACHE2} ${APACHE2_OPTS} -k start
        eend $?
}

stop() {
        checkconfig || return 1
        ebegin "Stopping apache2"
        $APACHE_ENV chroot ${CHROOT} ${APACHE2} ${APACHE2_OPTS} -k stop
        killall -TERM apache2 # This is a ugly fix that ends apached for shure
        eend $?
}

reload() {
        if ! service_started "${myservice}" ; then
                eerror "Apache is not running! Please start it before trying to reload it."
        else
                checkconfig || return 1
                ebegin "Reloading apache2"
                $APACHE_ENV chroot ${CHROOT} ${APACHE2} ${APACHE2_OPTS} -k graceful
                eend $?
        fi
}


Dazu die angepasste Konfigurationsdatei. Die Konfigurationsdatei vom nicht-chrooteten Apache kann unverändert bleiben. Nicht vergessen, die CHROOT-Variable am Ende anzupassen!

Datei: /etc/conf.d/apache2_chroot
# /etc/conf.d/apache2_chroot: config file for /etc/init.d/apache2_chroot

APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5 -D SSL -D SSL_DEFAULT_VHOST"
CONFIGFILE=/etc/apache2/httpd.conf
STARTUPERRORLOG="/var/log/apache2/startuperror.log"
KEEPENV="PATH"
CHROOT=/chroot/apache


[Bearbeiten] Alternative zu Initscript abändern

Eine Alternative die bei mit besser lief, da untenstehendes script immer mit einem "apache2 has already been started" abgebrochen wurde. Auf jeden Fall ist das Gentoo System danach sauberer.

Code: emerge mod_chroot
emerge www-apache/mod_chroot
Code: /etc/conf.d/apache2
CHROOT="/chroot/apache" # hier das change root eintragen


Nun ist nur noch in dem apache module die Variable "ChrootDir" auf den richtigen Wert zu setzen und fertig.

[Bearbeiten] Arbeitsergebnisse sichern und Dateien nach Update synchronisieren

Wenn alles funktioniert, sollte man das chroot-Verzeichnis sichern, damit man im Notfall auf eine ältere Version zurückgreifen kann. Das ganze lässt sich natürlich automatisieren, worauf ich hier aber nicht eingehen kann.

Code: Sicherung erstellen
killall -TERM apache2  # vorher alle Prozesse stoppen
cp -a $CHROOT /home/xyz/backups/chroot/apache-2006-06-18 # mit Datumssuffix!

Um Aktualisierungen von Apache bzw. PHP bequem vom normalen ins chroot-System übernehmen zu können, solle man eine Dateiliste erstellen, die dann von rsync zur Synchronisierung verwendet werden kann.

Code: Dateiliste erstellen
cd /chroot/apache # cd ins chroot-Verzeichnis ist hierbei wichtig!!
find . -type f | sed 's/^\.//' > /root/apache-chroot-files-complete.txt # sed löscht "." am Anfang
cp /root/apache-chroot-files-complete /root/apache-chroot-files-for-update.txt

Von der erstellten Datei wird eine Kopie erstellt. Die Kopie dient rsync zur Synchronisation. Dazu müssen alle Zeilen gelöscht werden, deren Inhalt nicht synchronisiert werden soll. Bei den Zeilen "/etc/apache2/*" und "/var/www/*" muss überlegt werden, ob nicht-chroot- und chroot-Apache identisch konfiguriert sein sollen. Falls ja, kann man die Zeilen löschen.

Datei: apache-chroot-files-for-update.txt
#folgende Zeilen löschen, soweit vorhanden. Dateien werden dann nicht synchronisiert
/etc/nsswitch.conf
/etc/group
/etc/shadow
/etc/passwd
/etc/ld.so.cache
/etc/apache2/*  # eventuell lassen, falls beide Apaches gleich sein sollen.
/tmp/*
/var/tmp/*
/var/log/apache2/*
/var/run/*
/var/www/*  # eventuell lassen, besser ist aber ein symbolischer Link
/var/cache/apache2/*

Statt die www-Root zu synchronisieren, könnte man einen Link anlegen. Dazu muss vorher das www-Verzeichnis in der nicht-chroot-Umgebung umbenannt werden. Auf jeden Fall sollte man an dieser Stelle sehr sorgfältig vorgehen, um zu vermeiden, dass es zu einer ungewollten Vermischung von Dateien zwischen nicht-chroot und chroot-Apache kommt, v.a. dann, wenn die www-Root des nicht-chroot-Apache zu Testzwecken verwendet wird. Also vorher unbedingt genau überlegen, wie man es organisatorisch handhaben will.

mv /var/www /var/www-nicht-chroot
ln -s $CHROOT/var/www /var/www

Nach einem wichigen Update des nicht-chroot-Apaches sollten die geänderten Programmdateien in die chroot übernommen werden. Dies ist deshalb zu empfehlen, weil durch Updates oft Sicherheitslücken beseitigt werden. Wenn man die chroot nicht aktualisiert, ergibt der ganze Aufwand keinen Sinn.

Code: Dateien nach einem Apache-Update synchronisieren
emerge -av --update --newuse apache # Update auf dem nicht-chroot-System
cd /root
rsync -tvuL --files-from=apache-chroot-files-for-update.txt  /  /chroot/apache/   # "/" = Quelle


[Bearbeiten] Anhang: Härten der chroot

[Bearbeiten] Stack Smashing Protection (SSP)

SSP hilft, Bufferoverflow-Angriffe abzuwehren. SSP lässt sich in ein ausführbares Programm einbauen, indem man es mit dem "hardened" gcc neu kompiliert. Dazu müssen zunächst gcc und glibc neu kompiliert werden mit dem USE-flag "hardened". Ich empfehle, das flag zu den USE-flags in der /etc/make.conf hinzuzufügen, da es sich auch auf andere Programme auswirkt. Das Sicherheitsfeature "PIE", das hierbei ebenfalls installiert wird, wird erst aktiv wenn die PAX-Funktionen im gehärteten Kernel aktiviert werden. Bei PIE geht es um "Position Independent Execution", also um das Laden von Code an zufällige Positionen im Hauptspeicher. Dies erschwert es Hackern, Code durch einen Bufferoverflow an die gewünschte Stelle im Haupspeicher zu positionieren. Ich verweise auf folgenden Artikel: http://www.gentoo.org/proj/en/hardened/grsecurity.xml

Datei: /etc/make.conf
USE="hardened ..."
Code: neu emergen von gcc und glibc
emerge -av --update --newuse gcc glibc

Anschließend kann man durch den Befehl "gcc-config" prüfen, welche gcc-Version aktiv ist.

Code: aktive Version von gcc?
gcc-config -l
# Ausgabe z.B.
# [1] i686-pc-linux-gnu-3.4.6*  # "*" bedeutet: diese Version ist aktiv
# [2] i686-pc-linux-gnu-3.4.6-hardenednopie
# usw.

Falls die gewünschte Version nicht aktiv ist, kann man dies durch Eingabe von "gcc-config 1" erreichen. Die erste Zeile bezeichnet die normale "hardened"-Version, also ohne Deaktivierung von PIE und/oder SSP.

Code: gcc-Version aktivieren
gcc-config 1  # -> 1. Zeile aktivieren
env-update
source /etc/profile
Code: neu emergen von apache
emerge -av apache


[Bearbeiten] grsecurity

grsecurity enthält einige ausgefeilte Funktionen, um die chroot abzusichern. Um sie zu aktivieren, müssen die hardened-sources installiert und der Kernel neu kompiliert werden.

Code: emerge der hardened-sources
emerge -av hardened-sources
cd /usr/src/linux-2.6.16-hardened-r10/
make menuconfig
make && make modules_install
mount /boot
cp System.map /boot/System.map-2.6.16-hardened-r10
cp arch/i386/boot/bzImage /boot/kernel-2.6.16-hardened-r10
cp .config /boot/config-2.6.16-hardened-r10
vim /boot/grub/grub.conf  # erstellen Sie einen zusätzlichen Eintrag und rebooten Sie


Kernel-Konfiguration

--> Security-Options
   --> Grsecurity
      --> Filesystem Protections
         --> chroot jail restrictions
             [alles darunter aktivieren]

Leider kann ich auf die vielen anderen Sicherheitsoptionen hier nicht eingehen, das dies den Umfang dieses Howtos sprengen würde.

[Bearbeiten] Ausblick

Dies kann nur der Anfang der Absicherung Ihrer Apache-Installation sein. Mindestens genauso wichtig ist die richtige Konfiguration der conf- bzw. ini-Dateien (httpd.conf, php.ini usw.). Auch die Installation von mod_security kann die Sicherheit weiterhin erhöhen. Obwohl ich die Idee des chroot prinzipiell richtig finde, möchte ich auch auf gewisse Nachteile hinweisen: Aufgrund der diversen manuellen Eingriffe, besteht die Gefahr der Fehlkonfiguration, die das System u.U. unsicherer macht als eine nicht-chroot Standardinstallation. Wer die Materie nicht "perfekt" beherrscht, sollte doch eher Abstand von der Sache nehmen. Ein weiterer Nachteil ist, dass es recht aufwändig ist, ein chroot-System auf dem Laufenden zu halten. Nach einem Update des Apache in der normalen Umgebung, das per rsync in die chroot eingespielt wird, besteht die Gefahr, dass die chroot z.B. aufgrund fehlender Dateien nicht mehr richtig funktioniert. Für den Profi wird es kein Problem sein, die Dinge zurechtzubiegen, aber wer nur wenig Zeit hat, wird möglicher Weise an seine Grenzen stoßen. Aber selbst wenn man im Endeffekt kein chroot-System produktiv verwenden wird, kann man doch unendlich viel lernen bei der Einrichtung eines solchen Systems.

SK, Ostfildern, den 30.7.2006

'Persönliche Werkzeuge