it-swarm.com.de

Wie richte ich einen SFTP-Server mit Benutzern ein, die in ihren Home-Verzeichnissen gelistet sind?

Ich habe versucht, einen SFTP-Server einzurichten, auf dem mehrere Benutzer in ihre Home-Verzeichnisse chrooten. Ich folgte dem Rat auf diese Anleitung ( Archive.org Link ) und führte dann die folgenden Befehle in den Verzeichnissen des Benutzers aus

chown root:root /home/user/
chmod 755 /home/user/

In jedem Benutzerverzeichnis befindet sich ein zusätzlicher Ordner mit dem Namen public, dessen Eigentümer der Benutzer ist, damit er nach Bedarf Verzeichnisse erstellen und Dateien hochladen und entfernen kann. (Dies wurde in der zuvor erwähnten Anleitung empfohlen.)

Wenn ich jetzt sftp -P 435 [email protected] ausführe, erhalte ich folgende Fehlermeldung:

Schreiben fehlgeschlagen: Pipe defekt
Paket konnte nicht gelesen werden: Verbindung von Peer zurückgesetzt

Wie gehe ich von hier aus vor? Die ultimative Idee ist, dass jeder Benutzer auf einem anderen Computer FileZilla verwendet, um sich in seinen chroot-Ausgangsverzeichnissen anzumelden und dann Verzeichnisse und Dateien hochladen kann. All dies in SFTP (weil es sicherer ist)

23
Nitin Venkatesh

In diesem Artikel wird auch beschrieben, wie Sie einen Chroot-Shell-Zugriff erhalten. Da Sie jedoch nur ein SFTP-Konto benötigen, befolgen Sie einfach die folgenden Anweisungen:

Bearbeiten Sie /etc/ssh/sshd_config und fügen Sie die Zeilen hinzu:

SubSystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

Suchen Sie die Zeile UsePAM yes und kommentieren Sie sie:

#UsePAM yes

Ohne diese Deaktivierung würde mein SSH-Server beim Neuladen/Neustarten abstürzen. Da ich keine ausgefallenen Funktionen von PAM benötige, ist dies in Ordnung.

Beschränken Sie für zusätzliche Sicherheit die Benutzer, die sich anmelden können. Wenn Sie vergessen, SFTP-Benutzer zur Gruppe sftp hinzuzufügen, gewähren Sie ihnen freien Shell-Zugriff. Kein schönes Szenario. Da SSH AllowUsers und AllowGroups nicht kombinieren kann (ein Login muss beide Regeln erfüllen), müssen Sie eine zusätzliche Gruppe erstellen, z. B. ssh-users. Fügen Sie die Benutzer hinzu, die sich über SSH anmelden dürfen (youruser):

Sudo groupadd ssh-users
Sudo gpasswd -a youruser ssh-users

Und füge die nächste Zeile zu /etc/ssh/sshd_config hinzu:

AllowGroups ssh-users sftp

Ändern Sie nun die Berechtigungen des Basisverzeichnisses des Benutzers, um das Chrooten zu ermöglichen (Beispiel: Benutzer sftp-user):

Sudo chown root:sftp-user /home/sftp-user
Sudo chmod 750 /home/sftp-user

Erstellen Sie ein Verzeichnis, in das sftp-user beliebige Dateien ablegen kann:

Sudo mkdir /home/sftp-user/public
Sudo chown sftp-user: /home/sftp-user/public
Sudo chmod 750 /home/sftp-user/public

Wenn Sie auf Probleme stoßen, überprüfen Sie /var/log/syslog und /var/log/auth.log auf Einzelheiten. Führen Sie ssh oder sftp mit der Option -vvv zum Debuggen von Nachrichten aus. Für sftp muss die Option wie in sftp -vvv [email protected] vor dem Host angezeigt werden.

25
Lekensteyn

Ich wollte nur hinzufügen, dass die Ordnerberechtigungen im Verzeichnisbaum auf eine bestimmte Weise festgelegt werden müssen.

die strengen Eigentums-/Berechtigungsanforderungen von sshd schreiben vor, dass jedes Verzeichnis im chroot-Pfad Eigentum von root und nur vom Eigentümer beschreibbar sein muss.

