Construindo NanoBSD dentro de uma prisão

Construindo NanoBSD dentro de uma prisão

Estou tentando configurar uma prisão para permitir a construção de uma imagem NanoBSD. Na verdade, é uma prisão em cima de uma instalação do NanoBSD.

O problema que tenho é que não consigo montar o mddispositivo para fazer a parte de ‘construir imagem’. Simplesmente não é possível montar um mddispositivo dentro de uma prisão ou existe algumaoutrobotão que preciso girar?

No anfitrião

/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 da prisão

[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 

md0e md1são os ramdisks do 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 bem

[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

mountfalhar

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

ATUALIZAR:

Um dos meus colegas destacou

Existem alguns tipos de sistemas de arquivos que não podem ser montados com segurança em uma prisão, não importa o que aconteça, como UFS, MSDOFS, EXTFS, XFS, REISERFS, NTFS, etc. porque o usuário que o monta tem acesso ao armazenamento bruto e pode corrompê-lo em uma forma de entrar em pânico em todo o sistema.

Dehttp://www.mail-archive.com/[e-mail protegido]/msg160389.html

Portanto, parece que o nanobsd.sh padrão não será executado dentro de uma prisão enquanto usa o mddispositivo para construir a imagem. Uma solução potencial que tentarei é passar chrootdo host para a prisão de construção, em vez de para jexecum shell.

Responder1

Como você disse, chroot é o caminho a percorrer.

Você não deseja obter segurança, apenas crie e altere a raiz para que seus scripts de instalação se comportem corretamente. É para isso que serve o chroot.

Em alguns sistemas não existe um binário chroot, mas é fácil codificar um script simples que alcançará tudo o que você deseja (e ei, você pode reutilizá-lo mais tarde!).

informação relacionada