it-swarm.com.de

Kann ich einen SSH-Benutzer erstellen, der nur auf ein bestimmtes Verzeichnis zugreifen kann?

Ich besitze einen Virtual Private Server, mit dem ich über mein Root-Konto eine Verbindung zu SSH herstellen kann. Natürlich kann ich jeden Linux-Befehl ausführen und auf den gesamten Festplattenbereich zugreifen.

Ich möchte ein anderes Benutzerkonto erstellen, das auch über SSH auf diesen Server zugreifen kann, jedoch nur auf ein bestimmtes Verzeichnis, z. B. /var/www/example.com/

Stellen Sie sich zum Beispiel vor, dieser Benutzer hat eine GROSSE error.log-Datei (500 MB) im Ordner /var/www/example.com/logs/error.log. Wenn er über FTP auf diese Datei zugreift, muss er 500 MB herunterladen, um die letzten Zeilen des Protokolls anzuzeigen in der Lage sein, so etwas auszuführen:

tail error.log

Daher muss er über SSH auf den Server zugreifen können, möchte ihm jedoch nicht Zugriff auf alle Serverbereiche gewähren.

Wie kann ich das machen?

45

chroot der Benutzer.


Aktualisieren:

In dem TechRepublic-Artikel von Vincent Danen heißt es:

Mit der Veröffentlichung von OpenSSH 4.9p1 müssen Sie sich nicht mehr auf Hacks von Drittanbietern oder komplizierte Chroot-Setups verlassen, um Benutzer auf ihre Home-Verzeichnisse zu beschränken oder ihnen Zugriff auf SFTP-Dienste zu gewähren.

bearbeiten Sie/etc/ssh/sshd_config (/ etc/sshd_config bei einigen Distributionen) und legen Sie die folgenden Optionen fest:

Subsystem     sftp   internal-sftp
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Stellen Sie sicher, dass sich die Anweisung "Match" am Ende der Datei befindet. Dies teilt OpenSSH mit, dass alle Benutzer in der sftp-Gruppe in ihr Ausgangsverzeichnis geleitet werden sollen (das% h im ChrootDirectory-Befehl darstellt)

Fügen Sie Benutzer, die Sie chrooten möchten, der sftp-Gruppe hinzu, indem Sie Folgendes verwenden:

# usermod -G sftp joe
# usermod -s /bin/false joe
# chown root:root /home/joe
# chmod 0755 /home/joe

Der obige Befehl usermod fügt den Benutzer joe zur sftp-Gruppe hinzu und setzt seine Shell auf/bin/false, sodass er auf keinen Fall auf die Shell zugreifen kann. Mit den Befehlen chown und chmod werden die erforderlichen Berechtigungen für das Verzeichnis festgelegt. Mit diesen Berechtigungen kann der Benutzer Dateien hochladen und herunterladen, jedoch keine Verzeichnisse oder Dateien im Stammverzeichnis erstellen

Das Chrooten von Shell-Konten ist etwas komplizierter, da bestimmte Gerätedateien und eine Shell im Home-Verzeichnis des Benutzers verfügbar sein müssen. Die folgenden Befehle richten ein sehr einfaches Chroot-System unter Mandriva Linux ein:

# mkdir /chroot
# cd /chroot
# mkdir {bin,dev,lib}
# cp -p /bin/bash bin/
# cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 0666 dev/{null,zero}
# mkdir -p /chroot/home/joe

Mit dem oben genannten kann der Benutzer joe ssh in und wird auf die Chroot beschränkt. Leider macht dies nicht viel, aber es gibt Ihnen eine Vorstellung davon, wie es eingerichtet werden kann. Je nachdem, was Sie bereitstellen möchten, müssen Sie zusätzliche Bibliotheken und Binärdateien installieren.


Die Ubuntu Community Website sagt

Eine Chroot erstellen

  1. Installieren Sie die Pakete dchroot und debootstrap.

  2. Erstellen Sie als Administrator (d. H. Mit Sudo) ein neues Verzeichnis für die Chroot. In dieser Prozedur wird das Verzeichnis /var/chroot verwendet. Geben Sie dazu Sudo mkdir /var/chroot in eine Befehlszeile ein.

  3. Öffnen Sie als Administrator /etc/schroot/schroot.conf in einem Texteditor. Geben Sie cd /etc/schroot gefolgt von gksu gedit schroot.conf ein. Auf diese Weise können Sie die Datei bearbeiten.

  4. Fügen Sie die folgenden Zeilen in schroot.conf ein und speichern und schließen Sie die Datei. Ersetzen Sie your_username durch Ihren Benutzernamen.

    [lucid] description = Ubuntu Lucid location =/var/chroot priority = 3 Benutzer = Ihr_Benutzername groups = sbuild root-groups = root

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

Sudo debootstrap --variant=buildd --Arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/

Dadurch wird eine Basisinstallation von Ubuntu 10.04 (Lucid Lynx) in der Chroot erstellt. Es kann eine Weile dauern, bis die Pakete heruntergeladen sind. Hinweis: Sie können lucid durch eine Ubuntu-Version Ihrer Wahl ersetzen. Hinweis: Sie müssen den obigen mirror.url.com mit der URL eines gültigen, für Sie lokalen Archivspiegels ändern. Eine grundlegende Chroot sollte jetzt erstellt worden sein. Geben Sie Sudo chroot /var/chroot ein, um zu einer Root-Shell in der Chroot zu wechseln.

Einrichten der Chroot

Es gibt einige grundlegende Schritte, die Sie ausführen können, um die Chroot einzurichten. Dazu gehören Funktionen wie die DNS-Auflösung und der Zugriff auf /proc.

Hinweis: Geben Sie diese Befehle in eine Shell ein, die sich außerhalb der Chroot befindet.

Geben Sie Folgendes ein, um das /proc-Dateisystem in der Chroot bereitzustellen (für die Verwaltung von Prozessen erforderlich):

Sudo mount -o bind /proc /var/chroot/proc  

Geben Sie Folgendes ein, um die DNS-Auflösung in der Chroot zuzulassen (für den Internetzugang erforderlich):

Sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 

Sehr wenige Pakete werden standardmäßig in einer Chroot installiert (auch Sudo ist nicht installiert). Verwenden Sie apt-get install package_name, um Pakete zu installieren.

29
RedGrittyBrick

Ihre beste Wette, IMHO, ist es, ein SSH-Chroot-Gefängnis einzurichten, d. H. Eine minimale Bash-Umgebung im Verzeichnis /var/www/example.com/. Dazu können Sie folgen:

16
celebdor