4 votes

Construire NanoBSD dans une prison

J'essaie de configurer un jail pour permettre la construction d'une image NanoBSD. Il s'agit en fait d'un jail au-dessus d'une installation NanoBSD.

Le problème que j'ai est que je n'arrive pas à monter la md afin d'effectuer la partie "construction de l'image". Est-il tout simplement impossible de monter un md à l'intérieur d'une prison, ou y a-t-il une sorte de autre Je dois me tortiller ?

Sur l'hôte

/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

A l'intérieur de la prison

[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 sont les disques RAM de l'hôte.

bsdlabel semble raisonnable

[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 fonctionne 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 échoue

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

UPDATE :

Un de mes collègues a fait remarquer

Il existe certains types de systèmes de fichiers qui ne peuvent pas être montés de manière sécurisée au sein de dans une prison, comme UFS, MSDOFS, EXTFS, XFS, REISERFS, NTFS, etc, etc. parce que l'utilisateur qui le monte a accès au stockage brut et peut le corrompre de manière à faire paniquer tout le système.

De http://www.mail-archive.com/freebsd-hackers@freebsd.org/msg160389.html

Il semble donc que le fichier nanobsd.sh standard ne s'exécute pas dans un jail s'il utilise le fichier md pour construire l'image. Une solution potentielle que je vais essayer est de chroot de l'hôte dans la prison de construction, plutôt que de jexec un Shell.

0 votes

Et si on courait mount con ktrace ?

0 votes

@SaveTheRbtz ah, bonne idée. Je vais essayer ce soir. ktrace mount /dev/md2s1a _.mnt/ Je suppose que

0 votes

@ptomil, avez-vous eu de la chance ? Je suis intéressé à m'attaquer à quelque chose de similaire, et j'espère apprendre de vos cicatrices.

1voto

Caitlann Lloyd Points 93

Comme vous l'avez dit, chroot est la voie à suivre.

Vous ne voulez pas atteindre la sécurité, il suffit de construire et de modifier la racine pour que vos scripts d'installation se comportent correctement. C'est à ça que sert le chroot.

Sur certains systèmes, il n'y a pas de binaire chroot, mais il est assez facile de coder un simple script qui réalisera tout ce que vous voulez (et hé, vous pourrez le réutiliser plus tard !).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X