SFTP Server mit User Mapping und Chroot

Abstract

Seit längerem kann der Openssh Server als reiner SFTP Chroot Server dienen. Dies stellt eine wesentliche Verbesserung zur Verwendung des sonst üblichen FTP Protokolls dar. Leider fehlen opennssh aber weitere Einstellmöglichkeiten z.B. ein User Mapping zum Apache User wie es häufig bei Webservern gebraucht wird. Ein elegante Methode solche Probleme zu lösen ist die Software Mysecureshell.

Seit längerem kann der Openssh Server als reiner SFTP Chroot Server dienen. Dies stellt eine wesentliche Verbesserung zur Verwendung des sonst üblichen FTP Protokolls dar. Leider fehlen opennssh aber weitere Einstellmöglichkeiten z.B. ein User Mapping zum Apache User wie es häufig bei Webservern gebraucht wird. Ein elegante Methode solche Probleme zu lösen ist Mysecureshell.

Die Installation von Mysecureshell auf Ubuntu 12.04 precise LTS ist über Apt denkbar einfach. ( siehe website )

Die grundlegende Konfiguration erledigt man in /etc/ssh/sftp_config:

## MySecureShell Configuration File ##
#Default rules for everybody
<Default>
       GlobalDownload          1m      #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                1m      #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   5       #max connection for the account
       LimitConnectionByIP     5       #max connection by ip for the account
       IdleTimeOut             5m      #(in second) deconnect client is idle too long time
       ResolveIP               false   #resolve ip to dns
       IgnoreHidden            false   #treat all hidden files as if they don't exist
       DirFakeUser             false   #Hide real file/directory owner (just change displayed permissions)
       DirFakeGroup            false   #Hide real file/directory group (just change displayed permissions)
       HideNoAccess            false   #Hide file/directory which user has no access
       DefaultRights           0640 0750       #Set default rights for new file and new directory
       MinimumRights           0400 0700       #Set minimum rights for files and dirs
       ShowLinksAsLinks        false   #show links as their destinations
       ConnectionMaxLife       1d      #limits connection lifetime to 1 day
</Default>

<user sftp-www-1>
Home /var/www/web.example.de/htdocs
ForceUser www-data
ForceGroup www-data
</ User>

Den user sftp-www-1 legt man danach mit useradd sftp-www-1 an und ändert dessen home und shell in der /etc/passwd.

...
sftp-www-1:x:1005:1006::/var/www/web.example.de/htdocs:/bin/MySecureShell
...

Ausserdem ist es sinnvoll diesen user der Gruppe www-data hinzuzufügen:

...
www-data:x:33:sftp-www-1
...

Nutzt man den OpenSSH-Server mit PAM und einer Allow liste sollte in /etc/ssh/sshd_config die Option AllowUsers gesetzt sein, ausserdem sollte man den ssh server danach reloaden/restarten:

...
AllowUsers ... sftp-www-1
...

Nach einem /etc/init.d/mysecureshell stop/start sollte nun alle erledigt sein. Der user sftp-www-1 kann sich nur per SFTP einloggen ist chrooted und Dateien und/oder Verzeichnisse an denen er arbeitet gehören dem Apache User www-data mit Gruppe www-data.

Robert Schetterer, 30. April 2013