FreeBSD Jail · 4 min read · Jan 24, 2026

Creare un Jail Con VNC Server Su FreeBSD

Creare un Jail Con VNC Server Su FreeBSD

Questo articolo spiega come puoi eseguire un server VNC all’interno di un jail su FreeBSD.

Creare un jail da sorgente:

Crea una directory dove i nostri jail saranno memorizzati:

# mkdir -p /home/jails

O nella directory /usr:

# mkdir -p /usr/jails
# mkdir /home/jails/testjail

Vai nella directory /usr/src e controlla se hai il codice sorgente di FreeBSD.

# cd /usr/src
# ls

Dovresti vedere qualcosa del genere:

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 hai una directory vuota o solo una directory sys devi installare il codice sorgente di FreeBSD:
Puoi farlo eseguendo sysinstall o scaricando il codice sorgente da cvs.

# sysinstall

Vai su configurazione, poi su distribuzioni e seleziona “src” e premi ok. Dopo di che dovresti avere tutto il codice sorgente nella directory /usr/src/. Poi dovresti aggiornare il tuo codice sorgente con l’ultima versione da cvs. Devi creare un file “stable-supfile” nella tua home directory o altrove.

# vi ~/stable-supfile

E metti dentro alcune righe come queste:

# Il tuo mirror più vicino del codice sorgente di freebsd, per me è dalla Polonia
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# per la versione 7.2 di FreeBSD metti 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

Successivamente, dopo aver salvato il file, puoi aggiornare il tuo codice sorgente di FreeBSD con csup:

# csup /root/stable-supfile

Dopo di che puoi compilare il tuo jail dal codice sorgente:

# cd /usr/src
# make world DESTDIR=/home/jails/testjail
# make distribution DESTDIR=/home/jails/testjail

Quando hai compilato World una volta, puoi creare nuovi jail con due comandi senza compilare nuovamente world:

# make installworld DESTDIR=/home/jails/otherjail
# make distribution DESTDIR=/home/jails/otherjail

Quando il tuo jail è pronto, devi fare alcune modifiche in alcuni file di configurazione.

# vi /home/jails/testjail/etc/rc.conf

E metti lì:

sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/
# touch /home/jails/testjail/etc/fstab

Eseguire il jail per la prima volta:

Per eseguire il jail devi montare devfs nel jail:

# mount -t devfs devfs /home/jails/testjail/dev

Poi devi configurare un alias per la tua interfaccia di rete. Nel mio FreeBSD ho l’interfaccia bge0 e l’alias lo creo in questo modo:

# ifconfig bge0 alias 192.168.2.2

Eseguendo il jail:

# jail /home/jails/testjail shell 192.168.2.2 /bin/tcsh

Quando sei nel jail puoi impostare una password di root:

# passwd

Poi devi aggiungere un account non-root che ti darà accesso al jail tramite ssh.

# adduser

Per uscire dal jail devi usare il comando exit.

# exit

Il tuo jail è quasi pronto. Devi aggiungere alcune righe al file /etc/rc.conf e dopo di che il tuo jail si avvierà quando il tuo server si avvierà.

# alias per la tua interfaccia di rete
ifconfig_bge0_alias0="192.168.2.2"
# riga che abilita i jail in freebsd
jail_enable="yes"
# elenco dei tuoi jail es. “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 vuoi avere l’albero delle porte nel jail e non vuoi replicarlo, possiamo montare la directory /usr/ports/ nel jail con una riga nel file /etc/fstab. Una riga come questa:

/usr/ports              /home/jails/testjail/usr/ports/         nullfs  rw,auto 0 0

Avviando e fermando i jail senza riavviare il sistema:

# /etc/rc.d/jail start testjail
# /etc/rc.d/jail stop testjail

Se vuoi ottenere un elenco dei tuoi jail puoi ottenerlo con questo comando:

# jls

Installando xorg e vnc nel jail dai pacchetti:

# pkg_add –r xorg
# pkg_add –r vnc

Per eseguire vnc con l’account utente scrivi:

$ vncserver

Quando esegui per la prima volta vncserver devi impostare una password per la connessione vnc.

Di default, quando ti connetti a vnc, verrà eseguito twm. Puoi cambiarlo modificando il file ~/.vnc/xstartup. Devi cambiare l’ultima riga da „twm &” a es. „wmaker &” per l’ambiente WindowMaker.

Per connetterti al jail vnc devi scrivere in vncviewer jail_ip_address e porta vnc. Es. 192.168.2.2:1

Alcuni errori con vnc nel jail: Quando hai un messaggio di colori non riconosciuti devi modificare il file /usr/local/bin/vncserwer e cambiare la riga:

$cmd .= " -co /usr/X11R6/lib/X11/rgb";  

Quando abbiamo il messaggio
!!!!!!!!!!!!!!!!!!!!!!!!!!
nessun display libero su jailname

Devi modificare /usr/local/bin/vncserver e cambiare la funzione pack in sockaddr_in in due righe nella funzione CheckDisplayNumber:

[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]

Il codice dovrebbe essere così:

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

Port forwarding in IPWF per i jail

Se vuoi inoltrare alcune porte al jail devi avere compilato un kernel FreeBSD con alcune opzioni abilitate:

options  IPFIREWALL
options  IPFIREWALL_DEFAULT_TO_ACCEPT
options  IPFIREWALL_VERBOSE
options  IPFIREWALL_FORWARD
options  IPDIVERT

Regola di port forwarding:

ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
es.
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
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.