Ist es möglich, Benutzern SFTP-Zugriff ohne Shell-Zugriff zu gewähren? Wenn ja, wie wird es umgesetzt?

29

Ich habe eine Reihe von Benutzern, die nur Dateien in ihre festgelegten Verzeichnisse hochladen müssen. Ich denke, SFTP würde ausreichen, aber ich möchte nicht, dass sie sich über die Shell anmelden. Also ist es möglich? Meine Plattform ist Centos 7, die Homedirs der Benutzer sind gespeichert, sagen wir / personal / $ user

Ich habe einen Benutzer mit diesen Einstellungen erstellt

useradd -m -d /personal/user1 -s /sbin/nologin

Benutzer ein passwd zugewiesen, dann, wenn ich SFTP verwenden, um sich auf dem Computer anzumelden, heißt es, kann keine Verbindung herstellen.

Sollosa
quelle

Antworten:

11

Bearbeiten Sie Ihre /etc/ssh/sshd_config, um Folgendes zu enthalten:

Match User [SFTP user]
ForceCommand internal-sftp

Neu starten sshd. Wenn Sie mehrere Benutzer haben, setzen Sie diese alle in die entsprechende Benutzerzeile, getrennt durch Kommas, wie folgt:

Match User User1,User2,User3

Der Schlüssel zum Konfigurieren sftp, um den Shell-Zugriff nicht zuzulassen, besteht darin, die Benutzer über die ForceCommand Option einzuschränken.

kemotep
quelle
Ok, ich habe alle Schritte
befolgt,
2
@Sollosa Versuche es Match User [SFTP user] ForceCommand internal-sftpnur mit, ohne chrooting Zeug.
Martin Prikryl
@MartinPrikryl es hat funktioniert Martin, danke, ich habe gerade chrootdirectory parameter & viola
Sollosa
1
Darüber hinaus können Sie chrootdie Benutzer so, dass sie nicht nach oben und aus Ihrem definierten "Gefängnis" navigieren können
ivanivan
37

Ich mag das folgende Setup für die Verwaltung des SSH-Zugriffs, das ich bei der Arbeit verwende, um eine Gruppe von Benutzern auf einer kleinen Serverflotte zu verwalten. Sicherheit und einfache Verwaltung stehen ganz oben auf meiner Prioritätenliste.

Die wichtigsten Funktionen sind das einfache Verwalten von SSH-Rechten über die Mitgliedschaft in einer Unix-Gruppe, das Festlegen von Berechtigungen und die standardmäßige Sicherheit.

Einrichten

Software installieren (optional, aber nützlich):

yum install members   # or apt install members

Gruppen hinzufügen:

addgroup --system allowssh
addgroup --system sftponly

Stellen Sie /etc/ssh/sshd_configsicher, dass folgende Einstellungen vorgenommen wurden No:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

Fügen Sie am Ende /etc/ssh/sshd_configdiese beiden Strophen hinzu:

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

(Vergessen Sie nicht, SSH nach dem Bearbeiten der Datei neu zu starten.)

Erläuterung

Also, was macht das alles?

  • Als zusätzliche Sicherheitsmaßnahme werden Root-Anmeldungen immer deaktiviert.
  • Es deaktiviert immer kennwortbasierte Anmeldungen (schwache Kennwörter sind ein großes Risiko für Server, auf denen sshd ausgeführt wird).
  • Es erlaubt nur Benutzern in der allowsshGruppe die (Pubkey-) Anmeldung .
  • Benutzer in der sftponlyGruppe können keine Shell über SSH erhalten, nur SFTP.

Die Verwaltung der Zugriffsberechtigten erfolgt dann einfach über die Verwaltung der Gruppenmitgliedschaft (diese Änderungen werden sofort wirksam, ein SSH-Neustart ist nicht erforderlich):

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

Beachten Sie, dass Ihre SFTP-Benutzer sowohl Mitglieder von sftponly(um sicherzustellen, dass sie keine Shell erhalten) als auch von allowssh(um die Anmeldung überhaupt zuzulassen) sein müssen.

Weitere Informationen

  1. Bitte beachten Sie, dass diese Konfiguration keine Kennwortanmeldungen zulässt . Alle Konten müssen die Authentifizierung mit öffentlichem Schlüssel verwenden. Dies ist wahrscheinlich der größte Sicherheitsgewinn, den Sie mit SSH erzielen können. Daher ist es meiner Meinung nach die Mühe wert, auch wenn Sie jetzt anfangen müssen.

    Wenn Sie dies wirklich nicht möchten, fügen Sie PasswordAuthentication yeses ebenfalls zur Match Group allowsshZeilengruppe hinzu. Dies ermöglicht allowsshBenutzern sowohl die Authentifizierung mit dem Pubkey als auch mit dem Passwort .

  2. Diese Konfiguration beschränkt jeden sftponlyBenutzer auf sein Basisverzeichnis. Wenn Sie das nicht möchten, entfernen Sie die ChrootDirectory %hDirektive.

    Wenn Sie Ihnen das chrooting arbeiten wollen, ist es wichtig , dass der Home - Verzeichnis des Benutzers (und jedes Verzeichnis darüber) ist im Besitz von root:rootund nicht beschreibbar Gruppe / andere. Es ist in Ordnung, dass Unterverzeichnisse des Basisverzeichnisses im Besitz des Benutzers sind und / oder beschreibbar sind.

    Ja, das Basisverzeichnis des Benutzers muss sich im Besitz von root befinden und für den Benutzer nicht beschreibbar sein. Leider gibt es gute Gründe für diese Einschränkung. Je nach Ihrer Situation ChrootDirectory /homekönnte eine gute Alternative sein.

  3. Das Festlegen der Shell der sftponlyBenutzer auf /sbin/nologinist für diese Lösung weder erforderlich noch schädlich, da SSH die Shell des Benutzers ForceCommand internal-sftpüberschreibt.

    Die Verwendung von /sbin/nologinkann hilfreich sein, um die Anmeldung über andere Wege (physische Konsole, Samba usw.) zu unterbinden.

  4. Dieses Setup ermöglicht keine direkten rootAnmeldungen über SSH. Dies bildet eine zusätzliche Sicherheitsebene. Wenn Sie wirklich keine direkten Root - Anmeldungen benötigen, um die Änderung der PermitRootLoginRichtlinie. Überlegen Sie forced-commands-only, ob Sie es auf , prohibit-passwordund setzen möchten (als letzte Möglichkeit) yes.

  5. Werfen Sie einen Blick darauf, um Bonuspunkte zu erhalten und zu begrenzen, wer suroot werden kann. Fügen Sie eine Systemgruppe hinzu, die aufgerufen wird wheel, und fügen Sie hinzu, / aktivieren Sie auth required pam_wheel.soin /etc/pam.d/su.

