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 md
dispositivo para realizar la parte de "construir imagen". ¿Simplemente no es posible montar un md
dispositivo 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
md0
y md1
son los discos RAM del host.
bsdlabel
parece 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
newfs
funciona 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
mount
falla
[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 md
dispositivo para construir la imagen. Una posible solución que intentaré es pasar chroot
del host a la cárcel de compilación, en lugar de jexec
a 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!).