Linux - Netzwerk und Serveradminstration SFTP: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
  
 
== Vorbereitungen ==
 
== Vorbereitungen ==
* VirtualBox Server-Vorlage mit neuen MAC-Adressen klonen
 
* Der Host soll im ''DMZ''-Netzwerk liegen
 
* IP-Adresse herausfinden über das DHCP-Log oder die Konsole
 
* statische IP-Adresse nach dem Netzwerkplan setzen
 
* Hostname ändern
 
* DNS-Eintrag vornehmen
 
* SSH-Server anpassen
 
 
=== DATEN ===
 
=== DATEN ===
 
 
{| class="wikitable" style="background-color: #f2f2f2;"
 
{| class="wikitable" style="background-color: #f2f2f2;"
 
! Parameter !! Wert !! Erläuterung
 
! Parameter !! Wert !! Erläuterung
 
|-
 
|-
| '''Netzwerk (NIC)''' || SERVER|| Interface-Zuweisung in VirtualBox
+
| Netzwerk (NIC) || DMZ|| Interface-Zuweisung
 
|-
 
|-
| '''IP''' || 10.88.2XX.3 || Statische IP
+
| IP || 10.88.2XX.3 || Statische IP
 
|-
 
|-
| '''CIDR''' || 24 || Classless Inter-Domain Routing Präfixlänge
+
| CIDR || 24 || Netzmaske
 
|-
 
|-
| '''GW''' || 10.88.2XX.1 || GATEWAY
+
| GW || 10.88.2XX.1 || Gateway
 
|-
 
|-
| '''NS''' || 10.88.2XX.21 || Resolver
+
| NS || 10.88.2XX.21 || DNS-Server
 
|-
 
|-
| '''FQDN''' || sftp.it2XX.int || Fully Qualified Domain Name
+
| FQDN || sftp.it2XX.int || Vollständiger Name
 
|-
 
|-
| '''SHORT''' || sftp || Short Name
+
| SHORT || sftp || Kurzname
 
|-
 
|-
| '''DOM''' || it2XX.int|| Domain Name
+
| DOM || it2XX.int || Domain
 
|}
 
|}
;Anpassen des Templates
+
 
 
*[[Anpassen des Debian Templates]]
 
*[[Anpassen des Debian Templates]]
  
== sichere Datenübertragung ==
+
== Sichere Datenübertragung ==
* SFTP benutzt das SSH-Protokoll, um die Daten zu verschlüsseln
+
*SFTP nutzt SSH zur Verschlüsselung
* Daher muss nur die [[SFTP-Server|Konfiguration des SSH-Servers]] angepasst werden
+
*kein zusätzlicher Dienst notwendig
* andere FTP-Arten sollten nicht mehr benutzt werden (FTP, TFTP, ...)
+
*FTP/TFTP sind unsicher und werden nicht verwendet
* Ein SFTP-Zugang für einen Gast-User soll unter ''/srv/sftp/gast'' angelegt werden
+
*Zugriff erfolgt ausschließlich über SSH-Port 22
*[[ssh jump-host]]
+
 
==SFTP Umsetzung==
+
== Ziel ==
[[Kategorie:SFTP]]
+
*Gast-Zugang unter /srv/sftp/gast
[[Kategorie:SSH]]
+
*kein Shell-Zugriff
= Benutzer und Heimatverzeichnis anlegen =
+
*Zugriff nur auf eigenes Verzeichnis
*'''mkdir -pv ''/srv/sftp/'' '''
+
 
*'''groupadd sftponly'''
+
== Benutzer und Verzeichnis ==
*'''useradd -G sftponly -d ''/srv/sftp/gast'' -s /bin/false gast'''
+
*sudo mkdir -p /srv/sftp/gast/ablage
*'''mkdir -p ''/srv/sftp/gast/ablage'' '''
+
*sudo groupadd sftponly
*'''chown gast:gast ''/srv/sftp/gast/ablage'' '''
+
*sudo useradd -G sftponly -d /srv/sftp/gast -s /usr/sbin/nologin gast
*'''passwd gast'''
+
*sudo passwd gast
 +
 
 +
;WICHTIG
 +
*Chroot-Verzeichnis muss root gehören
 +
 
 +
*sudo chown root:root /srv/sftp/gast
 +
*sudo chmod 755 /srv/sftp/gast
 +
 
 +
*sudo chown gast:gast /srv/sftp/gast/ablage
 +
 
 +
;Erklärung
 +
*/srv/sftp/gast → gehört root (Pflicht für Chroot)
 +
*/ablage → gehört Benutzer (dort darf geschrieben werden)
 +
 
 +
