Jailed Environment Project
Ik ben bezig met een omgeving op te zetten die onder een bestaande omgeving draait. Hierbij kan je iedereen root access geven zonder dat zij de bovenliggende omgeving kunnen beschadigen. Op deze manier kan je dus zorgen dat mensen hun eigen omgeving zo kunnen configureren als zij willen. Tevens kunnen ze binnen deze jail experimenteren en als het fout gaat kan de jail vrij snel terug gezet worden. Oftewel prutsen zonder het écht
te verprusten.
Bij dit project gaat het mij er om om een zo veilig mogelijke omgeving te bouwen.
Wil je mee doen met dit project‚ je eigen ervaringen met jail delen‚ stuur dan een mailtje naar jep@laagje.net of plaats commentaar onderaan deze howto.
In deze howto gaan we een omgeving opzetten die onder een bestaande omgeving draait. Zorg dat je een aantal films klaar hebt liggen want het opzetten duurt een tijd.
We gaan een directory maken waaronder alle jails die je wilt hebben komen. Tevens zetten we een variable waar in staat waar we de jail neer willen zetten.
[shell]
# mkdir /jails/
# mkdir /jails/jailnaam
# D=/jails/jailnaam
[/shell]
Het volgende wat we gaan doen is het aan maken van de file tree die op een normale omgeving ook aanwezig is‚ nu alleen binnen de jail. Daarna gaan we de sources compilen en op de juiste plek laten neerzetten. Nu kan je gerust een filmpje gaan kijken of een taart bakken als je niet zo’n super snel systeem hebt.
[shell]
# cd /usr/src
# make hierarchy DESTDIR=$D
# make obj
# make depend
# make all
# make install DESTDIR=$D
[/shell]
Nu gaan we de default configuratie files neerzetten in /jails/jailnaam/etc/ (dit wordt dus binnen de jail /etc/).
[shell]
# cd /usr/src/etc/
# make distribution DESTDIR=$D NO_MAKEDEV=yes
[/shell]
Nu gaan we de benodige devices aanmaken binnen de jail. Omdat de jail zelf ook wat restricties heeft moeten we aangeven dat het een jail betreft. Binnen een jail mag je bijvoorbeeld niet bovenliggende schijven mounten of fdisk gebruiken.
[shell]
# cd $D/DEV/
# cp /dev/MAKEDEV .
# sh MAKEDEV jail
[/shell]
Omdat de kernel van de bovenliggende omgeving gebruikt wordt‚ moeten we in dit geval /dev/null linken aan de kernel.
[shell]
# cd $D
# ln -sf dev/null kernel
[/shell]
Voordat we de jail kunnen starten moeten we aan het bovenliggende systeem nog een aantal dingen veranderen. Bij deze situatie ga ik er vanuit dat het base systeem ip 192.168.1.1 heeft en de jail 192.168.1.2 krijgt. Nu moeten we er voor zorgen dat 192.168.1.2 dedicated door de jail gebruikt kan worden. Ik laat even zien hoe je ervoor zorgt dat syslogd‚ named‚ inetd‚ mysql‚ apache en sshd op 192.168.1.1 luisteren en niet op de andere. Zelf moet je controleren dat er verder geen andere applicaties gebruik maken van het ip dat bedoelt is voor de jail.
De volgende configuratie bestanden moet je op het base systeem editten.
/etc/rc.conf
[file]
syslogd_flags=”-ss”
inetd_flags=”-wW -a 192.168.1.1″
[/file]
/etc/ssh/sshd_config
[file]
ListenAddress 192.168.1.1
[/file]
/etc/namedb/named.conf
[file]
options
{
listen-on { 192.168.1.1; };
}
[/file]
/usr/local/etc/rc.d/mysql-server.sh
[file]
start)
if [ -x /usr/local/bin/safe_mysqld ]; then
/usr/local/bin/safe_mysqld –user=mysql –bind-address=192.168.1.1 > /dev/null & && echo -n ‘ mysql$
fi
;;
[/file]
/usr/local/etc/apache/httpd.conf
[file]
Listen 192.168.1.1:80
[/file]
Nu gaan we de jail zelf configureren.
Als je het met de hand wilt doen kan dat‚ maar we kopieren voor de zekerheid even sysinstall naar de jail.
[shell]
# cp /stand/sysinstall /jails/jailnaam/stand/
[/shell]
Nu gaan we de jail voor de eerste keer starten maar voordat we dat doen zorgen we wel dat het ip dat de jail
moet gaan gebruiken aanwezig is.
[shell]
# ifconfig
[/shell]
Daar gaat ie:
[shell]
# jail $D jailnaam.domein 192.168.1.2 /bin/sh
[/shell]
Je komt nu in de jail binnen als root. Nu kan je beginnen met het configureren van de jail. Doe dit via /stand/sysinstall of handmatig. Vergeet niet ssh te configureren binnen de jail en een gebruiker toe te voegen!
Als je klaar bent gaan we de jail echt in de achtergrond laten draaien:
[shell]
# exit
# jail $D jailnaam.domain 192.168.1.2 /bin/sh /etc/rc
[/shell]
Nu draait de jail in de achtergrond. Probeer eens te ssh-en naar het jail ip!
Succes! Ik wil graag horen hoe jullie bevindingen zijn met jail. Als jullie vragen/ideeën of commentaar hebben hoor ik het graag!
Groeten‚
Laagje
Ook op IRC te vinden
Anonymous says
Moet bij de laatste regel het ip van het host systeem gebruikt worden ??
moet om de jail in de achtergrond te laten draaien ook niet gewoon 192.168.1.2 gebruikt worden ?
Anonymous says
Je hebt helemaal gelijk 🙂
*foutje*
Anonymous says
hoe kan ik de jail nou automatich laten starten na een reboot ?
Santium says
/etc/rc.local gebruiken ofzo he 😉
Maar ik moet zeggen, er gaat een wereld voor me open op dit moment! 🙂
Laagje says
Voor de gene die de ports uit het base systeem willen gebruiken binnen de jail.
Toevoegen op 192.168.1.1 in /etc/fstab
/usr/ports /jail/jailnaam/usr/ports null rw 0 0
Anonymous says
ow ennuh, jep at laagje.nl werkt niet meer ivm spammmmmmmmmmm
try r.v.gogh at laagje.nl
DimSum says
Het is me na 5x proberen eindelijk gelukt 🙂
Ik heb af en toe ook in deze tutorial gespiekt:
http://jailnotes.cg.nu/
Beiden waren een grote hulp voor me.
Anonymous says
paar fbsd 5.3 bevindingen…
bij het ifconfig alias statement moet je netmask 255.255.255.255 gebruiken
MAKEDEV lijkt niet meer mogelijk … nodig ??
Anonymous says
mount_devfs devfs $D/dev
moet gebruikt worden ipv de oude methode….
Laagje says
ahja… Howto is redelijk outdated… Zal em soon ff updaten…
guest says
Laagje, ik zit te wachten op een update!