GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aktivieren Sie den SSH-Shell-Zugriff, aber deaktivieren Sie den SFTP-Zugriff

Lösung 1:

Wie andere bereits erwähnt haben, deaktivieren Sie sftp ist bei weitem nicht ausreichend - ein Benutzer mit uneingeschränktem ssh access können alle Dateien anzeigen, für die ihr Konto die Berechtigung zum Anzeigen hat, können alles ändern, zu dem sie die Berechtigung zum Ändern haben, und können alles, was sie lesen können, einfach auf ihren eigenen Computer herunterladen. Die einzige Möglichkeit, sie daran zu hindern, besteht darin, ihren Zugriff tatsächlich einzuschränken. Es ist auch nicht ideal, sich auf .profile zu verlassen Benutzer einzuschränken, da dies nicht der Zweck ist (Bearbeiten:Wie Aleksi in seiner Antwort erwähnt, ist es tatsächlich trivial, .profile zu umgehen; die Sache mit .profile ist, dass es der Bequemlichkeit dient, nicht der Sicherheit, also soll es den Benutzer nicht einschränken. Verwenden Sie Dinge, die auf Sicherheit ausgelegt sind, wie die folgenden Dinge, um Sicherheit zu bieten).

Dazu gibt es zwei grundlegende Möglichkeiten:Sie können sie über Dateiberechtigungen einschränken oder sie zwingen, nur Ihre Konsolen-App auszuführen. Der zweite Weg ist besser:Weisen Sie Benutzer, die auf die Konsolen-App beschränkt werden sollen, einer Gruppe zu (z. B. customers ); dann in sshd_config , fügen Sie die folgenden Zeilen hinzu:

Match Group customers
ForceCommand /path/to/app

Dadurch wird erreicht, dass alle Verbindungen von Benutzern in dieser Gruppe die Konsolen-App öffnen; Sie können nichts anderes starten, einschließlich sftp Server-Tool. Das hält sie auch davon ab, irgendetwas anderes zu tun mit dem System und im Gegensatz zu .profile , tut dies über den SSH-Server selbst (.profile schränkt sie auf der Shell ein, ForceCommand verhindert auch andere Dinge, die nicht das Starten einer Shell beinhalten). Auch anders als .profile , das ist entworfen als Sicherheitssache; Es wurde speziell entwickelt, um einem böswilligen Benutzer zu widerstehen, der es umgeht.

Die (wahrscheinlich schlechtere) Alternative wäre das Erstellen eines neuen Benutzers zum Ausführen der Konsolen-App. Sie würden dann die Datenverzeichnisse auf diesen Benutzer beschränken, die Konsolen-App festlegen, die diesem Benutzer gehört, und u+s festlegen auf dem Programm. Dies ist der setuid bisschen; es bedeutet, dass jemand, der das Konsolenprogramm ausführt, dies mit den Berechtigungen des Besitzers des Programms tut. Auf diese Weise hat der Benutzer selbst keinen Zugriff auf die Verzeichnisse, er erhält sie nur über das Programm. Sie sollten jedoch wahrscheinlich nur ForceCommand verwenden , da dies alle einschränkt Zugriff auf "Einfach dieses Programm ausführen".

Lösung 2:

Bearbeiten:

Falls es nicht offensichtlich ist, ist die folgende Antwort nicht als sichere gedacht Methode, um zu verhindern, dass SFTP von jemandem mit Shell-Zugriff auf den Server verwendet wird. Es ist nur eine Antwort, die erklärt, wie Sie es für die externe Sichtbarkeit deaktivieren können. Eine Diskussion über die Sicherheit auf Benutzerebene finden Sie in den Antworten von @cpast und @Aleksi Torhamo. Wenn Sicherheit Ihr Fokus ist, ist diese Antwort nicht die richtige. Wenn einfache Service-Sichtbarkeit Ihr Fokus ist, dann ist dies Ihre Antwort.

Wir fahren nun mit der ursprünglichen Antwort fort:

Kommentieren Sie die sftp-Unterstützung in sshd_config aus (und starten Sie natürlich sshd neu ):

#Subsystem sftp /usr/lib/openssh/sftp-server

