spymande
14.05.03, 21:44
Hi,
da ich in diesen Foren schon viele Anfragen gelesen habe wie man eine
chroot-Umgebung für SSH einrichtet, habe ich mal folgende Anleitung
geschrieben um den Einstieg zu erleichtern.
Vorne weg: Mein System ist RedHat 8, es kann also durchaus sein dass
die Pfade bzw. Programmnamen je nach Distribution unterschiedlich sind !
--- Bemerkung: ---
Das Script habe ich entworfen um die nötigen
Abhängigkeiten der einzelnen Programme zu automatisieren.
Schritt
Vorbereitung
- Von der URL
http://www.kernel.org/pub/linux/lib...root-0.6.tar.gz
das Paket downloaden
- pam muß installiert sein
- pam-devel muß installiert sein
- sed muß installiert sein, überprüfen mit z.B.
which sed
- expr muß installiert sein, überprüfen mit z.B.
which expr, ggf. den Pfad im Script anpassen !
- ldd muß installiert sein, überprüfen mit z.B.
which ldd
- WICHTIG:
In der Datei
/etc/ssh/sshd_config
die Zeile
UsePriviliegeSeperation yes
nach
UsePriviliegeSeperation no
ändern und ggf. die # entfernen !
Nun gehts ans eingemachte :
1. Als root in das System einloggen
2. Das tar.gz-File entpacken mit
tar xfz pam_chroot-0.6.tar.gz
3. In das Verzeichnis
./pam_chroot-0.6
wechseln
4. Das Modul compilieren mit
make
5. Das Modul
pam_chroot.so
mit
cp ./pam_chroot.so /lib/security
kopieren
6. Die config-Datei chroot.conf mit einem Editor öffnen und die User
eintragen, die eine chroot-Umgebung erhalten sollen
(Achtung, der User root sollte NICHT eingetragen werden !)
Syntax:
Benutzername chroot-dir
Beispiel:
foo /home
(Die Benutzer sollten schon vorhanden sein...)
7. Die config-Datei
chroot.conf
mit
cp ./chroot.conf /etc/security
kopieren
8. Die Datei
/etc/pam.d/sshd
mit einem Editor öffnen und die Zeile
session required /lib/security/pam_chroot.so
einfügen (am Ende der Datei oder wo sollte egal sein).
9. Dieses Script anpassen/ausführen:
--- Script-Anfang : ---
chrootdir=/chroot # Ziel-chroot-Verzeichnis
lapp_n=2 # Maximale Anzahl der Extra-Programme
# Bei 0 werden keine Dateien kopiert !
lapp_1=/bin/bash # Progname und Pfad
lapp_2=/bin/ls # Progname und Pfad
etc_n=1 # Maximale Anzahl der Extra-/etc-Dateien
# Bei 0 werden keine Dateien kopiert !
etc_1="/etc/passwd"
etc_2="/etc/shadow"
etc_3="/etc/group"
dirs="bin dev dev/pts"
# Verzeichniss die im chroot angelegt werden muessen
# Muessen mit den lapp_xy uebereinstimmen !
# Die dev -Verzeichnisse DUERFEN NICHT entfernt werden !
###
# Nicht aendern !
###
mkdir $chrootdir
cd $chrootdir
mkdir $dirs
chkmnt=`mount | grep devpts | grep -c $chrootdir`
mnt=`mount | grep devpts | grep "$chrootdir" | cut -f3 -d" "`
chkfst=`grep -c "$chrootdir/dev/pts" /etc/fstab`
if [ $chkfst -ne 1 ]; then
echo "devpts $chrootdir/dev/pts devpts defaults 0 0" >>/etc/fstab
fi
idx=1
if [ $lapp_n -gt 1 ]; then
while [ $idx -le $lapp_n ]; do
eval apps='$lapp_'$idx
cutldd=`ldd $apps | cut -f2 -d">" | cut -f1 -d"(" | sed /":"/d`
cp $apps $chrootdir$apps
cp --parents $cutldd $chrootdir
idx=`/usr/bin/expr $idx + 1`
done
else
if [ $lapp_n -gt 0 ]; then
cutldd=`ldd $lapp_1 | cut -f2 -d">" | cut -f1 -d"(" | sed /":"/d`
cp $lapp_1 $chrootdir$lapp_1
cp --parents $cutldd $chrootdir
fi
fi
idx=1
if [ $etc_n -gt 1 ]; then
while [ $idx -le $etc_n ]; do
eval et='$etc_'$idx
cp $et $chrootdir$et
cp --parents $cutldd $chrootdir
idx=`/usr/bin/expr $idx + 1`
done
else
if [ $etc_n -gt 0 ]; then
cp $etc_1 $chrootdir$etc_1
cp --parents $cutldd $chrootdir
fi
fi
if [ $chkmnt -gt 0 ]; then
umount $mnt
mount -t devpts devpts $chrootdir/dev/pts
else
mount -t devpts devpts $chrootdir/dev/pts
fi
--- Script-Ende ---
Führt man dieses Script mehrmals aus, dann können die
Fehlermeldungen von mkdir ignoriert werden !
Syntaxerklärung:
Die Variablen _n=x müssen immer mit der Anzahl der Dateien übereinstimmten,
die auch kopiert werden sollen.
Wird eine zu geringe Anzahl eingegeben,
dann werden keine Dateien von dem Variablensatz kopiert.
Bitte genau darauf achten !
Es kann je nach Rechnertyp einige Zeit dauern, bis das Script
durchgelaufen ist.
10. Als letztes muß nun noch die Datei /etc/passwd angepasst werden,
da sich ja der Pfad zu dem Homeverzeichnis geändert hat:
Beispiel:
Was vorher war:
foo:x:500:100::/home/foo:/bin/bash
wird nun zu
foo:x:500:100::/foo:/bin/bash
Ich habe alle meine User in ein zweites, oberes Verzechnis gesteckt,
aus Sicherheitsgründen.
Die Homeverzeichnisse liegen bei mir z.B. in
/user/home
Anmerkung: Die Datei /etc/passwd MUSS unbedingt in das /chrootdir/etc-Verzeichnis mitkopiert werden, NACHDEM sie angepaßt wurde !
Viel Spaß beim Testen,
wenn Fehler entdeckt werden bitte eine Mail an chaman@web.de
Grüße,
Malte
PS: Das selbige kann auch mit den lokalen Logins gemacht werden, dazu einfach
nur den selben Syntax wie in Schritt 8 in die Datei /etc/pam.d/login einfügen.
da ich in diesen Foren schon viele Anfragen gelesen habe wie man eine
chroot-Umgebung für SSH einrichtet, habe ich mal folgende Anleitung
geschrieben um den Einstieg zu erleichtern.
Vorne weg: Mein System ist RedHat 8, es kann also durchaus sein dass
die Pfade bzw. Programmnamen je nach Distribution unterschiedlich sind !
--- Bemerkung: ---
Das Script habe ich entworfen um die nötigen
Abhängigkeiten der einzelnen Programme zu automatisieren.
Schritt
Vorbereitung
- Von der URL
http://www.kernel.org/pub/linux/lib...root-0.6.tar.gz
das Paket downloaden
- pam muß installiert sein
- pam-devel muß installiert sein
- sed muß installiert sein, überprüfen mit z.B.
which sed
- expr muß installiert sein, überprüfen mit z.B.
which expr, ggf. den Pfad im Script anpassen !
- ldd muß installiert sein, überprüfen mit z.B.
which ldd
- WICHTIG:
In der Datei
/etc/ssh/sshd_config
die Zeile
UsePriviliegeSeperation yes
nach
UsePriviliegeSeperation no
ändern und ggf. die # entfernen !
Nun gehts ans eingemachte :
1. Als root in das System einloggen
2. Das tar.gz-File entpacken mit
tar xfz pam_chroot-0.6.tar.gz
3. In das Verzeichnis
./pam_chroot-0.6
wechseln
4. Das Modul compilieren mit
make
5. Das Modul
pam_chroot.so
mit
cp ./pam_chroot.so /lib/security
kopieren
6. Die config-Datei chroot.conf mit einem Editor öffnen und die User
eintragen, die eine chroot-Umgebung erhalten sollen
(Achtung, der User root sollte NICHT eingetragen werden !)
Syntax:
Benutzername chroot-dir
Beispiel:
foo /home
(Die Benutzer sollten schon vorhanden sein...)
7. Die config-Datei
chroot.conf
mit
cp ./chroot.conf /etc/security
kopieren
8. Die Datei
/etc/pam.d/sshd
mit einem Editor öffnen und die Zeile
session required /lib/security/pam_chroot.so
einfügen (am Ende der Datei oder wo sollte egal sein).
9. Dieses Script anpassen/ausführen:
--- Script-Anfang : ---
chrootdir=/chroot # Ziel-chroot-Verzeichnis
lapp_n=2 # Maximale Anzahl der Extra-Programme
# Bei 0 werden keine Dateien kopiert !
lapp_1=/bin/bash # Progname und Pfad
lapp_2=/bin/ls # Progname und Pfad
etc_n=1 # Maximale Anzahl der Extra-/etc-Dateien
# Bei 0 werden keine Dateien kopiert !
etc_1="/etc/passwd"
etc_2="/etc/shadow"
etc_3="/etc/group"
dirs="bin dev dev/pts"
# Verzeichniss die im chroot angelegt werden muessen
# Muessen mit den lapp_xy uebereinstimmen !
# Die dev -Verzeichnisse DUERFEN NICHT entfernt werden !
###
# Nicht aendern !
###
mkdir $chrootdir
cd $chrootdir
mkdir $dirs
chkmnt=`mount | grep devpts | grep -c $chrootdir`
mnt=`mount | grep devpts | grep "$chrootdir" | cut -f3 -d" "`
chkfst=`grep -c "$chrootdir/dev/pts" /etc/fstab`
if [ $chkfst -ne 1 ]; then
echo "devpts $chrootdir/dev/pts devpts defaults 0 0" >>/etc/fstab
fi
idx=1
if [ $lapp_n -gt 1 ]; then
while [ $idx -le $lapp_n ]; do
eval apps='$lapp_'$idx
cutldd=`ldd $apps | cut -f2 -d">" | cut -f1 -d"(" | sed /":"/d`
cp $apps $chrootdir$apps
cp --parents $cutldd $chrootdir
idx=`/usr/bin/expr $idx + 1`
done
else
if [ $lapp_n -gt 0 ]; then
cutldd=`ldd $lapp_1 | cut -f2 -d">" | cut -f1 -d"(" | sed /":"/d`
cp $lapp_1 $chrootdir$lapp_1
cp --parents $cutldd $chrootdir
fi
fi
idx=1
if [ $etc_n -gt 1 ]; then
while [ $idx -le $etc_n ]; do
eval et='$etc_'$idx
cp $et $chrootdir$et
cp --parents $cutldd $chrootdir
idx=`/usr/bin/expr $idx + 1`
done
else
if [ $etc_n -gt 0 ]; then
cp $etc_1 $chrootdir$etc_1
cp --parents $cutldd $chrootdir
fi
fi
if [ $chkmnt -gt 0 ]; then
umount $mnt
mount -t devpts devpts $chrootdir/dev/pts
else
mount -t devpts devpts $chrootdir/dev/pts
fi
--- Script-Ende ---
Führt man dieses Script mehrmals aus, dann können die
Fehlermeldungen von mkdir ignoriert werden !
Syntaxerklärung:
Die Variablen _n=x müssen immer mit der Anzahl der Dateien übereinstimmten,
die auch kopiert werden sollen.
Wird eine zu geringe Anzahl eingegeben,
dann werden keine Dateien von dem Variablensatz kopiert.
Bitte genau darauf achten !
Es kann je nach Rechnertyp einige Zeit dauern, bis das Script
durchgelaufen ist.
10. Als letztes muß nun noch die Datei /etc/passwd angepasst werden,
da sich ja der Pfad zu dem Homeverzeichnis geändert hat:
Beispiel:
Was vorher war:
foo:x:500:100::/home/foo:/bin/bash
wird nun zu
foo:x:500:100::/foo:/bin/bash
Ich habe alle meine User in ein zweites, oberes Verzechnis gesteckt,
aus Sicherheitsgründen.
Die Homeverzeichnisse liegen bei mir z.B. in
/user/home
Anmerkung: Die Datei /etc/passwd MUSS unbedingt in das /chrootdir/etc-Verzeichnis mitkopiert werden, NACHDEM sie angepaßt wurde !
Viel Spaß beim Testen,
wenn Fehler entdeckt werden bitte eine Mail an chaman@web.de
Grüße,
Malte
PS: Das selbige kann auch mit den lokalen Logins gemacht werden, dazu einfach
nur den selben Syntax wie in Schritt 8 in die Datei /etc/pam.d/login einfügen.