14.3. Criando e Controlando Jails
Anterior | Capítulo 14. Jails | Próxima

## 14.3. Criando e Controlando Jails

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 `/usr/jail/`jailname``, onde `jailname` é o nome do host que identifica a jail. Normalmente, `/usr/` tem espaço suficiente para o sistema de arquivos da jail, onde para jails “completa” é, essencialmente, uma replicação de todos os arquivos presentes em uma instalação padrão do sistema básico do FreeBSD.

| Se você já tiver recompilado seu userland usando `make world` ou `make buildworld`, você pode pular esta etapa e instalar seu userland existente na nova jail.
| 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 `distribuição` do make instala todos os arquivos de configuração necessários. Em palavras simples, ele instala cada arquivo instalável de `/usr/src/etc/` no diretório `/etc` do ambiente jail: `$D/etc/`.

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 ``command`` depende do tipo de jail; para um sistema virtual, `/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.

  ### Nota:

  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).

Anterior | Acima | Próxima
14.2. Termos Relacionados à Jails | Principal | 14.4. Tuning e Administração

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>.