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 sftpusers
anmelden können .sftp
Außerdem möchte ich dieselben Schlüssel verwenden, die auch der CentOS-Benutzer verwendet (der sich sftp
problemlos bei der Konsole anmelden kann). Dazu habe ich den .ssh
Ordner vom CentOS-Benutzer in die Home user1
- Ordner kopiert und den Eigentümer für den Ordner und die Datei auf die Benutzer und user2
geändert .700
.ssh
600
authorized_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_config
werden 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, zuchroot(2)
dem nach der Authentifizierung gewechselt werden soll. Beim Starten der Sitzungsshd(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 pipe
Meine 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
chroot
wirdsshd(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
Richten Sie den Server für Chroot ein
/path/to/shared_folder
(kein%u
):ChrootDirectory /path/to/shared_folder
Bilden Sie dort die entsprechende Verzeichnisstruktur ab (
/path/to/shared_folder/home/user1
usw.).- Erfüllen Sie die Bedingung für
path
,to
undshared_folder
. - Machen Sie Eigentumsrechte und Berechtigungen zu
home
dem, was sie für den regulären sind/home
. - Legen Sie die Eigentumsverhältnisse und Berechtigungen für die Verzeichnisse darin
home
genauso fest wie für die Verzeichnisse in/home
.
Mit diesem Setup
sftp
wird es nach der Authentifizierung automatisch eingefügtuser1
,/path/to/shared_folder/home/user1
aber sie werden es als/home/user1
fällig ansehenchroot
.Verwenden benutzerdefinierter Verzeichnisse in einem gemeinsamen Chroot-Verzeichnis.
Mit
ForceCommand internal-sftp
können Sie das Startverzeichnis angeben (internal-sftp
unterstützt die gleichen Optionen wiesftp-server
). So was:ChrootDirectory /path/to/shared_folder ForceCommand internal-sftp -d /home/%u
um sicherzustellen, dass
sftp
Benutzer 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
home
um Pfade zu vereinfachen und dies in der Mitte loszuwerden . Auf diese Weiseuser1
sehen Sie, dass sie sich/user1
nach der Anmeldung mit befindensftp
. In diesem Fallshared_folder
sollten sie direkt Benutzerordner enthalten (nichthome
).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
chmod
seine Dateien (sftp
Unterstützungenchmod
) gewähren oder verweigern.Sie haben
%u
mit verwendetChrootDirectory
, 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
%u
Erweiterung) 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/%u
mitForceCommand internal-sftp -d /home/%u
; - erzwingen
/%u
mitForceCommand 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_folder
erzwingen möchten , lautet der relevante Pfad:/home/user1
user1
/path/to/shared_folder/user1/home/user1
wobei
path
,to
,shared_folder
und (das erste)user1
die Bedingung erfüllen,home
simuliert/home
und (das zweite)user1
vom Benutzer beschreibbar ist.
Es sind auch flexiblere Ansätze möglich. Sie können beispielsweise ein gemeinsames Chroot-Verzeichnis für user1
und 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 pwd
sollte sftp
er etwas wie sehen . Andere Möglichkeiten ( , ) /home/user1
finde ich etwas überraschend./user1
/files