Skip to main content

SFTP Server mit Chroot und Usermapping (www-data)

Diese Anleitung wurde zuletzt mit Debian Stretch getestet. Der standard openssh-Dämon kann SFTP zwar schon länger. Chroot ist dabei ein ziemlich nervig einzurichten. Ein Mapping auf einen anderen Benutzer ist damit auch nicht möglich (das ist vor allem beim Zugriff auf /var/www nützlich, wo z.B. der SFTP-Benutzer ein anderer ist, als der mit dem der Webserver läuft).

Mit MySecureShell läßt sich das aber alles sehr bequem erledigen. Die Installation erfolgt einfach über: apt-get install mysecureshell

Danach wird die Konfigurationsdatei angepasst:

/etc/ssh/sftp_config
## MySecureShell Configuration File ##
# To get more informations on all possible options, please look at the doc:
# http://mysecureshell.readthedocs.org

#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	5	#max connection for the account
	LimitConnectionByIP	5	#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		5m	#(in second) deconnect client is idle too long time
	ResolveIP		true	#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
</Default>

<User sftp-www1>
	Home			/var/www
	ForceUser		www-data
	ForceGroup		www-data
</User>

Das mysecureshell Binary braucht noch das suid-Bit, um das Usermapping verwenden zu können: chmod 4755 /usr/bin/mysecureshell

Der User sftp-www1 wird dann wie folgt angelegt: useradd -G www-data -s /usr/bin/mysecureshell sftp-www1

Der User bekommt nun entweder einen SSH-Key in sein Home gelegt (/home/sftp-www, nicht /var/www) oder ein Passwort gesetzt und ist nach dem Einloggen in /var/www gebunden. Dateien, die der Benutzer hochlädt, werden dem Benutzer www-data zugeordnet.