Alguns administradores dividem as jails nos dois seguintes tipos: jails “completa”, que se assemelham a um sistema real do FreeBSD, e jails de “serviço”, dedicados a um aplicativo ou serviço, possivelmente executando com privilégios. Esta é apenas uma divisão conceitual e o processo de criação de uma jail não é afetado por ela. Ao criar uma jail “completa”, há duas opções para a origem do userland: usar binários pré-compilados (como aqueles fornecidos em uma mídia de instalação) ou compila-los a partir do código fonte.
Para instalar o userland da mídia de instalação, primeiro crie o diretório raiz da jail. Isso pode ser feito definindo a variável DESTDIR
para o local adequado.
Inicie um shell e defina a variável DESTDIR
:
#
sh
#
export DESTDIR=
/here/is/the/jail
Monte a mídia de instalação como abordado em mdconfig(8) ao usar a ISO de instalação:
#
mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mnt
#
cd /mnt/usr/freebsd-dist/
Como alternativa, baixe os tarballs de um mirror:
#
sh
#
export DESTRELEASE=
12.0-RELEASE
#
export DESTARCH=
`uname -m`
#
export SOURCEURL=
http://ftp.freebsd.org/pub/
FreeBSD/releases/$DESTARCH/$DESTRELEASE/#
for set in base ports; do fetch $SOURCEURL/$set.txz ; done
Extraia os binários dos tarballs na mídia de instalação dentro do destino declarado. Minimamente, apenas o conjunto base precisa ser extraído, mas uma instalação completa pode ser executada quando preferida.
Para instalar apenas o sistema básico:
#
tar -xf /mnt/usr/freebsd-dist/base.txz -C $DESTDIR
Para instalar tudo, exceto o kernel:
#
for set in base ports; do tar -xf /mnt/usr/freebsd-dist/$set.txz -C $DESTDIR ; done
A página de manual jail(8) explica o procedimento para compilar uma jail:
#
setenv D
/here/is/the/jail
#
mkdir -p $D
![]()
#
cd /usr/src
#
make buildworld
![]()
#
make installworld DESTDIR=$D
![]()
#
make distribution DESTDIR=$D
![]()
#
mount -t devfs devfs $D/dev
Selecionar um local para uma jail é o melhor ponto de partida. É aqui que a jail residirá fisicamente no sistema de arquivos do host da jail. Uma boa opção pode ser | |
Se você já tiver recompilado seu userland usando | |
Esse comando preencherá a sub-árvore de diretórios escolhida como o local físico da jail no sistema de arquivos com os binários, bibliotecas, páginas de manual e assim por diante. | |
O target | |
A montagem do sistema de arquivos devfs(8) dentro de uma jail não é necessária. Por outro lado, qualquer, ou quase qualquer aplicativo requer acesso a pelo menos um dispositivo, dependendo da finalidade do aplicativo fornecido. É muito importante controlar o acesso a dispositivos de dentro de uma jail, pois configurações inadequadas podem permitir que um invasor faça coisas desagradáveis na jail. O controle sobre devfs(8) é gerenciado por meio de conjuntos de regras que são descritos nas páginas de manual devfs(8) e devfs.conf(5). |
Uma vez que a jail é instalada, ela pode ser iniciada usando o utilitário jail(8). O utilitário jail(8) possui quatro argumentos obrigatórios que são descritos em Seção 14.1, “Sinopse”. Outros argumentos podem ser especificados também, por exemplo, para executar o processo em jail com as credenciais de um usuário específico. O argumento de
depende do tipo de jail; para um sistema virtual, command
/etc/rc
é uma boa escolha, já que ele irá replicar a sequência de inicialização de um sistema real do FreeBSD. Para uma jail de serviço, depende do serviço ou aplicativo que será executado dentro da jail.
As jails geralmente são iniciadas no boot e o mecanismo rc
do FreeBSD fornece uma maneira fácil de fazer isso.
Configure os parâmetros da jail no arquivo jail.conf
:
www
{ host.hostname =www.example.org
; # Hostname ip4.addr =192.168.0.10
; # IP address of the jail path ="/usr/jail/www
"; # Path to the jail devfs_ruleset = "www_ruleset
"; # devfs ruleset mount.devfs; # Mount devfs inside the jail exec.start = "/bin/sh /etc/rc"; # Start command exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command }
Configure as jails para iniciar no boot no arquivo rc.conf
:
jail_enable="YES" # Set to NO to disable starting of any jails
A inicialização padrão das jails configuradas no arquivo jail.conf(5), executará o script /etc/rc
da jail, que assume que a jail é um sistema virtual completo. Para jails de serviço, o comando de inicialização padrão da jail deve ser alterado, definindo a opção exec.start
apropriadamente.
Para obter uma lista completa das opções disponíveis, consulte a página de manual jail.conf(5).
service(8) pode ser usado para iniciar ou parar uma jail manualmente, se uma entrada para ela existir no arquivo jail.conf
:
#
service jail start
www
#
service jail stop
www
As jails podem ser desligadas com o jexec(8). Use jls(8) para identificar o JID
da jail e, em seguida, use jexec(8) para executar o script de desligamento nessa jail.
#
jls
JID IP Address Hostname Path 3 192.168.0.10 www /usr/jail/www#
jexec
3
/etc/rc.shutdown
Mais informações sobre isso podem ser encontradas na página de manual jail(8).
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.