== SSH Server Konfiguration ==
 +
*sudo nano /etc/ssh/sshd_config
 +
 
 +
<pre>
 +
Subsystem sftp internal-sftp
 +
 
 +
Match Group sftponly
 +
    ChrootDirectory /srv/sftp/%u
 +
    ForceCommand internal-sftp
 +
    PasswordAuthentication yes
 +
    AllowTcpForwarding no
 +
</pre>
 +
 
 +
*sudo systemctl restart ssh
  
= SSH Server Konfiguration =
+
;Erklärung
* relativ weit unten in der Standardkonfiguration von SSH wird SFTP als Subsystem aktiviert
+
*internal-sftp → kein externes Binary notwendig
* Dort können wir unsere Konfiguration anhängen
+
*ChrootDirectory → User sieht nur sein eigenes Verzeichnis
* '''vim ''/etc/ssh/sshd_config'' '''
+
*ForceCommand → erzwingt SFTP (kein SSH-Shell)
 +
*AllowTcpForwarding no → verhindert Tunnel
  
...
+
== Test ==
Subsystem sftp /usr/lib/openssh/sftp-server
+
*sftp gast@SERVER-IP
UsePAM yes
 
Match Group sftponly
 
ChrootDirectory /srv/sftp/%u
 
ForceCommand internal-sftp
 
PasswordAuthentication yes
 
AllowTcpForwarding no
 
...
 
  
= Angemeldete Benutzer anzeigen =
+
== Angemeldete Benutzer anzeigen ==
 +
*ps -ef | grep '[s]shd:.*@notty' | grep -v ^root
  
* '''ps -ef | grep '[s]shd:.*@notty' | grep -v ^root'''
+
;Erklärung
* ''notty'', da SFTP-Benutzer kein Terminal haben wie per SSH angemeldete Benutzer
+
*notty → kein Terminal → reiner SFTP-Zugang
  
=Links=
+
== Links ==
 
*[http://en.wikibooks.org/wiki/OpenSSH/Cookbook/SFTP#Chrooted_SFTP_to_Shared_Directories SFTP]
 
*[http://en.wikibooks.org/wiki/OpenSSH/Cookbook/SFTP#Chrooted_SFTP_to_Shared_Directories SFTP]

Aktuelle Version vom 1. April 2026, 13:28 Uhr

SFTP Server

Vorbereitungen

DATEN

Parameter Wert Erläuterung
Netzwerk (NIC) DMZ Interface-Zuweisung
IP 10.88.2XX.3 Statische IP
CIDR 24 Netzmaske
GW 10.88.2XX.1 Gateway
NS 10.88.2XX.21 DNS-Server
FQDN sftp.it2XX.int Vollständiger Name
SHORT sftp Kurzname
DOM it2XX.int Domain

Sichere Datenübertragung

  • SFTP nutzt SSH zur Verschlüsselung
  • kein zusätzlicher Dienst notwendig
  • FTP/TFTP sind unsicher und werden nicht verwendet
  • Zugriff erfolgt ausschließlich über SSH-Port 22

Ziel

  • Gast-Zugang unter /srv/sftp/gast
  • kein Shell-Zugriff
  • Zugriff nur auf eigenes Verzeichnis

Benutzer und Verzeichnis

  • sudo mkdir -p /srv/sftp/gast/ablage
  • sudo groupadd sftponly
  • sudo useradd -G sftponly -d /srv/sftp/gast -s /usr/sbin/nologin gast
  • sudo passwd gast
WICHTIG
  • Chroot-Verzeichnis muss root gehören
  • sudo chown root:root /srv/sftp/gast
  • sudo chmod 755 /srv/sftp/gast
  • sudo chown gast:gast /srv/sftp/gast/ablage
Erklärung
  • /srv/sftp/gast → gehört root (Pflicht für Chroot)
  • /ablage → gehört Benutzer (dort darf geschrieben werden)

SSH Server Konfiguration

  • sudo nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp
    PasswordAuthentication yes
    AllowTcpForwarding no
  • sudo systemctl restart ssh
Erklärung
  • internal-sftp → kein externes Binary notwendig
  • ChrootDirectory → User sieht nur sein eigenes Verzeichnis
  • ForceCommand → erzwingt SFTP (kein SSH-Shell)
  • AllowTcpForwarding no → verhindert Tunnel

Test

  • sftp gast@SERVER-IP

Angemeldete Benutzer anzeigen

  • ps -ef | grep '[s]shd:.*@notty' | grep -v ^root
Erklärung
  • notty → kein Terminal → reiner SFTP-Zugang

Links