Ich versuche, ein ssh-chroot-Gefängnis auf einem meiner NAS-Server einzurichten. Das System läuft auf NAS4Free (das auf nanobsd basiert). Der Benutzer sollte in der Lage sein, nur einen Befehl auszuführen, der ein Bash-Skript ist, das ssh zu einem anderen Server öffnet und dort einen Befehl ausführt.
Um die Chroot einzurichten, habe ich dies in meiner sshd-Konfiguration.
Match User op
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
Das Skript enthält diese Zeile:
ssh -i /.ssh/id_rsa [email protected]$externalresource -t "/mnt/storage/backup/run_project.sh '$1' '$2'"
Ich kann mich mit ssh bei dieser Chroot anmelden, aber wenn ich das Skript ausführe, gibt es den folgenden Fehler, wenn ich versuche, den darin enthaltenen ssh-Befehl auszuführen.
Couldn't open /dev/null: Operation not supported
Dasselbe passiert, wenn ich versuche, ssh einfach innerhalb der Chroot auszuführen
[I have no [email protected] /]$ ssh
Couldn't open /dev/null: Operation not supported
/dev/null sieht so aus:
$ ls -la dev/
total 8
drwx--x--x 2 root staff 512 Nov 29 18:16 .
drwxr-xr-x 8 root staff 512 Nov 29 18:06 ..
crw-rw-rw- 1 root staff 0x18 Nov 29 18:16 null
Ohne die 666-Berechtigungen bekomme ich natürlich einen Fehler /dev/null Berechtigung verweigert.
Ich habe dev/null mit
erstelltmknod dev/null c 2 2
Ich habe versucht, eine Erklärung zu finden, warum /dev/null die Operation nicht erlaubt zurückgibt, aber ich habe nichts gefunden, was hilft.
Könnte jemand bitte erklären, wie man das behebt?
Akzeptierte Antwort:
Ich habe dev/null mit
erstelltmknod dev/null c 2 2
Ihr Wissen ist veraltet. Die Dinge funktionieren nicht mehr so, seit NAS4Free auf FreeBSD 10 und 11 basiert. (Das sind sowieso nicht die Gerätenummern für das Nullgerät.) Lesen Sie den mknod
Handbuch. Sie können immer noch mknod
ausführen um Geräteknoten in einem tatsächlichen Disc- oder RAM-Dateisystem zu erstellen, aber die Knoten, die Sie erstellen, sind so ziemlich völlig nutzlos. Wie Sie sehen können, lässt der Kernel Sie keine Geräte damit öffnen.
Deshalb in Jails – eigentliche Jails, die mit dem Betriebssystem geliefert werden, nicht einfache Chroot-Umgebungen, die man mit sshd_config
einrichten kann — man erhält die Gerätedateien, indem man ein devfs
einhängt Beispiel im Gefängnis. Das ist auch der Grund, warum Gefängnisse Knöpfe haben, um zu steuern, ob devfs
gemountet werden kann und welcher devfs-Regelsatz darauf zutrifft.
Wenn Sie ein /dev/null
wollen in Ihrer geänderten Root-Umgebung müssen Sie mount_nullfs
verwenden um das eigentliche /dev
zu erstellen Baum innerhalb der geänderten Wurzel sichtbar. Wenn Sie ein echtes Jail verwenden, konfigurieren Sie es einfach so, dass ein devfs auf /dev
gemountet wird .
Wenn Sie ein echtes Jail verwenden, richten Sie es natürlich so ein, dass es sshd
ausführt im Gefängnis , die die IP-Adresse des Gefängnisses abhört und als Dienst in dem Gefängnis aktiviert ist /etc/rc.conf
ganz normal.
Weiterführende Literatur
mknod
. FreeBSD 11.0 Handbuch.devfs
. FreeBSD 11.0 Handbuch.devfs.rules
. FreeBSD 11.0 Handbuch.- Dokumentation:Howto:Jails. NAS4Free-Wiki.
- Matteo Riondato. „Gefängnisse“. FreeBSD-Handbuch .
- Scott Robb (4. März 2015). FreeBSD-Jails .