Hey there,
-----Original Message----- From: age@ifak-system.com [mailto:age@ifak-system.com] Sent: dinsdag 15 maart 2005 10:32 To: suse-linux@suse.com Subject: user in chroot einsperren
Hallo Liste,
ich möchte eine user in ein chroot-jail sperren. Ich habe diese howto http://www.tjw.org/chroot-login-HOWTO/ ausprobiert. Es funktioniert bei mir aber nicht. Der Befehl sudo /usr/bin/chroot /home/user /bin/su - user bringt aber die Fehler-Meldung "user does not exist".
Hat jemand eine Idee? Die Verzeichnisse /etc und /home/user/etc haben den gleichen Inhalt (testweise). Und ohne chroot-shell funktioniert das Login. Als Betriebssystem nutze ich Suse 9.2
Hab das vor 1,2 Jahren ein paar mal erfolgreich hinbekommen. Anbei meine alte doku, da wird auch auf ein paar Fehler eingegangen, Vielleicht haste ja Glueck und es hilft: ######## Chroot-Umgebung Prinzip der "chroot-Umgebung": Mit dem Befehl chroot unter linux kann einem eingeloggten User ein falsches root-Verzeichnis vorgespielt werden. Man setzt bsp. das Home-Verzeichnis eines users über chroot als root-Verzeichnis. In diesem Fall endet der Verzeichnisbaum hier, das Home-Verzeichnis wird als "/" angezeigt und man kann nicht mehr in eine höhere Ebene wechseln. Nachteil daran ist, dass das Betriebssystem diese Illusion ebenfalls für wahr nimmt und daher keine Befehle, Konfigurationsdateien, Libraries etc. mehr findet, die sich alle im wirklichen Hauptpfad befinden. Will man also einem User die Möglichkeit geben, in seiner neuen Umgebung Befehle wie "ls" oder "rm" auszuführen, müssen diese Befehle samt Bibliotheken in den neuen Pfad kopiert bzw. dort neu kompiliert werden. Daher muß man innerhalb der chroot-Umgebung noch mal einen kleinen Verzeichnisbaum installieren, in dem alle gewünschten Funktionalitäten implementiert sind. Hat man dies getan, muß der Login-Vorgang noch so verändert werden, dass beim Einloggen die chroot-Umgebung aktiviert wird. So kann man einen User in einen Käfig sperren, den er nicht verlassen kann und stellt ihm nur genau die Befehle und Programme zur Verfügung, die man noch einmal extra für ihn in seiner Umgebung implementiert hat. Login-prinzip: User startet "login" Seine shell startet "sudo(root)" root führt "chroot $home" aus root führt "su $user" aus shell nun im Normalbetrieb User befindet sich in chroot-Umgebung SSH2 über Public-Key: Möglicherweise soll auch ein ssh2 über public key in die chroot-Umgebung ausgeführt werden. In diesem Fall sollte noch vor der Installation dieser Umgebung der ssh2 vorbereitet werden, da ein Entpacken, Konfigurieren und Installieren von Paketen sowie die Ausführung etwa des ssh-keygen2 danach nicht mehr funktioniert. Denken Sie daran, dass der eingesperrte User den ssh-keygen2 ausführen muß. Ändern Sie den unter Step 2 beschriebenen Eintrag in der /etc/passwd: user:x:user-id:group-id::/tmp:/bin/chroot-shell folgendermaßen ab : user:x:user-id:group-id::/home/user:/bin/chroot-shell Die übrige Installation des ssh2 public key erfolgt wie in jeder anderen Umgebung. Howto in 8 Steps Step 1: Neue Shell Zuerst muß eine neue Login-shell für den User geschrieben werden. Diese muß dann unter /bin gespeichert werden, der Name der shell ist egal, hier wird "chroot-shell" verwendet. #!/bin/bash if [ "$1" = "-c" ]; then i=0; PARAMS=""; for param in $*; do if [ $i -gt 0 ]; then PARAMS="$PARAMS $param"; fi let i++; done; sudo /usr/bin/chroot /home/$USER /bin/su - $USER -c "$PARAMS" else sudo /usr/bin/chroot /home/$USER /bin/su - $USER fi; Diese shell sollte nun noch durch Rechteänderung "executable" werden. Step 2: User-Einstellungen Der Eintrag für den User in der /etc/passwd sollte folgendermaßen aussehen: user:x:user-id:group-id::/tmp:/bin/chroot-shell wwwdocs:x:503:103::/tmp:/bin/chroot-shell (Beispiel) Das Anlegen des Users über Yast2 allein ist nicht möglich, da dort keine alternative Login-shell gewählt werden kann. Es empfiehlt sich daher ein useradd. useradd -d /tmp -s /bin/chroot-shell user passwd user Step 3: Neuer Hauptpfad In dem Home-Verzeichnis, welches über chroot neuer Hauptpfad wird, werden einige directories benötigt. Diese können mit mkdir angelegt werden. (/home/user ist ggf. schon vorhanden) mkdir /home/user mkdir /home/user/etc mkdir /home/user/dev mkdir /home/user/bin mkdir /home/user/lib mkdir /home/user/usr mkdir /home/user/usr/bin mkdir /home/user/home Über chown sollte nun noch das neue Home-Verzeichnis /home/user/home dem User gegeben werden. chown user:group /home/user/home Die anderen Verzeichnisse (etc, bin...) inklusive der Befehle in bin müssen unbedingt weiter root gehören. Step 4: Neue passwd und group Die neue Umgebung benötigt nun noch eine passwd sowie eine group, da sie nicht mehr auf die originalen Files im echten Hauptpfad zugreifen kann. vi /home/user/etc/passwd root:x:0:0::/:/bin/bash user:x:user-id:group-id::/home:/bin/bash und vi /home/user/etc/group root:x:0: user:x:group-id: Step 5: Installiere bash Die bash samt benötigter libraries muß in die chroot-Umgebung kopiert werden. cp /bin/bash /home/user/bin/ Um die benötigten libraries zu erfahren, kann man folgenden Befehl nutzen: ldd /bin/bash Es empfiehlt sich allerdings, alle libraries unter /lib zu kopieren, da auch die noch benötigten Befehle auf diese zurückgreifen müssen und ein einzelnes herauspicken unnötig mühsam ist. cp /lib/* /home/user/lib/ Step 6: Benötigte Befehle Sobald man sich klar darüber ist, welche Befehle dem User zur Verfügung gestellt werden sollen, können diese samt ihrer libraries in die chroot-Umgebung kopiert werden. cp /bin/Befehl /home/user/bin/ cp /bin ls rm mv cp /home/wwwdocs/bin/ (Beispiel) Auch hier können die Libraries wieder abgefragt werden. ldd /bin/Befehl Hat man allerdings schon alle Bibliotheken kopiert, kann man sich dies ersparen. Step 7: "su" neu bilden Der Befehl "su" wird in jedem Fall benötigt, da er im Login-Prozess verwendet wird. Er kann jedoch nicht einfach kopiert werden wie die übrigen Befehle, sondern muß in der Chroot-Umgebung neu gebildet werden. Dazu sollte man sich den Code des Befehls besorgen. Eine Adresse hierfür ist : ftp://alpha.gnu.org/pub/gnu, dort nach "sh-utils" suchen. Hat man den Code, muß man in der "configure"-Anweisung den neuen Pfad bedenken. ./configure --prefix=/home/user make check make install <Optional> Step 8: OpenSSH für den user einrichten Hierfür müssen die benötigten Befehle wie zuvor auch in die chroot-Umgebung kopiert werden. cp /usr/bin/ssh /home/user/usr/bin/ cp /usr/bin/scp /home/user/usr/bin/ cp /usr/bin/env /home/user/usr/bin/ Weiterhin werden auch hier Libraries benötigt, der ldd-Befehl kann wie schon oben verwendet werden. Zusätzlich benötigte Konfiguration: mknod -m 0666 /home/user/dev/tty c 5 0 mknod -m 0644 /home/user/dev/urandom c 1 9 </Optional> Step 9: sudo Als letztes muß nun noch die Ausführung des "sudo" beim Login-Vorgang ermöglicht werden. Das kann nur mit dem Befehl "visudo" durchgeführt werden. In der nun geöffneten Konfigurationsdatei muß folgende Zeile eingefügt werden: user ALL = NOPASSWD: /usr/bin/chroot /home/user /bin/su - user* Gegebenenfalls muß dafür erst das Paket "visudo.rpm" installiert werden. Troubleshooting: /bin/su: cannot set groups: Operation not permitted Hier hatten alle Befehle unter /home/user/bin/ den Besitzer user statt root. su: cannot run /bin/chroot-shell: No such file or directory Hier wurde die "chroot-shell.txt" aus windoof nach linux kopiert. Dabei wurden alle fremden Formatierungen mitgenommen. Stattdessen muß auf dem linux der Inhalt der txt-Datei in eine neue Datei "chroot-shell" geschrieben werden. Sorry, user nonhome is not allowed to execute '/usr/bin/chroot /h/nonhome /bin/su - nonhome' as root on Einstein. Fehler: In der chroot-shell stimmt der Pfad des Home-Verzeichnisses nicht. /bin/chroot-non: /bin/chroot-non: Permission denied Fehler: Chroot-shell ist nicht executeable. su: cannot run /bin/chroot-non: No such file or directory Fehler: Chroot-shell liegt nicht unter /bin. su: user nonhome does not exist Einstein:~ # Fehler: Kein Eintrag in der /etc/passwd. /bin/su: user nonhome does not exist Fehler: In der Chroot-Umgebung existiert keine /chrootpfad/etc/passwd. /bin/su: cannot run /bin/bash: No such file or directory Fehler: In der Chroot-Umgebung existiert keine /chrootpfad/bin/bash /bin/su: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory Fehler: In der Chroot-Umgebung existieren die benötigten libraries nicht unter /chrootpfad/lib/. /bin/su: incorrect password Fehler: Der Befehl "su" wurde einfach in die chroot-Umgebung kopiert, statt ihn dort zu kompilieren. nonhome is not in the sudoers file. This incident will be reported. Fehler: Der Eintrag in "visudo" fehlt. Sorry, user nonhome is not allowed to execute '/usr/bin/chroot /nonhome /bin/su - nonhome' as root on Einstein. Fehler: Hier stimmt der Eintrag in "visudo" nicht. In diesem Beispiel ist der Pfad /nonhome nicht korrekt. ######## Viel Glueck, Bernd This e-mail and any attachment is for authorised use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by, any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. Thank you.