Chrooted SFTP mit MySecureShell auf Debian Etch

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man MySecureShell auf einem Debian Etch System installiert. MySecureShell ist ein SFTP Server, der auf OpenSSH basiert und vielseitig konfiguriert werden kann, z.B. unterstützt es das Chrooten von Benutzern in ihre Homedirs oder begrenzte Upload-/Download Bandbreite. MySecureShell stellt Benutzern SFTP zur Verfügung, die keinen Zugriff auf die Kommandozeile haben, somit müssen diese Benutzer nicht mehr ihr unsicheres FTP Protokoll verwenden.

Diese Anleitung ist ohne jegliche Gewähr! Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ich habe dies auf einem Debian Etch Server mit der IP Adresse 192.168.0.100 und dem vorhandenen Benutzer ashley getestet. Ich werde einen zweiten Benutzer felix anlegen und zeigen, wie beide Benutzer SFTP mit MySecureShell verwenden können.

2 Installation von MySecureShell

MySecureShell hat einige Voraussetzungen, also installieren wir diese zuerst:

apt-get install libssl0.9.7 ssh openssh-server

Danach laden wir MySecureShell runter und installieren es wie folgt:

cd /tmp
wget http://ovh.dl.sourceforge.net/sourceforge/mysecureshell/mysecureshell_0.95_i386.deb
dpkg -i mysecureshell_0.95_i386.deb

(Vergewissere Dich, dass Du die neuste Version von SourceForge runter lädst.)

Das war's schon. MySecureShell ist nun installiert und läuft.

3 Benutzer auf MySecureShell vorbereiten

Bevor Benutzer SFTP mit MySecureShell verwenden können, müssen wir deren Kommandozeile zu /bin/MySecureShell ändern. Für vorhandene Benutzer (z.B. ashley) führen wir dies aus:

usermod -s /bin/MySecureShell ashley

Um mit der /bin/MySecureShell Kommandozeile einen neuen Benutzer (z.B. felix) erstellen zu können, verwende einen Befehl wie diesen:

useradd -m -s /bin/MySecureShell felix

Definiere ein Passwort für den neuen Benutzer wie folgt:

passwd felix

Es gibt noch eine andere Variante, MySecureShell Benutzer zu erstellen, und zwar unter Verwendung der MySecureShell Dienste. Diese Dienste werde ich später beschreiben.

