SFTP zulassen, SSH jedoch nicht zulassen?

94

Ich gründe eine kleine Hosting-Firma für ein paar Freunde und kleine Kunden, nichts Großes.

Ich möchte meinen "Kunden" das Recht geben, ihre Dateien auf dem Server zu verwalten. Ich hasse FTP, da es nicht sicher ist und meiner Meinung nach veraltet ist.

Daher möchte ich meinen Benutzern erlauben, eine Verbindung über SFTP herzustellen, ihnen jedoch nicht, eine Verbindung über SSH herzustellen. (Ich weiß, ich weiß, SFTP verwendet SSH). Aber ich habe mich nur gefragt, ist das möglich?

Ich müsste also keinen FTP-Dienst auf dem Server installieren und alles wäre fantastisch!

Tommy B.
quelle

Antworten:

121

Ab Version 4.9 hat OpenSSH (nicht in Centos 5.x verfügbar, aber die ChrootDirectory-Funktion wurde zurückportiert) ein internal-sftpSubsystem:

Subsystem sftp internal-sftp

Und dann andere Verwendungen blockieren:

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

Fügen Sie Ihre Benutzer der sftponlyGruppe hinzu. Sie müssen das Homedirectory des Benutzers /wegen der Chroot auf ändern und /home/usersollten im Besitz von sein root. Ich würde auch /bin/falseals Shell des Benutzers festlegen .

Rob Wouters
quelle
Beeindruckend! Sehr toll! Ich werde das testen und zur Bestätigung hierher zurückkehren. Danke vielmals!
Tommy B.
+1 für die ChrootDirectory-Sache!
Kyle Hodgson
1
Danach kann mein sftponly-Benutzer nicht mehr über ssh zugreifen und kann eine Verbindung über sftp herstellen. Es kann jedoch überhaupt keine Datei sehen! Trotzdem haben diese Dateien die Berechtigung für diesen Benutzer. :-(
Emilio Nicolás
3
Falls Sie dies tun möchten und einen Eintrag in Ihrer sshd_config mit "/ usr / lib / openssh / sftp-server" finden, überprüfen Sie dies hier: serverfault.com/questions/660160/… - internal-sftp ist "neuer" , besser und einfacher "
Xosofox
19

Es gibt nur eine Shell, die das macht. Es kann auch chroot .

Stein
quelle
Dies wäre toll, wenn Sie sowohl SFTP-Benutzer als auch SSH-Benutzer benötigen. Sie ersetzen nur die Shell in / etc / passwd für diejenigen, die nur auf SFTP beschränkt sind.
Dragos
4

Checkout rssh ist eine gefälschte Shell, die sftp erlaubt, aber ssh verweigert

Mehr über RSSH

http://www.pizzashack.org/rssh/

RPMs

http://pkgs.repoforge.org/rssh/

Sie können rssh so konfigurieren, dass verschiedene Verhaltensweisen wie sft, scp usw. zugelassen / abgelehnt werden.

Chris
quelle
Nett. Dies ist die einfachste Art der Konfiguration, ohne sshd_config zu berühren. Ändern Sie einfach die Shell in der passwd-Datei und fertig.
Tomofumi
2

Sie können / etc / passwd ändern und diesem Benutzer eine gefälschte Shell geben, damit er ssh nicht verwenden kann.

jcisio
quelle
11
Hast du das getestet?
Splattne
8
Wenn ich versuche, die Shell /bin/falseweder auf ssh noch auf sftp einzustellen, funktioniert das
Brad Mace
2
Mit / bin / false wird jede Art von Anmeldung verboten. Dies ist hier nicht der richtige Ansatz. Die akzeptierte Antwort von Rob Wouters lautet, wie Sie Benutzer nur auf SFTP beschränken sollten, nicht durch Ändern der Shell. Wenn Sie die Shell @ Stones Antwort ändern möchten, ist dies eine gute Idee.
Jwbensley
1
WELCHE Shell sollte also verwendet werden, wenn / bin / bash nicht akzeptabel ist und / bin / false oder / sbin / nologin den Zugriff verweigern?
Putnik
1

Ich benutze die Methode, die Benutzer-Shell wie erwähnt als / bin / false anzugeben. Sie müssen jedoch sicherstellen, dass sich / bin / shell in / etc / shells befindet. Dann klappt es ssh = no ftp = ok.

Ich benutze auch vsftpd und füge dieses
chroot_local_user = YES zu /etc/vsftpd/vsftpd.conf hinzu, so dass FTP-Benutzer kein anderes Datum als ihr eigenes sehen können.

Vorteil dieser einfachen Änderungen sind keine lästigen Konfigurationsänderungen für jeden Benutzer.

denpick
quelle
1

Vergiss nicht, die Zeile zu finden UsePAM yesund zu kommentieren:

#UsePAM yes

Ohne Deaktivierung würde Ihr SSH-Server beim erneuten Laden / Neustarten abstürzen. Da Sie keine ausgefallenen Funktionen von PAM benötigen, ist dies in Ordnung.

Hudson Santos
quelle
0

Ssh so zu konfigurieren, dass für einige ausgewählte Benutzer nur sftp aktiviert wird, ist eine gute Idee und funktioniert ordnungsgemäß, vorausgesetzt, Sie installieren entweder scponlyoder rssh.

rsshFunktioniert einwandfrei, es sei denn, Sie müssen Jail konfigurieren. In diesem Fall ist es verrückt, die Anweisungen in den CHROOT-Handbüchern zu befolgen, was dazu führt, dass große Teile der ausführbaren Dateien und der Bibliothek des Systems direkt unter "jedem Benutzer-Jail", einschließlich der rsshShell selbst , "kopiert" werden . Es ist eine platzraubende Methode.

scponly erfordert ein tiefes Verständnis der Konfiguration, was zu einem allgegenwärtigen Problem der Ablehnung der Anmeldung im Falle der Einrichtung eines Gefängnisses führt.

Die einfache Möglichkeit, "FTP" -Funktionalitäten mit ordnungsgemäß funktionierendem Jail zuzulassen und SSL / TLS-Unterstützung für sichere Transaktionen und Anmeldungen zu verwenden, besteht in der Verwendung eines "alten, aber funktionsfähigen" VSFTPD, das schnell und sauber installiert wird und die gesamte erforderliche und dauerhafte Konfigurierbarkeit bietet aber nicht zuletzt: es funktioniert!

Maurizio.

Maurizio
quelle
0

Alle Antworten sind leider sehr irreführend: Bitte machen Sie folgendes:

  1. Erstellen Sie zunächst einen SFTP-Benutzer und eine SFTP-Gruppe

  2. Erstellen Sie ein separates Verzeichnis als Root für die SFTP-Dateien: sudo mkdir -p /home/sftpdir

  3. Habe eine sshd_config Datei getestet, die aus Sicherheitsgründen SSH über Port 22 aber auch SFTP über zufälligen Port zulässt
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Starten Sie den sshd-Dienst neu und überprüfen Sie den Status

    Sudo-Dienst sshd Neustart

    service sshd status

  2. Erstellen Sie eine Shell-Datei. Ausführung hinzufügen, um eine Benachrichtigungsnachricht zurückzugeben

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Dieses Konto ist nur auf den SFTP-Zugriff beschränkt."' | sudo tee -a / bin / sftponly

  3. Erteilen Sie Ausführungsberechtigungen und hängen Sie sie an die Shells-Datei an

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. endlich testen und du solltest keine verbindung herstellen können.

  5. Eine Vorlage zur Verwendung des SFTP-Clients mit einem SSH-Schlüssel und grundlegender Ausführlichkeit:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Andres Leon Rangel
quelle