Mailinglist Archive: opensuse-de (4628 mails)
| < Previous | Next > |
Re: SSH: User in Home einsperren
- From: Bernd Tannenbaum <tannenbaum@xxxxxxxxxxxxxxxxx>
- Date: Thu, 26 Sep 2002 08:28:39 +0200
- Message-id: <3D92A917.6070008@xxxxxxxxxxxxxxxxx>
Hallo auch:
Allem Vorneweg "Tschuldigung für das grauenhafte Format gegen jedweder
Etiquette !!"
Ich experimentiere momentan mit neuem Mailprogramm, is noch nicht
richtig eingestellt, ich kümmer mich drum.
Michael schrieb:
On Wed, Sep 25, 2002 at 10:31:53AM +0200, Tannenbaum, Bernd wrote:
> Es gibt noch die Möglichkeit, den User prinzipiell immer beim
Einloggen in
> eine chroot-Umgebung zu sperren. Das klappt dann natürlich auch bei
ssh und
> ist unabhängig von irgendeiner Version.
Das klingt wirklich interessant, aber wo gibts dazu mehr infos als die
blose Hypothese?!
Bloße Hypothese - lol :)
Okay, ich hab die Einrichtung einer chroot-Umgebung hier eingefügt.
Fragen gerne an mich.
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
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.
| < Previous | Next > |