Nun kannst Du einen SFTP Client (wie WinSCP oder Filezilla bei Windows, gFTP bei Linux, Cyberduck bei MacOS; eine Liste von Clients findest Du hier: http://mysecureshell.sourceforge.net/fr/clients.html) öffen und Dich mit dem Server verbinden. Ich verwende hier WinSCP.

Gib den Hostnamen, Benutzernamen und das Passwort ein; die Port number ist 22 (mit SSH); als Protocol kannst Du entweder SFTP oder SFTP (allow SCP fallback) auswählen. Klicke dann auf das Login Feld:


Danach müsstest Du Dich in Deinem Home Verzeichnis finden. Versuche ein Verzeichnis höher zu gehen und Dir sollten die Berechtigungen verweigert werden, was bedeutet, dass Du in Deinem Home Verzeichnis gechrooted bist:

4 Konfiguration von MySecureShell

MySecureShell funktioniert mit seiner Standardkonfiguration ganz gut, vielleicht möchtest Du Dir trotzdem die Konfiguration ansehen, um ein paar Dinge zu ändern. Die Konfiguration befindet sich in der Datei /etc/ssh/sftp_config, die sehr gut kommentiert ist, also muss ich dies hier nicht erklären. Du kannst die Upload- und Download Bandbreit, Chroot Benutzer, die maximale Anzahl von Verbindungen etc. festlegen. Außerdem kannst Du all das global oder für bestimmte Benutzergruppen oder basierend auf der IP Adresse des Clients etc. ausführen. MySecureShell ist sehr flexibel. Hier erfährst Du mehr über mögliche Konfigurationen: http://mysecureshell.sourceforge.net/fr/confman.html
Momentan möchte ich nur das Download Bandbreiten-Limit ausschalten, das in der Konfiguration von MySecureShell standardmäßig enthalten ist. Dazu setze ich GlobalDownload und Download auf 0:

vi /etc/ssh/sftp_config


## MySecureShell Configuration File ##
#Default rules for everybody <Default> GlobalDownload 0 #total speed download for all clients # o -> bytes k -> kilo bytes m -> mega bytes GlobalUpload 0 #total speed download for all clients (0 for unlimited) Download 0 #limit speed download for each connection Upload 0 #unlimit speed upload for each connection StayAtHome true #limit client to his home VirtualChroot true #fake a chroot to the home account LimitConnection 10 #max connection for the server sftp LimitConnectionByUser 1 #max connection for the account LimitConnectionByIP 2 #max connection by ip for the account Home /home/$USER #overrite home of the user but if you want you can use # environment variable (ie: Home /home/$USER) IdleTimeOut 300 #(in second) deconnect client is idle too long time ResolveIP true #resolve ip to dns # IgnoreHidden true #treat all hidden files as if they don't exist # DirFakeUser true #Hide real file/directory owner (just change displayed permissions) # DirFakeGroup true #Hide real file/directory group (just change displayed permissions) # DirFakeMode 0400 #Hide real file/directory rights (just change displayed permissions) #Add execution right for directory if read right is set # HideFiles "^(lost+found|public_html)$" #Hide file/directory which match #this extented POSIX regex HideNoAccess true #Hide file/directory which user has no access # MaxOpenFilesForUser 20 #limit user to open x files on same time # MaxWriteFilesForUser 10 #limit user to x upload on same time # MaxReadFilesForUser 10 #limit user to x download on same time DefaultRights 0640 0750 #Set default rights for new file and new directory # PathDenyFilter "^." #deny upload of directory/file which match this extented POSIX regex ShowLinksAsLinks false #show links as their destinations # ConnectionMaxLife 1d #limits connection lifetime to 1 day Charset "ISO-8859-15" #set charset of computer # GMTTime +1 #set GMT Time (change if necessary) </Default> [...]
Nach unseren Änderungen müssen wir MySecureShell neu starten:

/etc/init.d/mysecureshell restart


5 MySecureShell Dienste

MySecureShell stellt einige Dienste bereit, die das Verwalten und die Kontrolle von SFTP Konten und MySecureShell selbst erleichtern.

sftp-who

zeigt die SFTP Benutzer, die momentan verbunden sind:

server1:~# sftp-who
--- 1 / 10 clients ---
Global used bandwith : 0 bytes/s / 0 bytes/s
PID: 2256 Name: felix IP: 192.168.0.24
Home: /home/felix
Status: idle Path: /home/felix
File:
Connected: 2007/09/18 17:24:01 [since 04mins 07s]
Speed: Download: 0 bytes/s [unlimited] Upload: 0 bytes/s [unlimited]
Total: Download: 587 bytes Upload: 89 bytes

Mit sftp-kill kannst Du die Verbindung derzeitig verbundener SFTP Benutzer trennen:

sftp-kill felix


server1:~# sftp-kill felix
Kill felix on PID 2160
No lamer to kill ?
server1:~#

Der Befehl sftp-state zeigt den Status des MySecureShell Servers an:

sftp-state


server1:~# sftp-state
Server is up
server1:~#

Der Befehl sftp-verif überprüft das Vorhandensein und die Berechtigungen verschiedener MySecureShell Dateien. Du solltest ihn einmal ausführen um die Berechtigungen zu ändern:

sftp-verif


server1:~# sftp-verif
#################################################
# MySecureShell Verification Tool #
#################################################

** Verifing file existance **


Verifing file existance of /bin/MySecureShell [ OK ]
Verifing file existance of /usr/bin/sftp-who [ OK ]
Verifing file existance of /usr/bin/sftp-kill [ OK ]
Verifing file existance of /usr/bin/sftp-state [ OK ]
Verifing file existance of /usr/bin/sftp-admin [ OK ]
Verifing file existance of /usr/bin/sftp-verif [ OK ]
Verifing file existance of /etc/ssh/sftp_config [ OK ]

** Verifing rights **


Verifing file rights of /etc/ssh/sftp_config [ OK ]
Verifing file rights of /usr/bin/sftp-who [ OK ]
Verifing file rights of /usr/bin/sftp-verif [ OK ]
Verifing file rights of /usr/bin/sftp-state [ Failed ]
Do you want to repair /usr/bin/sftp-state rights ? (y/n)
<-- y
Verifing file rights of /usr/bin/sftp-kill [ Failed ]
Do you want to repair /usr/bin/sftp-kill rights ? (y/n)
<-- y
Verifing file rights of /usr/bin/sftp-admin [ Failed ]
Do you want to repair /usr/bin/sftp-admin rights ? (y/n)
<-- y
Verifing file rights of /bin/MySecureShell [ Failed ]
Do you want to repair /bin/MySecureShell rights ? (y/n)
<-- y

** Verifing rotation logs **
MySecureShell rotation logs [ OK ]

** Verifing server status **
Verifing server status (ONLINE) [ OK ]

server1:~#

sftp-user list

zeigt alle SFTP-aktivierte Benutzerkonten:

server1:~# sftp-user list
ashley
felix
server1:~#

Mit sftp-user delete kannst Du ein SFTP Benutzerkonto löschen:

sftp-user delete felix

Mit sftp-user create kannst Du ein neues SFTP Benutzerkonto anlegen (inklusive Passwort):

sftp-user create felix


server1:~# sftp-user create felix
Enter password:
server1:~#

6 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: falko