sftp: user mit chroot einsperren

sftp: user mit chroot einsperren


Mir ist kaum ein Linux-Admin bekannt, der sich nicht mit ssh auf seinen Server verbindet. Um schnell mal ein paar Daten hochzuladen wird sftp verwendet. Die neue Option ChrootDirectory des OpenSSH-Servers macht es möglich User dieses Dienstes in ein Verzeichnis einzusperren..

 

Mit der neuen Option ChrootDirectory des OpenSSH-Servers lassen sich User sehr einfach auf in einen Ordner einsperren. Somit kann man Usern die Möglichkeit bieten Daten über eine sichere Verbindung auf den Server zu spielen und erspart sich auch noch die Konfiguration eines FTP-Servers.

Hinweis: Obwohl man die Option ChrootDirectory schon in den Man-Pages der Version 4.7p1 des OpenSSH-Servers findet, funktioniert die Option mit dieser Version noch nicht. Lt. Berichten soll ChrootDirectory mit 4.8p1 funktionieren, getestet habe ich es mit der Version 4.9p1 .

Da weder 4.8p1 noch 4.9p1 als fertiges Debian-Paket für amd64 zur Verfügung standen, habe ich mir die Version 4.9p1 geladen:

  1. wget http://openssh.linux-mirror.org/portable/openssh-4.9p1.tar.gz

Zum Kompilieren sind ein paar Pakete notwendig:

 

  1. apt-get install gcc binutils libc6-dev zlib1g-dev

Und nun ein paar Schritte zum kompilieren:

 

  1. tar -xvzf openssh-4.9p1.tar.gz
  2. cd openssh-4.9p1
  3. ./configure
  4. make

Da make install die Dateien nicht in die debian-spezifischen Ordner kopieren würde, kopiere ich die benötigten Dateien manuell:

 

  1. cp ./sshd /usr/sbin/sshd
  2. cp ./sftp /usr/bin/sftp

Nun stelle ich sicher, dass die richtige Config-File genommen wird:

 

  1. # Default settings for openssh-server. This file is sourced by /bin/sh from
  2. # /etc/init.d/ssh.
  3.  
  4. # Options to pass to sshd
  5. SSHD_OPTS='-f /etc/ssh/sshd_config'

In der Config-File ändere ich folgende Zeile:

  1. vi /etc/ssh/sshd_config
  1. Subsystem sftp /usr/lib/openssh/sftp-server

damit der richtige SFTP-Server verwendet wird:

  1. Subsystem sftp internal-sftp

Anschließend bestimme ich eine Gruppe, für welche die Einschränkung gilt (folgende Zeilen an die /etc/ssh/sshd_config anfügen):

  1. Match user www001
  2. ForceCommand internal-sftp
  3. ChrootDirectory /home

Match user www001 habe ich verwendet, da ich nur einen User beim Login automatisch in ein Verzeichnis einschließen will, mit Match group GROUPNAME kann natürlich auch nur eine gesamte Guppe eingeschlossen werden.

Hinweis: /home ist hier das Wurzel-Verzeichnis der chroot-Umgebung. Der User, der in die Umgebung eingeschlossen wird darf hier keine Schreib-Rechte haben, die Rechte sind auf 0755 gesetzt.

Für den User wurde das Verzeichnis /home/www001 vorgesehen, hier hat er natürlich Schreibrechte.

Möchte ich dem User nun auch die Möglichkeit bieten seine Daten via Webserver ins Internet zu stellen, kann ich ihm zum Beispiel einen Ordner /home/www001/public_html erstellen und dieses nach /var/www/www001 mounten:

  1. mount --bind /home/www001/public_html /var/www/www001

Dieser Mount kann nun auch in /etc/fstab fixiert werden:

  1. vi /etc/fstab
  1. /home/www001/public_html /var/www/www001 auto bind 0 0

Wünsche/Anregungen/Kritik bitte an schnere@bveml.net, ich freue mich über jede Nachricht!

Quelle: http://www.debian-administration.org/articles/590

special thanks to pss7

Neuen Kommentar schreiben