Wie kann ich den openSSH SFTP-Server unter Linux einrichten?

10

Ich möchte den SFTP-Server so konfigurieren, dass er ein Verzeichnis freigibt, weiß aber nicht, wie ich ihn ändern soll /etc/ssh/sshd_config.

Meine Anforderungen sind:

1) Bei der Anmeldung werden keine Zertifikate verwendet, sondern nur das Passwort (dh die Autorisierung verwendet die Passwortmethode).

2) Ich möchte mich mit Benutzer: ftp, Passwort: foo anmelden und Verzeichnis / home / ftp freigeben.

3) Ich habe eine Anwendung, die von Zeit zu Zeit eine Datei vom Server herunterladen muss. Ich muss mich nicht mit einem voll funktionsfähigen Client anmelden.

Bisher habe ich / etc / ssh / sshd_config die folgenden Zeilen hinzugefügt:

Protocol 2
Subsystem sftp /usr/libexec/sftp-server
Match User ftp
   ForceCommand internal-sftp
   ChrootDirectory /home/ftp

Alles andere wird kommentiert.

/home/ftp ist derzeit ein leeres Verzeichnis.

Der Zugriff funktioniert, wenn ich versuche, eine Datei mit Root-Anmeldeinformationen herunterzuladen, aber nicht, wenn ich FTP-Anmeldeinformationen verwende. Muss ich eine Login-Shell einrichten? Muss ich / home / ftp irgendwie füllen?

EDIT: Dies ist mein SSHD-Protokoll:

subsystem request for sftp
debug1: subsystem: exec() internal-sftp
debug1: Forced command (config) 'internal-sftp '
debug2: fd 3 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 8 setting O_NONBLOCK
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 17613
debug1: session_exit_message: session 0 channel 0 pid 17613
debug2: channel 0: request exit-status confirm 0
debug1: session_exit_message: release channel 0
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
debug2: channel 0: read<=0 rfd 9 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: send close
debug2: notify_done: reading
debug3: channel 0: will not send data after close
debug3: channel 0: will not send data after close
User child is on pid 17611
debug3: mm_request_receive entering

* Der Client hängt hier (bis eine Zeitüberschreitung auftritt) *

Bitte beachten Sie erneut, dass die Datei korrekt heruntergeladen wird, wenn ich mich als "root" anmelde. Es wird auch korrekt heruntergeladen, wenn ich die letzten drei Zeilen der Konfigurationsdatei auskommentiere (dh die MatchZeile und die folgenden 2).

Emiliano
quelle
Haben Sie versucht, nur eine der Übereinstimmungsoptionen anzugeben ? Was passiert, wenn Sie einen echten SFTP-Client verwenden? Können Sie weiterhin eine Verbindung mit einem normalen SSH-Client herstellen, z. B. sshoder PuTTY unter Windows? Welche Version von OpenSSH verwenden Sie?
Daniel Beck

Antworten:

7

Sie müssen sicherstellen, dass diese Gruppe /home/ftpgehört rootund dass diese Gruppe und andere keine Schreibberechtigungen haben, z chmod 0755. Sie müssen Unterverzeichnisse ftphinzufügen, um Dateien hinzuzufügen.


Sie benötigen auch das internal-sftpSubsystem, andernfalls müssen Sie eine geeignete chrootUmgebung bereitstellen in /home/ftp:

Subsystem sftp internal-sftp

Geben Sie ein, um alle Anmeldedaten ohne Kennwort zu verbieten

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

Diese sind standardmäßig aktiviert.

Daniel Beck
quelle
Durch das Ersetzen meiner Subsystemzeile durch Ihre (und das Festlegen der Verzeichnisberechtigung) verschwindet meine Fehlerzeichenfolge. Meine Clientprogramme "hängen" jedoch und laden die benötigte Datei nicht herunter (ich kann sie mit Root-Anmeldeinformationen herunterladen). Gibt es eine Möglichkeit, die sshd-Ausgabe ausführlicher zu gestalten?
Emiliano
Versuchen Sie, nacheinander nur ein einziges Konfigurationselement hinzuzufügen, und testen Sie, ob Sie eine Verbindung herstellen können, um festzustellen, welche der Optionen fehlerhaft ist, oder ob es sich möglicherweise um eine Kombination von Optionen handelt. Sie sollten eine Ausgabe haben /var/log/secure, zumindest bekomme ich sie dort auf mein System.
Daniel Beck
Ich habe meine Anmeldeebene mithilfe der LogLevel-Direktive erhöht. Ich kann einen String einlesen /var/log/messages. Ich habe folgendes: Failed none for ftp [...]gefolgt von Accepted password for ftp [...]und User child is on pid 7658. Der Kunde hängt und läuft dann aus
Emiliano
@happy_emi Erwägen Sie, diese Informationen zu Ihrer Frage hinzuzufügen.
Daniel Beck
Es sieht so aus, als wäre es ein Problem mit Verzeichnisberechtigungen. sshd_configwar in Ordnung.
Emiliano