Lösung 3:

Versuchen Sie dies nicht mit .profile weil es keinerlei Sicherheit bietet und genau nichts einschränkt!

Es spielt keine Rolle, was Sie in .profile eingeben , da Sie es umgehen können, indem Sie einfach einen Befehl eingeben, der auf der ssh-Befehlszeile ausgeführt werden soll, wie dieser:ssh [email protected] command . Sie können immer noch normalen Shell-Zugriff erhalten, indem Sie ssh -t [email protected] bash ausführen .

Das Deaktivieren des sftp-Subsystems, wie in einer anderen Antwort erwähnt, hilft überhaupt nicht. Subsysteme sind im Wesentlichen nur Aliase für Befehle, und Sie können sftp weiterhin normal verwenden, indem Sie sftp -s /path/to/sftp-executable [email protected] ausführen .

Wie cpast und einige Kommentatoren gesagt haben, sollten Sie die richtigen Mechanismen zum Einschränken des Zugriffs verwenden. Das heißt,

  • Verwenden Sie ForceCommand in sshd_config
  • Passwortlose Anmeldung und command="..." verwenden in .ssh/authorized_keys
  • Ändern Sie die Shell des Benutzers in etwas, das die Möglichkeiten des Benutzers einschränkt

Hinweise:

  • command="..." gilt nur für einen Schlüssel, schränkt also die SSH-Anmeldung für den Benutzer nicht ein, der ein Passwort oder einen anderen Schlüssel verwendet
  • Möglicherweise möchten Sie auch die Portweiterleitung usw. einschränken (Portweiterleitung, x11-Weiterleitung, Agentenweiterleitung und pty-Zuweisung sind diejenigen, von denen ich gehört habe)
    • AllowTcpForwarding usw. in sshd_config
    • no-port-forwarding usw. in .ssh/authorized_keys
  • Wenn andere Daemons (wie FTP) laufen, sollten Sie sicherstellen, dass sie den Benutzer nicht hereinlassen (Einige Daemons treffen diese Entscheidung basierend auf der Shell des Benutzers, wenn Sie das also ändern, möchten Sie vielleicht erneut überprüfen Sie dies)
  • Sie können die Shell des Benutzers in ein Skript ändern, das tut, was Sie wollen; es wird entweder ohne Argumente oder wie script -c 'command-the-user-wanted-to-run' ausgeführt
  • Beide ForceCommand und command="..." Führen Sie den Befehl über die Shell des Benutzers aus, sodass sie nicht funktionieren, wenn die Shell des Benutzers auf eg eingestellt ist. /bin/false oder /sbin/nologin

Haftungsausschluss:Ich bin kein Experte auf diesem Gebiet, also kann ich sagen, dass .profile Das Ding ist nicht sicher, ich kann nicht versprechen, dass es bei den anderen Methoden, von denen ich nichts weiß, keine Probleme gibt. Soweit ich weiß, sind sie sicher, aber ich wäre nicht die erste Person, die sich im Internet irrt.


Linux
  1. So beschränken Sie den SSH-Zugriff für Benutzer mit LShell (Limited Shell)

  2. So deaktivieren Sie die Root-Benutzeranmeldung über SSH

  3. So erstellen Sie einen SFTP-Benutzer ohne Shell-Zugriff unter CentOS 8

  4. CentOS / RHEL :So deaktivieren / aktivieren Sie die direkte SSH-Anmeldung von Root- und Nicht-Root-Benutzern

  5. SFTP zulassen, aber SSH nicht zulassen?

Deaktivieren Sie die SSH-Passwortauthentifizierung für bestimmte Benutzer oder Gruppen

So gewähren oder verweigern Sie einem bestimmten Benutzer oder einer bestimmten Gruppe in Linux den SSH-Zugriff

So deaktivieren Sie die SSH-Anmeldung für einen bestimmten Benutzer in Linux

So beschränken Sie den SSH-Zugriff auf bestimmte Benutzer in Linux

So deaktivieren Sie den Root-SSH-Zugriff unter CentOS 7

Wie aktiviere ich SSH (Shell-Zugriff) für das vorhandene cPanel-Konto?