Axel schrieb:
Hallo,
wie kann man den shell zugang von jemandem auf einen server nur auf sein home-verzeichniss beschränken?
Per FTP ist mir klar... aber per Shell ?
Chroot is ne gute Idee, rlogin ne andere Möglichkeit. Bei rlogin ist der user soweit ich weiß auf ein Verzeichnis beschränkt, das er nicht verlassen kann. Er kann dann also auch nicht in Unterverzeichnisse wechseln. Ich hänge mal mein Howto für ne chroot-Installation dran. Vielleicht hilfts :) 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 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 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.