Ich versuche, ein Jail einzurichten, um die Erstellung eines NanoBSD-Images zu ermöglichen. Es ist eigentlich ein Jail über einer NanoBSD-Installation.
Das Problem, das ich habe, ist, dass ich das Gerät nicht mounten kann, md
um den Teil „Image erstellen“ durchzuführen. Ist es einfach nicht möglich, ein md
Gerät in einem Jail zu mounten, oder gibt es eineandereKnopf, an dem ich drehen muss?
Auf dem Host
/etc/rc.conf.local
jail_enable="YES"
jail_mount_enable="YES"
jail_list="build"
jail_set_hostname_allow="NO"
jail_build_hostname="build.vm"
jail_build_ip="192.168.0.100"
jail_build_rootdir="/mnt/zpool0/jails/build/home"
jail_build_devfs_enable="YES"
jail_build_devfs_ruleset="devfsrules_jail_build"
/etc/devfs.rules
[devfsrules_jail_build=5]
# nothing
Im Gefängnis
[root@build /usr/obj/nanobsd.PROLIANT_MICROSERVER]# sysctl security.jail
security.jail.param.cpuset.id: 0
security.jail.param.host.hostid: 0
security.jail.param.host.hostuuid: 64
security.jail.param.host.domainname: 256
security.jail.param.host.hostname: 256
security.jail.param.children.max: 0
security.jail.param.children.cur: 0
security.jail.param.enforce_statfs: 0
security.jail.param.securelevel: 0
security.jail.param.path: 1024
security.jail.param.name: 256
security.jail.param.parent: 0
security.jail.param.jid: 0
security.jail.enforce_statfs: 1
security.jail.mount_allowed: 1
security.jail.chflags_allowed: 1
security.jail.allow_raw_sockets: 0
security.jail.sysvipc_allowed: 0
security.jail.socket_unixiproute_only: 1
security.jail.set_hostname_allowed: 0
security.jail.jail_max_af_ips: 255
security.jail.jailed: 1
[root@build /usr/obj/nanobsd.PROLIANT_MICROSERVER]# mdconfig -l
md2 md0 md1
md0
und md1
sind die Ramdisks des Hosts.
bsdlabel
sieht vernünftig aus
[root@build /usr/obj/nanobsd.PROLIANT_MICROSERVER]# bsdlabel /dev/md2s1
# /dev/md2s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1012016 16 4.2BSD 0 0 0
c: 1012032 0 unused 0 0 # "raw" part, don't edit
newfs
läuft ok
[root@build /usr/obj/nanobsd.PROLIANT_MICROSERVER]# newfs -U /dev/md2s1a
/dev/md2s1a: 494.1MB (1012016 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 123.55MB, 7907 blks, 15872 inodes.
with soft updates
super-block backups (for fsck -b #) at:
160, 253184, 506208, 759232
mount
schlägt fehl
[root@build /usr/obj/nanobsd.PROLIANT_MICROSERVER]# mount /dev/md2s1a _.mnt/
mount: /dev/md2s1a : Operation not permitted
AKTUALISIEREN:
Einer meiner Kollegen wies darauf hin
Es gibt einige Dateisystemtypen, die auf keinen Fall sicher in einem Jail gemountet werden können, z. B. UFS, MSDOFS, EXTFS, XFS, REISERFS, NTFS usw., da der Benutzer, der das Dateisystem mountet, Zugriff auf den Rohspeicher hat und diesen so beschädigen kann, dass das gesamte System in Panik gerät.
Aushttp://www.mail-archive.com/[email geschützt]/msg160389.html
Es scheint also, dass das Standard-Nanobsd.sh nicht in einem Jail ausgeführt wird, während es das md
Gerät zum Erstellen des Images verwendet. Eine mögliche Lösung, die ich ausprobieren werde, ist, chroot
vom Host in das Build-Jail zu wechseln, anstatt jexec
in eine Shell.
Antwort1
Wie gesagt, chroot ist die Lösung.
Sie möchten keine Sicherheit erreichen, sondern nur die Root erstellen und ändern, damit Ihre Installationsskripte korrekt funktionieren. Dafür ist chroot da.
Auf manchen Systemen gibt es keine Chroot-Binärdatei, aber es ist ziemlich einfach, ein einfaches Skript zu codieren, das alles erreicht, was Sie wollen (und hey, Sie können es später wiederverwenden!).