OpenSSH sowas wie 'internal-sftp' aber für SCP?

16

Ich führe Debian stable aus und möchte die folgende Umgebung für Benutzer in meiner 'sftponly'-Gruppe einrichten:

  • eingesperrt
  • kann mit SFTP übertragen
  • kann mit SCP übertragen
  • kann mich nicht interaktiv mit SSH anmelden

Aus meinen Experimenten und Recherchen geht hervor, dass mir die folgende Zeilengruppe in sshd_config 90% bringt:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Dies gibt mir eingesperrtes SFTP und kein SSH, was gut ist. Es deaktiviert jedoch auch SCP, was nicht optimal ist, da es sich bei einigen Clients um veraltete, skriptbasierte Prozesse handelt, die SCP anstelle von SFTP (den Server, den wir ersetzen, unterstützen beide Protokolle) verwenden und da diese Clients nicht von uns kontrolliert werden können geändert, ist es wahrscheinlich nicht praktisch, SCP insgesamt zu deaktivieren.

Es ist sinnvoll, dass diese Konfiguration SCP deaktivieren würde, da eingehende SCP-Verbindungen dazu führen, dass sshd als dieser Benutzer einen "scp" -Prozess über die Anmeldeshell des Benutzers erzeugt. Es scheint, dass dies normalerweise auch für SFTP gilt, wenn nicht der spezielle "Internal-SFTP" -Handler verwendet wird.

Ich nehme an, meine Frage lautet: Gibt es eine Möglichkeit, den gleichen Effekt wie bei 'internal-sftp' zu erzielen, jedoch für SCP, ohne auf Tools von Drittanbietern wie scponly und rssh zurückzugreifen? Das wirklich Schöne an 'internal-sftp' ist, dass es nicht erforderlich ist, ein Gefängnis mit Unterstützungsdateien einzurichten oder sich mit potenziell ausnutzbaren setuid-Binärdateien von Drittanbietern zu befassen (insbesondere rssh hat eine Geschichte von Exploits).

brianjcohen
quelle
1
Stellen die Clients eine Verbindung über eine SSH-Schlüsseldatei her oder verwenden sie Kennwörter? Wenn es sich um eine Schlüsseldatei handelt, können Sie ihre Möglichkeiten einschränken.
Jenny D sagt Reinstate Monica
Sie verbinden sich mit Passwörtern.
Brianjcohen

Antworten:

3

Schauen Sie sich rssh an , eine alternative Shell, die den eingeschränkten Zugriff auf ein System ermöglicht.

rssh ist eine eingeschränkte Shell, die einen eingeschränkten Zugriff auf einen Host über ssh (1) ermöglicht, sodass ein Benutzer, dessen Shell für rssh konfiguriert ist, einen oder mehrere der Befehle scp (1), sftp (1) und cvs (1) verwenden kann ), rdist (1) und rsync (1) und nur diese Befehle.

Mit der Datei rssh.conf können Sie konfigurieren, welche Befehle benutzer- oder systemweit verwendet werden können

Alternativ können Sie scponly verwenden , um das zu tun, was Sie wollen. Es fungiert als Wrapper für die ssh-Suite und ermöglicht die Dateiübertragung, jedoch keinen Shell-Zugriff.

user9517 unterstützt GoFundMonica
quelle
2

Müssen Sie dies durch ssh tun?

WENN Sie also versuchen können, ihre Shell auf:

/usr/libexec/openssh/sftp-server

Und stellen Sie sicher, dass Sie die obigen Angaben in / etc / shells einfügen

Wenn Sie sich von der Verwendung integrierter Konten abkoppeln möchten, können Sie proftpd einrichten

Ich richte mit proftpd ein sicheres SFTP ein. proftpd so kompiliert:

./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp

Kann diesen Artikel unten und einige mehr auf Google verwenden, um es einzurichten:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html

coderwhiz
quelle
2

Ich befürchte, dass OpenSSH nicht so einfach oder zuverlässig ist, da es, wie Sie gesehen haben, einen eingebauten SFTP-Server, aber keinen eingebauten SCP-Server gibt.

Eine Warnung: Der Vorschlag von Vince Berk ist aus mehreren Gründen schlecht:

  1. Das Verhalten der Shell in Bezug auf Startdateien kann durch Umgebungsvariablen beeinflusst werden, die SSH abhängig von der Serverkonfiguration remote festlegen kann.
  2. Der Benutzer kann einfach ssh / bin / bash ausführen und eine Shell erhalten. Es wird keine tty haben und wird daher unpraktisch zu benutzen sein, aber was auch ... ganz zu schweigen von all den anderen Programmen, die er ausführen kann und die Sie vermutlich nicht wollen.
  3. Das Ändern der Berechtigungen von .bash_profile bringt wenig, wenn der Benutzer nur "ssh host rm -f .bash_profile" ausführen kann. Über die Berechtigungen für das Basisverzeichnis wurde nichts erwähnt.

... und so weiter. Diese Art von Herangehensweise ist einfach zu fragil.

Richard E. Silverman
quelle
0

Dies ist ein Tool von Drittanbietern, das nicht in den Geltungsbereich der Frage fällt, aber meiner Meinung nach verdient es trotzdem eine Erwähnung.

Jailkit: https://olivier.sessink.nl/jailkit/

Es verfügt über eine Reihe von Tools, die das Einrichten von Benutzer-Jails vereinfachen - Kopieren von Binärdateien und Bibliotheken in das Jail und Einrichten der Protokollierung vom Jail-Inneren zum Betriebssystem. Ich habe es verwendet, um nur sftp / scp / rsync-Chroots zu erstellen.

Es kommt auch mit jk_lsh(Jailkit Limited Shell), die außerhalb des Jailkits verwendet werden kann, um die Befehle zu begrenzen, die ein Benutzer ausführen kann, wenn Sie z. B. scp / sftp / rsync nur ohne Chroot zulassen möchten.

Chutz
quelle
-1

Hier ist ein Trick, wie man diese Serverseite ausführt. Stellen Sie die Shell der Benutzer zum Beispiel auf bash ein:

usermod -S /bin/bash [username]

Erstellen Sie nun in ihrem Homedir ein '.bash_profile' mit der folgenden Zeile:

[ -n "$PS1" ] && exit

Dies führt dazu, dass nicht interaktive Sitzungen (wie 'scp') fortgesetzt werden. Wenn sie jedoch versuchen, sich mit 'ssh' anzumelden, wird der 'Exit' aufgerufen und die Verbindung wird geschlossen.

Stellen Sie sicher, dass sie kein neues .bash_profile in ihre Home-Verzeichnisse 'sftp' können!

chown root:root .bash_profile

Ich hoffe, das hilft!

Vince Berk
quelle
Dieser Ansatz scheint die Anforderung an das Gefängnis nicht zu berücksichtigen.
Brianjcohen
Ja, leider müssten Sie eine manuelle Chroot-Umgebung für die 'scp'-Seite erstellen, die sich mit dem in sshd_config angegebenen Chroot-Verzeichnis überschneidet, und den obigen Trick für jeden Benutzer ausführen, den Sie einschränken möchten. Der 'scp' funktioniert nicht mit dem internen SFTP-Server.
Vince Berk