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
#!/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}/
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!
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