So erstellen Sie einen SSH-Benutzer, der nur über die Berechtigung zum Zugriff auf bestimmte Ordner verfügt

47

Ich habe SSH installiert, aber ich habe festgestellt, dass es zu viele Berechtigungen hat, wenn ich mein ursprüngliches Konto verwende, um mich bei Ubuntu anzumelden.

Ich möchte den Benutzer einschränken, nur Berechtigungen für bestimmte Ordner in Ubuntu zu haben. Wie kann ich einen solchen Benutzer konfigurieren?

Dumm
quelle

Antworten:

49

Das ist ganz einfach. Erstellen Sie einfach einen neuen Benutzer, dessen Ausgangsverzeichnis auf das Verzeichnis festgelegt ist, auf das er Zugriff haben soll (dieser Befehl muss unter sudooder in der Root-Shell ausgeführt werden):

adduser --home /restricted/directory restricted_user

Dadurch wird ein Benutzer erstellt restricted_user, das Verzeichnis /restricted/directoryund anschließend die Berechtigungen für das Verzeichnis festgelegt, damit der Benutzer darauf schreiben kann. Standardmäßig kann nicht in ein anderes Verzeichnis geschrieben werden.

Wenn Sie das Verzeichnis bereits haben, können Sie den adduserBefehl mit --no-create-homeangehängter Option ausführen und die Berechtigungen manuell festlegen (auch mit Root-Rechten), z.

chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory

Wenn Sie selbst Verzeichnisse mit Schreibrechten für diesen Benutzer unzugänglich machen müssen, gibt es zwei Varianten.

1) Wenn Sie dem Benutzer eine interaktive Shell-Sitzung bereitstellen möchten, sollten Sie dieses Handbuch zum Erstellen eines Chroot-Gefängnisses (in Ihrem /restricted/directory) befolgen .

Fügen Sie danach Folgendes zu Ihrem hinzu sshd_config:

Match user restricted_user
  ChrootDirectory /restricted/directory

2) Wenn Sie nur Dateien zwischen seinem Endpunkt der Verbindung und Ihrem Host kopieren müssen, ist alles viel einfacher. Fügen Sie diese Zeilen am Ende Ihres sshd_config:

Match user restricted_user
  ForceCommand internal-sftp
  ChrootDirectory /restricted/directory

Subsystem       sftp    internal-sftp

Kommentieren Sie das dann Subsystem sftp /usr/lib/openssh/sftp-serveraus, indem Sie #am Anfang ein Rautezeichen ( ) setzen.

Nach dem Neustart des SSH-Servers (interaktive Sitzungen werden beim Neustart nicht abgebrochen, sodass die Sicherheit auch dann gewährleistet ist, wenn Sie etwas falsch konfiguriert haben. Außerdem wird die laufende Sitzung nicht geschlossen, bevor Sie überprüft haben, ob Sie sich noch anmelden können), sollte alles funktionieren wie beabsichtigt.

Whitequark
quelle
1
Ich habe es versucht, aber es scheint, dass ich immer noch cd .. und das obere Verzeichnis durchsuchen kann. und wenn ich vi a.txt im oberen Verzeichnis verwende, wird angezeigt: drücke die Eingabetaste oder den Befehl, um fortzufahren, und ich kann vi
Foolish
1
Kann ich Option 2 verwenden, wenn der Benutzer nur sshfs-Zugriff haben soll?
Flickerfly
1
Alles funktioniert gut, außer dass ich keine Schreibberechtigung habe. Wie kann ich eine Schreibberechtigung für dieses eingeschränkte Verzeichnis festlegen? Wenn ich chmod 775 verwende, kann sich der Benutzer nicht mehr anmelden.
Mein-Name-ist
3
Sie sollten die Subsystem sftp internal-sftpZeile in Ihrem zweiten Beispiel über den MatchBlock schreiben . Andernfalls gibt ssh einen Fehler aus und startet nicht.
Tik0
1
Spoiler Alarm: Funktioniert nicht mit scp
bicycle
5

Der einfachste Weg, einen eingeschränkten Benutzer zu erstellen, der das angegebene Verzeichnis nicht verlassen kann (z. B. in das übergeordnete Verzeichnis usw.) und einen eingeschränkten / ausgewählten Befehlssatz zu verwenden, ist die Verwendung einer eingeschränkten Shell. Ref:

http://man.he.net/man1/rbash

Erstellen Sie zunächst einen Symlink mit dem Namen rbash(als Root-Benutzer ausführen).

ln -s /bin/bash /bin/rbash

Dann erstelle einfach einen normalen Benutzer mit dieser eingeschränkten Shell und setze das Ausgangsverzeichnis auf den gewünschten Ordner:

useradd -s /bin/rbash -d /home/restricted_folder username

Auch ohne die eingeschränkte Shell wird dieser Benutzer standardmäßig eingeschränkt, wenn Sie ihn nicht explizit zur sudoer-Liste oder zu speziellen Gruppen hinzufügen.

Bei der eingeschränkten Shell sind die folgenden Aktionen nicht zulässig oder werden nicht ausgeführt:

  • verzeichnisse wechseln mit cd

  • Festlegen oder Deaktivieren der Werte von SHELL, PATH, ENV oder BASH_ENV

  • Befehlsnamen angeben, die / enthalten

  • Angabe eines Dateinamens mit einem / als Argument für die. eingebauter Befehl

  • Angeben eines Dateinamens mit einem Schrägstrich als Argument für die Option -p des integrierten Hash-Befehls

  • Importieren von Funktionsdefinitionen aus der Shell-Umgebung beim Start

  • Analysieren des Werts von SHELLOPTS aus der Shell-Umgebung beim Start

  • Umleiten der Ausgabe mit den Umleitungsoperatoren>,> |, <>,> &, &> und >>

  • Verwenden Sie den Befehl exec builtin, um die Shell durch einen anderen Befehl zu ersetzen

  • Hinzufügen oder Löschen von eingebauten Befehlen mit den Optionen -f und -d zum Befehl enable builtin

  • Verwenden des Befehls enable builtin zum Aktivieren deaktivierter Shell-Builtins

  • Angabe der Option -p für den Befehl builtin command

  • den eingeschränkten Modus mit set + r oder set + o restricted ausschalten.

Diese Einschränkungen werden nach allen Startdateien erzwungen

Um den Benutzer auf einen bestimmten Befehlssatz zu beschränken, können Sie für diesen Benutzer ein schreibgeschütztes .bash_profile mit erstellen

PATH=$HOME/bin

und verknüpfen Sie alle Befehle, die Sie erlauben, in den Ordner ~ / bin mit diesem Benutzer:

ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm

usw.

HTH

xpt
quelle
Ich kann jede Datei im Dateisystem finden, einschließlich / root-Verzeichnis, und ich kann diese Dateien lesen. Sie fragen sich, wie Sie den Zugriff auf Objekte außerhalb des Benutzerordners oder das Erfassen von Netzwerkpaketen oder das Lesen von / var / log-Inhalten weiter
einschränken können