Teilen Sie den öffentlichen SSH-Schlüssel in der SFTP-Konfiguration

Teilen Sie den öffentlichen SSH-Schlüssel in der SFTP-Konfiguration

Ich habe einen SFTP-Server auf CentOS konfiguriert,dieses Dokumentuser1. Meine Absicht ist es, den Konsolen-Login für die neuen Benutzer ( , ) zu verbieten user2, die zur Gruppe gehören , sich aber weiterhin bei ihren jeweiligen Ordnern sftpusersanmelden können .sftp

Außerdem möchte ich dieselben Schlüssel verwenden, die auch der CentOS-Benutzer verwendet (der sich sftpproblemlos bei der Konsole anmelden kann). Dazu habe ich den .sshOrdner vom CentOS-Benutzer in die Home user1- Ordner kopiert und den Eigentümer für den Ordner und die Datei auf die Benutzer und user2geändert .700.ssh600authorized_keys

Trotzdem erhalte ich weiterhin die Meldung Server refused our key. Der vom CentOS-Benutzer verwendete Schlüssel ist wie ein Hauptschlüssel auf allen Servern. Deshalb möchte ich diesen Schlüssel für die neuen Benutzer wiederverwenden.

Wie kann ich diese Konfiguration erreichen?

AKTUALISIEREN

Nachdem für jeden Benutzer Schlüssel generiert wurden, können beide Benutzer mit ihren privaten Schlüsseln remote auf den Server zugreifen. Wenn ich jedoch die folgende Konfiguration aktiviere, /etc/ssh/sshd_configwerden die Berechtigungen mit dem Befehl verweigert sftp.

SSHD-Konfiguration

Match Group sftpusers #Or you could replace Group with User and specify a different configuration for each user
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /path/to/shared_folder/%u # %h the path to upload the files
ForceCommand internal-sftp

Nachricht von der Shell

packet_write_wait: Connection to IPSERVER port 22: Broken pipe
Couldn't read packet: Connection reset by peer

Antwort1

Das Update führt zu einem anderen Problem als die ursprüngliche Frage. Es sieht so aus, als ob das ursprüngliche Problem kein Problem mehr ist. Ich behebe das Update.

DerHandbuchlautet:

ChrootDirectory
Gibt den Pfadnamen eines Verzeichnisses an, zu chroot(2)dem nach der Authentifizierung gewechselt werden soll. Beim Starten der Sitzung sshd(8)wird überprüft, dass alle Komponenten des Pfadnamens root-eigene Verzeichnisse sind, die von keinem anderen Benutzer oder keiner anderen Gruppe beschreibbar sind.

Broken pipeMeine Tests haben ergeben, dass, wenn diese Bedingung nicht erfüllt ist, beim Versuch, sich mit anzumelden, die Fehlermeldung angezeigt wird sftp.

