alix apu asa auswahl backup bewegung bom buecher c cfengine checklisten cisco computernetz debian dvcs ebtables email epub fairphone2 fedora firewall fossilscm gns3 grep hardware i2c iproute ipsec iptables ipv6 kalender kpartx latex laufen lighttpd linux lua lur monotone mount mysql openvpn openwrt pac paketfilter perl postfix programmieren projekt proxy pxelinux python qubes-os rezension rfc rpm rs232 schreiben script seriell sftp shell software stehen sysadmin syslog systemd troubleshoot ubuntu uci vcs virtualbox virtuell vpn wine xen

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:

  • Man legt einmalig eine Gruppe (hier sftp) für die SFTP-Zugänge mit Chroot an.
  • Ebenfalls einmalig konfiguriert man den OpenSSH-Server, die entsprechenden Benutzer in ein ChrootDirectory einzusperren und nur SFTP zuzulassen.
  • Jeden SFTP-Benutzer fügt man zur Gruppe sftp hinzu, trägt /bin/false als Shell ein und sorgt dafür, dass sein $HOME-Verzeichnis root gehört und nicht von ihm beschrieben werden kann. Unterhalb dieses Verzeichnisses legt man dann noch ein für den Benutzer beschreibbares Verzeichnis an, damit er Dateien hochladen kann.

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:

Mobiler Netzwerksimulator
Posted 2018-08-05
Warum geht Traceroute nicht durch ein VPN?
Posted 2018-06-27
C-Schnipsel: IP-Adressen einlesen und ausgeben
Posted 2018-05-11
Fehlersuche in IPsec VPN: Fragen
Posted 2018-04-26
Rezension: Threat Modeling: Designing for Security
Posted 2018-03-23
Ein Pure-Perl-Modul für PCAP-Dateien
Posted 2018-02-25
Im Trüben fischen in den ASA Logs
Posted 2018-01-22
Half-managed IPsec-VPN ist wie ...
Posted 2017-12-13
Kalender 2018
Posted 2017-12-08