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?
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
Installieren Sie die Pakete dchroot und debootstrap.
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 dazuSudo mkdir /var/chroot
in eine Befehlszeile ein.Öffnen Sie als Administrator
/etc/schroot/schroot.conf
in einem Texteditor. Geben Siecd /etc/schroot
gefolgt vongksu gedit schroot.conf
ein. Auf diese Weise können Sie die Datei bearbeiten.Fügen Sie die folgenden Zeilen in
schroot.conf
ein und speichern und schließen Sie die Datei. Ersetzen Sieyour_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 SieSudo 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.
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: