====== SSH/BASH mit Change Root ====== ===== Diese Variante aktualisiert automatisch ===== Hier wird einem Benutzer //showlog//, der sich mit diesem Rechner nur per //ssh// verbinden kann und aus sein Home-Verzeichnis nicht raus kommt, der Zugriff auf die Log-Dateien gegeben. Benutzer anlegen: > groupadd chroot > useradd -mg chroot -s /bin/bash showlog > id showlog uid=1024(showlog) gid=1025(chroot) Gruppen=1025(chroot) SSH-Schlüssel ablegen: > mkdir /home/showlog/.ssh/ > vi /home/showlog/.ssh/authorized_keys > chown -R showlog:chroot /home/showlog/.ssh > chmod 0600 /home/showlog/.ssh/authorized_keys > mkdir /home/showlog/dev/ > for V in dev bin lib lib64 usr/bin ; do mkdir -p /home/showlog/${V} ; echo "/${V} /home/showlog/${V} none bind 0 0" >> /etc/fstab ; mount -B /home/showlog/${V} ; done globales SFTP-System deaktivieren: sed -i 's/^Subsystem sftp.*sftp-server/#&/' /etc/ssh/sshd_config echo " Match Group chroot ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no " >> /etc/ssh/sshd_config /etc/init.d/ssh restart === weitere Benutzer kann man mit diesem Skript anlegen === #!/bin/bash # # Dieses Skript legt einen neuen SSH-Benutzer an, # der nach dem login immer in eine ChRoot eingesperrt wird. # if [ -z "${1}" ] ; then echo "${0} [Benutzername]" exit 1 else if [ -e /home/${1} ] ; then echo "Dieser Benutzername existiert schon." exit 1 fi fi BENUTZER="${1}" # groupadd chroot useradd -mg chroot -s /bin/bash ${BENUTZER} id ${BENUTZER} mkdir -p /home/${BENUTZER}/.ssh touch /home/${BENUTZER}/.ssh/authorized_keys # vi /etc/ssh/sshd_config # service ssh restart for V in dev bin lib lib64 usr/bin ; do mkdir -p /home/${BENUTZER}/${V} ; echo "/${V} /home/${BENUTZER}/${V} none bind 0 0" >> /etc/fstab ; mount -B /home/${BENUTZER}/${V} ; done chown -R 0:0 /home/${BENUTZER} chown -R ${BENUTZER}:chroot /home/${BENUTZER}/.ssh # vi /etc/fstab ls -lha /home/${BENUTZER}/ ===== klassische Variante ===== **Damit das funktioniert, müssen alle benötigten Programmteile (wie zum Beispiel die SHELL) in die ChRoot-Umgebung kopiert werden!** Wenn man auf einem Rechner mit //Ubuntu-Linux 12.04 LTS// die im folgenden beschriebenen Schritte abarbeitet, \\ dann wird der Benutzer //fritz// in eine ChRoot eingespert, wenn er sich per SSH auf dem Rechner einlogt. Er kann dann nur im //Arbeitsverzeichnis// schreiben! > useradd -m -s /bin/bash fritz > mkdir -p /home/fritz/.ssh > mkdir -p /home/fritz/Arbeitsverzeichnis > chown -R 0:0 /home/fritz > chown -R fritz:fritz /home/fritz/.ssh > chown -R fritz:fritz /home/fritz/.bash* > chown -R fritz:fritz /home/fritz/Arbeitsverzeichnis SSH-Schl≠ssel ablegen: > vi /home/fritz/.ssh/authorized_keys Bin␍rdateien, die inder ChRoot-Umgebung ben┴tigt werden, dort ablegen: > tar cvzf - --exclude=/lib/modules /bin/ /lib/ /lib64/ /usr/bin/ | tar xzf - -C /home/fritz/ > cd /home/fritz/ > mkdir dev > mknod dev/null c 1 3 > mknod dev/zero c 1 5 > chmod 0666 dev/{null,zero} den SSH-Dienst konfigurieren: > vi /etc/ssh/sshd_config ... #------------------------------------------------------------------------------# Match user fritz ChrootDirectory %h X11Forwarding no AllowTcpForwarding no #------------------------------------------------------------------------------# > /etc/init.d/ssh restart fertig! ;-) ===== zusätzliche Möglichkeiten ===== man kann dem Benutzer auch Einblick in andere Verzeichnisse geben, wenn man sie per Bind-Mount in sein Home-Verzeichnis rein-mountet: > mkdir /home/fritz/mnt > chown -R fritz:fritz /home/fritz/mnt > mount -o bind /mnt /home/fritz/mnt damit der Bind-Mount bereits beim booten ausgeführt wird, genügt dieser Eintrag in der ///etc/fstab//: > vi /etc/fstab /mnt /home/fritz/mnt none bind 0 0