weidner/computer/sysadmin/

SFTP mit Chroot und ohne Shell

Manchmal braucht es nur ein wenig Plattenplatz mit geeignetem Zugang um Dateien auszutauschen, ohne diese gleich auf fremden Servern abzulegen. Dann kann ein SFTP-Zugang auf einem ohnehin vorhandenen Server im Internet hilfreich sein. Auf adminForge findet sich eine Anleitung, um Chroot-SFTP-Zugänge mit OpenSSH ohne Shell-Zugang anzulegen.

Im Wesentlichen geht es dabei um die folgenden Dinge:

SFTP-Benutzer anlegen

Für den dritten Schritt habe ich ein Skript geschrieben, das als Option den Namen des SFTP-Benutzers bekommt und diesen anlegt, wenn es noch keinen Benutzer diesen Namens gibt:

#!/bin/sh
#
# create an SFTP only user
#
# requires group sftp
# requires in file /etc/ssh/sshd_config:
#
#   Subsystem sftp internal-sftp
# 
#   Match Group sftp
#        ChrootDirectory %h
#        ForceCommand internal-sftp
#        AllowTcpForwarding no

if [ 1 -gt $# ]; then
    echo "Usage: $0 username"
    exit 1
fi

SFTPUSER=$1

if getent passwd $SFTPUSER > /dev/null; then
    echo "User (${SFTPUSER}) already exists!"
    exit 2
fi

adduser --shell /bin/false --no-create-home $SFTPUSER
adduser $SFTPUSER sftp
mkdir -p /home/${SFTPUSER}/upload
chown ${SFTPUSER}: /home/${SFTPUSER}/upload
Posted 2018-11-21
Tags: