SSH und SFTP

Aus Xinux Wiki
Version vom 30. Juli 2026, 07:45 Uhr von Thomas.will (Diskussion | Beiträge) (→‎Firewall (nftables))
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

SSH mit getrennten Zugängen: Port 22 (SSH) und Port 8472 (SFTP-only)

Diese Anleitung richtet auf it2XX zwei getrennte SSH-Zugänge auf demselben Host ein:

  • Port 22 – regulärer SSH-Login für andere Benutzer des Systems
  • Port 8472 – ausschließlich SFTP, kein Login möglich, gebunden an die Gruppe sftp-only

Benutzer martha und leroy werden der Gruppe sftp-only zugeordnet und nutzen ausschließlich Port 8472. Auf Port 22 haben sie keinen Zugriff.

Gruppe und Benutzer anlegen

Gruppe für SFTP-only-Zugänge erstellen
  • groupadd sftp-only
    
Benutzer martha und leroy anlegen und der Gruppe zuweisen
  • useradd -m -g sftp-only -s /usr/sbin/nologin martha
    
  • useradd -m -g sftp-only -s /usr/sbin/nologin leroy
    
  • passwd martha
    
  • passwd leroy
    

Die Login-Shell /usr/sbin/nologin ist ein zusätzlicher Schutzwall: Selbst wenn martha oder leroy versuchen sollten, sich über Port 22 einzuloggen, scheitert das bereits daran. Der eigentliche Mechanismus, der SFTP-only auf Port 8472 erzwingt, ist aber ForceCommand in der sshd-Konfiguration.

Verzeichnisstruktur für Chroot

Für ChrootDirectory muss das Home-Verzeichnis root:root gehören und darf nicht gruppen-/world-writable sein. Ein beschreibbares Unterverzeichnis wird für die eigentlichen Dateien angelegt.

Chroot-Basis vorbereiten
  • chown root:root /home/martha /home/leroy
    
  • chmod 755 /home/martha /home/leroy
    
Beschreibbares Upload-Verzeichnis anlegen
  • mkdir -p /home/martha/upload /home/leroy/upload
    
  • chown martha:sftp-only /home/martha/upload
    
  • chown leroy:sftp-only /home/leroy/upload
    

sshd_config anpassen

Port 22 = normaler SSH-Login für andere User, Port 8472 = ausschließlich SFTP für martha/leroy, niemals Login
# /etc/ssh/sshd_config

Port 22
Port 8472

Match LocalPort 8472
    ForceCommand internal-sftp
    PermitTTY no
    X11Forwarding no
    AllowTcpForwarding no
    AllowAgentForwarding no
    PermitTunnel no
    ChrootDirectory %h

martha und leroy verbinden sich ausschließlich über Port 8472. Dort bekommt jeder Client ausnahmslos internal-sftp vorgesetzt — PermitTTY no verhindert zusätzlich jede Terminal-Zuweisung. Ein Login ist auf Port 8472 technisch nicht möglich, egal welcher Befehl übergeben wird. Auf Port 22 haben martha und leroy keinen Zugriff — dieser Port ist ausschließlich für andere Benutzer des Systems bestimmt.

sshd neu laden
  • sshd -t
    
  • systemctl reload sshd
    

sshd -t prüft die Syntax, bevor der Dienst tatsächlich neu geladen wird – bei einem Fehler in der Config sonst riskant, da das laufende System sich sofort selbst aussperren kann.

Funktionstest

Von einem Client aus prüfen, dass Port 8472 keinen Login zulässt
  • ssh -p 8472 martha@it2XX
    
  • sftp -P 8472 martha@it2XX
    

Der erste Befehl muss fehlschlagen bzw. sofort trennen, der zweite muss funktionieren. Selbst ein expliziter Befehl wie ssh -p 8472 martha@it2XX whoami darf keine Ausgabe liefern, da ForceCommand jeden übergebenen Befehl ignoriert und stattdessen ausnahmslos internal-sftp startet.

Zur Kontrolle
martha darf sich auch auf Port 22 nicht einloggen können
  • ssh -p 22 martha@it2XX
    

Zusammenfassung

Port Zweck Login für martha/leroy?
22 Regulärer SSH-Zugang (andere User) Nein
8472 SFTP-only Nein — ausschließlich Dateiübertragung