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/jailsO nella directory /usr:
# mkdir -p /usr/jails# mkdir /home/jails/testjailVai nella directory /usr/src e controlla se hai il codice sorgente di FreeBSD.
# cd /usr/src# lsDovresti 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.
# sysinstallVai 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-supfileE 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-supfileDopo di che puoi compilare il tuo jail dal codice sorgente:
# cd /usr/src# make world DESTDIR=/home/jails/testjail# make distribution DESTDIR=/home/jails/testjailQuando 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/otherjailQuando il tuo jail è pronto, devi fare alcune modifiche in alcuni file di configurazione.
# vi /home/jails/testjail/etc/rc.confE metti lì:
sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstabEseguire il jail per la prima volta:
Per eseguire il jail devi montare devfs nel jail:
# mount -t devfs devfs /home/jails/testjail/devPoi 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.2Eseguendo il jail:
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcshQuando sei nel jail puoi impostare una password di root:
# passwdPoi devi aggiungere un account non-root che ti darà accesso al jail tramite ssh.
# adduserPer uscire dal jail devi usare il comando exit.
# exitIl 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 testjailSe vuoi ottenere un elenco dei tuoi jail puoi ottenerlo con questo comando:
# jlsInstallando xorg e vnc nel jail dai pacchetti:
# pkg_add –r xorg# pkg_add –r vncPer eseguire vnc con l’account utente scrivi:
$ vncserverQuando 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
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.