Construyendo NanoBSD dentro de una cárcel

Construyendo NanoBSD dentro de una cárcel

Estoy intentando configurar una cárcel para permitir la creación de una imagen de NanoBSD. En realidad, es una cárcel además de una instalación de NanoBSD.

El problema que tengo es que no puedo montar el mddispositivo para realizar la parte de "construir imagen". ¿Simplemente no es posible montar un mddispositivo dentro de una cárcel o hay algunaotro¿Perilla que necesito girar?

en el anfitrión

/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

Dentro de la carcel

[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 

md0y md1son los discos RAM del host.

bsdlabelparece sensato

[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

newfsfunciona bien

[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

mountfalla

[root@build /usr/obj/nanobsd.PROLIANT_MICROSERVER]# mount /dev/md2s1a _.mnt/
mount: /dev/md2s1a : Operation not permitted

ACTUALIZAR:

Uno de mis colegas señaló

Hay algunos tipos de sistemas de archivos que no se pueden montar de forma segura dentro de una cárcel sin importar qué, como UFS, MSDOFS, EXTFS, XFS, REISERFS, NTFS, etc. porque el usuario que los monta tiene acceso al almacenamiento sin formato y puede dañarlo. de una manera que provocará pánico en todo el sistema.

Dehttp://www.mail-archive.com/[correo electrónico protegido]/msg160389.html

Entonces parece que el nanobsd.sh estándar no se ejecutará dentro de una cárcel mientras usa el mddispositivo para construir la imagen. Una posible solución que intentaré es pasar chrootdel host a la cárcel de compilación, en lugar de jexeca un shell.

Respuesta1

Como dijiste, chroot es el camino a seguir.

No desea lograr seguridad, simplemente cree y cambie la raíz para que sus scripts de instalación se comporten correctamente. Para eso está chroot.

En algunos sistemas no hay un binario chroot, pero es bastante fácil codificar un script simple que logrará todo lo que deseas (y, oye, ¡puedes reutilizarlo más tarde!).

información relacionada