In Ihrem Fall ist der Pfadname /path/to/shared_folder/%u. Hinweis %u(nach der Erweiterung) istAucheine Komponente; daher sollte es „root-eigen und von keinem anderen Benutzer oder keiner anderen Gruppe beschreibbar“ sein. Sie sollten den Besitz und die Berechtigungen korrigieren. Dann kann der Benutzer natürlich nicht in das Verzeichnis schreiben. Egal welchen Pfadnamen Sie mit verwenden ChrootDirectory, der Benutzer kann nicht darin schreiben (es sei denn, der Benutzer ist root). Mit anderen Worten, der Benutzer kann in der Chroot-Umgebung nicht darin schreiben /. Um das Schreiben zu ermöglichen, benötigen Sie ein Unterverzeichnis. Es gibt einige Möglichkeiten, damit umzugehen.

  • Verwenden von Home-Verzeichnissen in einem gemeinsamen Chroot-Verzeichnis.

    Im Handbuch steht außerdem:

    Nach dem chrootwird sshd(8)das Arbeitsverzeichnis in das Home-Verzeichnis des Benutzers geändert.

    Ich gehe davon aus, dass Home-Verzeichnisse standardmäßig wie /home/user1, usw. aussehen. Dies legt das folgende Szenario nahe:/home/user2

    1. Richten Sie den Server für Chroot ein /path/to/shared_folder(kein %u):

      ChrootDirectory /path/to/shared_folder
      
    2. Bilden Sie dort die entsprechende Verzeichnisstruktur ab ( /path/to/shared_folder/home/user1usw.).

    3. Erfüllen Sie die Bedingung für path, tound shared_folder.
    4. Machen Sie Eigentumsrechte und Berechtigungen zu homedem, was sie für den regulären sind /home.
    5. Legen Sie die Eigentumsverhältnisse und Berechtigungen für die Verzeichnisse darin homegenauso fest wie für die Verzeichnisse in /home.

    Mit diesem Setup sftpwird es nach der Authentifizierung automatisch eingefügt user1, /path/to/shared_folder/home/user1aber sie werden es als /home/user1fällig ansehen chroot.

  • Verwenden benutzerdefinierter Verzeichnisse in einem gemeinsamen Chroot-Verzeichnis.

    Mit ForceCommand internal-sftpkönnen Sie das Startverzeichnis angeben ( internal-sftpunterstützt die gleichen Optionen wiesftp-server). So was:

    ChrootDirectory /path/to/shared_folder
    ForceCommand internal-sftp -d /home/%u
    

    um sicherzustellen, dass sftpBenutzer unabhängig von ihren formellen Home-Verzeichnissen im Betriebssystem verwenden /path/to/shared_folder/home/…. Oder so:

    ChrootDirectory /path/to/shared_folder
    ForceCommand internal-sftp -d /%u
    

    homeum Pfade zu vereinfachen und dies in der Mitte loszuwerden . Auf diese Weise user1sehen Sie, dass sie sich /user1nach der Anmeldung mit befinden sftp. In diesem Fall shared_foldersollten sie direkt Benutzerordner enthalten (nicht home).

  • Verwenden Sie mindestens ein Unterverzeichnis in einem benutzerspezifischen Chroot-Verzeichnis.

    Die oben genannten Lösungen ermöglichen es Benutzern, die Verzeichnisse anderer Benutzer zu durchsuchen. Ein Benutzer kann den Zugriff auf chmodseine Dateien ( sftpUnterstützungen chmod) gewähren oder verweigern.

    Sie haben %umit verwendet ChrootDirectory, daher möchten Sie höchstwahrscheinlich separate Chroot-Verzeichnisse erstellen. Gehen Sie in diesem Fall wie folgt vor:

    ChrootDirectory /path/to/shared_folder/%u
    

    und legen Sie den Besitz und die Berechtigungen jeder Komponente (einschließlich der %uErweiterung) fest, um die Bedingung zu erfüllen. Sofern es sich nicht um schreibgeschützten Zugriff handelt, benötigen Sie mindestens ein Unterverzeichnis, das vom Benutzer beschreibbar ist. Einige Möglichkeiten:

    • Replizieren des Pfads zum Home-Verzeichnis des Benutzers, wie im Betriebssystem definiert;
    • erzwingen /home/%umit ForceCommand internal-sftp -d /home/%u;
    • erzwingen /%umit ForceCommand internal-sftp -d /%u;
    • mit einem festen Unterverzeichnisnamen, zB ForceCommand internal-sftp -d /files.

    In jedem Fall müssen Sie die Verzeichnisstruktur darin vorbereiten . Wenn Sie beispielsweise für /path/to/shared_foldererzwingen möchten , lautet der relevante Pfad:/home/user1user1

    /path/to/shared_folder/user1/home/user1
    

    wobei path, to, shared_folderund (das erste) user1die Bedingung erfüllen, homesimuliert /homeund (das zweite) user1vom Benutzer beschreibbar ist.

Es sind auch flexiblere Ansätze möglich. Sie können beispielsweise ein gemeinsames Chroot-Verzeichnis für user1und haben user2, aber ein anderes für user3.

Ob Chroot-Verzeichnis üblich ist oder nicht, ich persönlich würde die Unterverzeichnisse so anlegen, dass sie möglichst wenig überraschen, sodass jeder Benutzer in einem Verzeichnis landet, das er erwartet. Nach der Eingabe pwdsollte sftper etwas wie sehen . Andere Möglichkeiten ( , ) /home/user1finde ich etwas überraschend./user1/files

verwandte Informationen