PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ssh und chroot mit PAM



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.

spymande
15.05.03, 16:02
Nachtrag: Damit beim reboot auch das pts-Verzeichnis gemountet wird,
sollte man in /etc/rc.local (so heist die Datei bei mir, Redhat 8) folgende
Zeile einfügen:
mount -t devpts devpts /chrootdir/dev/pts

Wobei chrootdir das Chroot-Verzeichniss ist, welches man im Script angegeben hat.

Oder in der /etc/fstab defaults nach auto umändern.

Damit es später beim Script dann richtig eingetragen wird, sollte man folgende Zeile ändern:

echo "devpts $chrootdir/dev/pts devpts defaults 0 0" >>/etc/fstab
nach
echo "devpts $chrootdir/dev/pts devpts auto 0 0" >>/etc/fstab

Mfg,

Malte

msi
15.05.03, 18:47
dieser link könnte euch auch interessieren:
http://chrootssh.sourceforge.net/

spymande
19.06.03, 19:26
NACHTRAG #2 :

Da anscheinend diese Forum NICHT mit LANGEN (!) URLs zurecht kommt und diese
einfach durch ... kürzt, poste ich hier die oben genannte URL in mehreren Teilen :

http://www.kernel.org/ \
pub/linux/libs/pam/ \
pre/modules/pam_chroot-0.6.tar.gz

\ = Nur fuer dieses Forum, bitte im Browser ohne Leerzeichen UND \ !

spymande
30.06.03, 15:22
Neuer Nachtrag...

Man sollte die /etc/passwd NICHT umändern, da es Systemweite Konsequenzen haben kann, insbesondere auf der Hinsicht von den Mailprogrammen usw.

Daher sollte man besser folgendes tun:

chroot-dir: /home
benutzer: foo

In das Verzeichnis /home/foo wechseln,
dort ein neues Verzeichnis das ebenfalls /home heißt anlegen
und
das Verzeichnis foo von dem Verzeichnis /home nach
/home/foo/home

man sollte alle anderen chroot-Benutzern ebenfalls kopieren da sonst bei einem ssh-login die Meldung erscheint das das home-verz. nicht gefunden werden konnte...