marcelm
quelle
2
Dies sollte die akzeptierte Antwort sein. Es bietet die Lösung sowie eine Aufschlüsselung der Gründe für jeden Schritt.
Kemotep
1
Dies ist eine wirklich gute Antwort mit großartigen zusätzlichen Sicherheitshinweisen, aber ich mache mir Sorgen um die Benutzer, deren Systeme sich auf Kennwortanmeldungen, Stammanmeldungen usw. verlassen. Natürlich ist dies nicht gut, aber verschieben Sie möglicherweise die Änderungen im Zusammenhang mit der allgemeinen Sicherheitsverbesserung auf ihre eigenen Bereich, damit eine Antwort auf die Frage mit minimalen Änderungen zur Verfügung steht?
Josh Rumbut
1
@JoshRumbut Ich wollte die Antwort für Ihre (sehr korrekten) Bemerkungen nicht umschreiben, zum Teil, weil sie nur My Way ™ zeigt, und zum Teil in der Hoffnung, dass es sich um eine Art kanonisches Secure-By-Default-SSH-Setup handeln kann Beispiel, dass viel mehr Menschen nützlich finden. Als Kompromiss habe ich versucht, klarer zu machen, dass Root-Anmeldungen und die Kennwortauthentifizierung nicht funktionieren.
Außerdem habe
1
Gute Antwort, imo die größten Mängel der anderen Antworten waren Sicherheitsaspekte nicht berücksichtigt, hauptsächlich Chroot. +1
Rui F Ribeiro
1
Chroot funktioniert für ein generisches% h nicht. Überraschenderweise müssen Sie chown root:rootundchmod og-w
kubanczyk
1

Ändern Sie einfach die Standard-Shell in / sbin / nologin. Angenommen, die meisten Linux-Varianten:

# usermod -s /sbin/nologin username
Kefka
quelle
Ich habe es versucht, aber der Benutzer kann sich nicht über SFTP anmelden. Ich weiß nicht warum. Ich benutze übrigens Centos.
Sollosa
@Sollosa Möglicherweise liegt entweder ein Berechtigungsproblem in Ihrer sftp-Chroot vor oder sshd_config weist ein Problem auf. Sie sollten Ihre Frage aktualisieren, um die Berechtigungen Ihres chroot-Verzeichnisses und Ihrer sshd_config mit allen redigierten vertraulichen Informationen einzuschließen.
Kefka
Ich glaube (obwohl ich es jetzt nicht testen kann), dass dies SFTP nur erlaubt, wenn es auch gibt Subsystem sftp internal-sftp(oder vielleicht ForceCommand internal-sftp). Wenn es üblich ist Subsystem sftp /path/to/sftp-server, nologinwird auch SFTP verhindert.
Martin Prikryl
@MartinPrikryl Ich habe ihre ursprüngliche unbearbeitete Frage missverstanden, wie der Shell-Zugriff für Benutzer auf einem ansonsten funktionsfähigen SFTP-Server deaktiviert werden kann. Ich war zu der Zeit ungefähr zehn Minuten lang wach, also war ich nicht so klar, wie ich mich gefühlt haben könnte. Obwohl ich nicht wusste, dass ein Benutzer auf dem SFTP-Server eine gültige Shell haben muss, um zu funktionieren, scheint dies potenziell gefährlich zu sein. Ich benutze Internal-SFTP immer nur aus Gewohnheit, weil ich es immer so gemacht habe.
Kefka
Siehe meine Antwort auf OpenSSH: Unterschied zwischen internem SFTP und SFTP-Server (insbesondere der Abschnitt am Ende)
Martin Prikryl
0

Sie können TFTP verwenden. Alles über SSH erfordert eine gewisse Authentifizierung (Schlüssel | Pass).

Während TFTP gesichert werden kann, lohnt es sich möglicherweise, die Entscheidung zu überdenken, Zugriff auf alles ohne Authentifizierung zu gewähren.

http://manpages.ubuntu.com/manpages/bionic/man1/tftp.1.html

Justin
quelle
2
Ich denke, OP wollte, dass Benutzer (die vermutlich Benutzernamen und Passwörter haben) keinen regulären SSH-Client verwenden können, um eine Verbindung zum Server herzustellen und beliebige Befehle auszuführen, aber dieselben Benutzer können Dateien über SFTP hochladen.
John_ReinstateMonica