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

45

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

Ich möchte ein anderes Benutzerkonto erstellen, mit dem ich auch über SSH auf diesen Server zugreifen kann, aber beispielsweise nur auf ein bestimmtes Verzeichnis /var/www/example.com/

Stellen Sie sich zum Beispiel vor, dieser Benutzer hat eine GROSSE error.log-Datei (500 MB) in /var/www/example.com/logs/error.log Beim Zugriff auf diese Datei über FTP muss dieser Benutzer 500 MB herunterladen, um die letzten Zeilen des Protokolls anzuzeigen in der Lage, 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?

Richard Rodriguez
quelle

Antworten:

29

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 zu ihrem 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 (dh mit sudo) ein neues Verzeichnis für die Chroot. In diesem Verfahren wird das Verzeichnis /var/chrootverwendet. Geben Sie dazu sudo mkdir /var/chroot in eine Befehlszeile ein.

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

  4. Fügen Sie die folgenden Zeilen hinzu schroot.confund speichern und schließen Sie die Datei. Ersetzen Sie your_usernamedurch 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 die oben angegebene mirror.url.comURL mit der URL eines gültigen, für Sie lokalen Archivspiegels ändern . Eine grundlegende Chroot sollte jetzt erstellt worden sein. Geben Sie ein sudo chroot /var/chroot , um zu einer Root-Shell innerhalb 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_namediese Option, um Pakete zu installieren.

RedGrittyBrick
quelle
16

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

Celebdor
quelle