Quelle

Ich hatte einen sehr ähnlichen Fehler, und das Reparieren meiner Verzeichnisberechtigungen hat das Problem für mich behoben.

12
Nathan Jones

Ich benutze Ubuntu LTS 12.04 und nach vielen Schmerzen funktionierte dies für mich.

Meine Einstellungen für /etc/ssh/sshd_config

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
UsePAM yes
Match group sftp
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  1. erstelle eine Gruppe sftp:

    groupadd sftp

  2. Erstellen Sie den Benutzer direkt mit der neuen angehängten SFTP-Gruppe:

    Sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false

  3. festlegen der Berechtigungen für die Verwendung mit ssh für sftp:

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. dienst neu starten:

    service ssh restart

Beachten Sie, dass dem Basisordner für den neuen SFTP-Benutzer der Root-Besitzer zugewiesen werden muss.

9
Aten

Hier ist eine Schritt-für-Schritt-Anleitung, um Folgendes zu ermöglichen:

  1. SFTP-Zugriff auf/home/bob/uploads für Benutzer bob
  2. Lock Bob aus SSH
  3. Verwenden Sie Benutzernamen/Passwörter anstelle von Schlüsseln:

Bearbeiten Sie zuerst Ihre Datei/etc/ssh/sshd_config:

Sudo nano /etc/ssh/sshd

Scrolle runter und ändere:

PasswordAuthentication yes

und füge dies unten hinzu:

Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no  

Drücken Sie Strg-X, um den Vorgang zu beenden und zu speichern.

Fügen Sie nun den Benutzer hinzu:

Sudo useradd bob
Sudo passwd bob

Fügen Sie nun die Gruppen hinzu und deaktivieren Sie ssh:

Sudo groupadd sftpusers
Sudo usermod  -g sftpusers bob
Sudo usermod -s /usr/bin/rssh bob
Sudo usermod -d /home/bob bob

Legen Sie nun die Berechtigungen fest:

Sudo chown root:root /home/bob/
Sudo chmod 755 /home/bob/
Sudo mkdir /home/bob/uploads
Sudo chown bob /home/bob/uploads

Sudo service sshd restart

All dies ist, während Sie als Root-Benutzer angemeldet sind (ec2-Benutzer unter Amazon Linux AMIs).

3
Rob Mulder

Beachten Sie beim Hinzufügen der Match-Direktive zur Konfigurationsdatei auch, dass alle Direktiven, die nicht für Ihre Übereinstimmung relevant sind, möglicherweise nicht mehr funktionieren. Anstatt alles auskommentieren, was nicht kompatibel ist, verschieben Sie einfach alle Abschnitte, die eine Match-Direktive enthalten, an das Ende der Konfigurationsdatei.

Darüber hinaus müssen die Berechtigungen für das chroot-Verzeichnis und alle übergeordneten Verzeichnisse wahrscheinlich auf 755 und für den Besitzer auf root: root festgelegt werden. Persönlich habe ich das chroot-Verzeichnis sshd_config auf% h eingestellt, das Ausgangsverzeichnis des Benutzers, und dann dessen Ausgangsverzeichnis auf die von mir gewünschte Position festgelegt, z. B. /var/www/examplewebsite.com. Einige mögen es vorziehen, ein Chroot-Ausgangsverzeichnis mit einem statischen Teil gefolgt von dem Benutzernamen zu konfigurieren, wie z. B./var/www /% u. Dies erfordert jedoch natürlich, dass das Chroot-Verzeichnis Ihres Benutzers mit seinem Benutzernamen übereinstimmt.

Beenden Sie zur Behebung von Verbindungsproblemen den ssh-Dienst, und öffnen Sie zunächst eine oder zwei SSH-Sitzungen zum Testen. Starten Sie anschließend den Dämon interaktiv im Debug-Modus, um die Debug-Informationen für die Verbindung zu überprüfen. Auf diese Weise können Sie Probleme identifizieren und suchen wie man sie repariert.

Befehle: service ssh stop;/usr/sbin/sshd -d

Stellen Sie sicher, dass Sie ssh erneut starten, nachdem Sie fertig sind! Befehl: service ssh start

0
RedScourge