FreeBSD Jail · 4 min read · Jan 24, 2026
Criando Uma Jail Com Servidor VNC No FreeBSD
Criando Uma Jail Com Servidor VNC No FreeBSD
Este artigo explica como você pode executar um servidor VNC de dentro de uma jail no FreeBSD.
Criando jail a partir do código-fonte:
Crie um diretório onde nossas jails serão armazenadas:
# mkdir -p /home/jailsOu no diretório /usr:
# mkdir -p /usr/jails# mkdir /home/jails/testjailVá para o diretório /usr/src e verifique se você tem o código-fonte do FreeBSD.
# cd /usr/src# lsVocê deve ver algo assim:
COPYRIGHT contrib release
LOCKS crypto rescue
MAINTAINERS etc sbin
Makefile games secure
Makefile.inc1 gnu share
ObsoleteFiles.inc include sys
README kerberos5 tools
UPDATING lib usr.bin
bin libexec usr.sbin
Se você tiver um diretório vazio ou apenas um diretório sys, você deve instalar o código-fonte do FreeBSD:
Você pode fazer isso executando sysinstall ou baixar o código-fonte do cvs.
# sysinstallVá para configuração, depois para distribuições e selecione “src” e pressione ok. Depois disso, você deve ter todo o código-fonte no diretório /usr/src/. Então você deve atualizar seu código-fonte com a versão mais recente do cvs. Você deve criar um arquivo “stable-supfile” no seu diretório home ou em outro lugar.
# vi ~/stable-supfileE coloque algumas linhas assim:
# Seu espelho mais próximo do código-fonte do freebsd, para mim é da Polônia
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# para a versão 7.2 do FreeBSD você coloca RELENG_7_2 7.1 - RELENG_7_1 7.0 - RELENG_7_0 6.4 RELENG_6_4
*default release=cvs tag=RELENG_7_2
*default delete use-rel-suffix
*default compress
src-all
Em seguida, após salvar o arquivo, você pode atualizar seu código-fonte do FreeBSD com csup:
# csup /root/stable-supfileDepois disso, você pode compilar sua jail a partir do código-fonte:
# cd /usr/src# make world DESTDIR=/home/jails/testjail# make distribution DESTDIR=/home/jails/testjailQuando você compilar o World uma vez, pode criar novas jails com dois comandos sem compilar o world novamente:
# make installworld DESTDIR=/home/jails/otherjail# make distribution DESTDIR=/home/jails/otherjailQuando sua jail estiver preparada, você deve fazer algumas alterações em alguns arquivos de configuração.
# vi /home/jails/testjail/etc/rc.confE você coloca lá:
sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstabExecutando a jail pela primeira vez:
Para executar a jail, você deve montar devfs na jail:
# mount -t devfs devfs /home/jails/testjail/devEntão você deve configurar um alias para sua interface de rede. No meu FreeBSD, eu tenho a interface bge0 e o alias que criei assim:
# ifconfig bge0 alias 192.168.2.2Executando a jail:
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcshQuando você estiver na jail, pode definir uma senha de root:
# passwdEntão você deve adicionar uma conta não-root que lhe dará acesso à jail via ssh.
# adduserPara sair da jail, você deve usar o comando exit.
# exitSua jail está quase pronta. Você deve adicionar algumas linhas ao arquivo /etc/rc.conf e, após isso, sua jail será iniciada quando seu servidor for iniciado.
# alias para sua interface de rede
ifconfig_bge0_alias0="192.168.2.2"
# linha que habilita jails no freebsd
jail_enable="yes"
# lista de suas jails ex. “testjail otherjail httpjail sshjail”
jail_list="testjail"
jail_testjail_rootdir="/home/jails/testjail"
jail_testjail_hostname="testjail"
jail_testjail_ip="192.168.2.2"
jail_testjail_exec_start="/bin/sh /etc/rc"
jail_testjail_exec_stop="/bin/sh /etc/rc.shutdown"
jail_testjail_devfs_enable="YES"
Se você quiser ter a árvore de ports na jail e não quiser replicá-la, podemos montar o diretório /usr/ports/ na jail com uma linha no arquivo /etc/fstab. Linha assim:
/usr/ports /home/jails/testjail/usr/ports/ nullfs rw,auto 0 0
Iniciando e parando jails sem reiniciar o sistema:
# /etc/rc.d/jail start testjail# /etc/rc.d/jail stop testjailSe você quiser obter uma lista de suas jails, pode obtê-la com este comando:
# jlsInstalando xorg e vnc na jail a partir de pacotes:
# pkg_add –r xorg# pkg_add –r vncPara executar vnc na conta de usuário, você escreve:
$ vncserverQuando você executar o vncserver pela primeira vez, deve configurar uma senha para a conexão vnc.
Por padrão, quando você se conecta ao vnc, será executado o twm. Você pode mudar isso editando o arquivo ~/.vnc/xstartup. Você deve mudar a última linha de „twm &” para ex. „wmaker &” para o ambiente WindowMaker.
Para se conectar à jail vnc, você deve escrever no vncviewer jail_ip_address e a porta vnc. Ex. 192.168.2.2:1
Alguns erros com vnc na jail: Quando você tiver uma mensagem de cores não reconhecidas, deve editar o arquivo /usr/local/bin/vncserwer e mudar a linha:
$cmd .= " -co /usr/X11R6/lib/X11/rgb";
Quando tivermos a mensagem
!!!!!!!!!!!!!!!!!!!!!!!!!!
sem exibição livre na jailname
Você deve editar /usr/local/bin/vncserver e mudar a função pack para sockaddr_in em duas linhas na função CheckDisplayNumber:
[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]O código deve ser assim:
sub CheckDisplayNumber
{
local ($n) = @_;
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(6000 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(5900 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
Encaminhamento de portas no IPWF para jails
Se você quiser encaminhar algumas portas para a jail, deve ter compilado um kernel do FreeBSD com algumas opções habilitadas:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_FORWARD
options IPDIVERT
Regra de encaminhamento de porta:
ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
ex.
ipfw add fwd 192.168.2.2,21 tcp from any to me 21
ipfw add fwd 192.168.2.2,21 tcp from any to 72.46.154.23 21
``Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.