FreeBSD sistemimiz içersinde sanal bir sistem oluşturmak için kullanılan bir yöntemdir. Bu yöntem ile oluşturulan sistemler, ana sistemden tamamen bağımsızdır. Bu sayede olası bir güvenlik açığından etkilenmezler. Ayrıca jail içerisinde çalışan bir servis ele geçirildiğinde, ana sistemde çalışan servisler etkilenmez.
Jail'ler bir tür işletim sistemi düzeyinde sanallaştırma olarak düşünülebilir.
FreeBSD'yi diğer işletim sistemlerinden güvenlik açısından öne çıkaran bir sistemdir.
Bu sayfada anlatılan kurulum ve kullanım bilgileri. Thick Jail olarak isimlendirilen tamami ile ayrı bir yapı oluşturulması ile ilgilidir.
Ayrıca VNET özellikleride kullanılarak Jail'lerin ayrı bir ağda çalışması sağlanacaktır.
Kurulan jail temel FreeBSD dosyalarının hepsine sahip olacaktır.
Jail'de çalışan FreeBSD sürümü ana sistemde çalışan FreeBSD sürümden daha güncel olamaz.
Bu yazıda Jail kurulumu, kullanımı ve yönetimi anlatılacaktır.
__JAİL_ADI__
sizin belirleyeceğiniz bir isim olacaktır. Örnek komutlarda uch32bitjail ismi kullanılmıştır.__VERSİYON__
kuracağınız jail'in FreeBSD sürümüdür. Örnek komutlarda kullanılan sürüm 13.2-RELEASE'dir.__MİMARİ__
kuracağınız jail'in FreeBSD mimarisidir. Örnek komutlarda kullanılan mimari i386'dir.Jail kurulum aşamaları şu şekilde sıralanabilir.
Jail'lerin özellikle belirli bir dizinde tutulma zorunluğu bulunmamaktadır. Yazdıda /usr/jails
dizinini kullanılacaktır. İsterseniz değiştirebilirsiniz…
Aşağıdaki komutta gerekli yerleri değiştirerek çalıştırın ve klasörleri oluşturun.
mkdir -p /usr/jails/files mkdir /usr/jails/__JAİL_ADI__
-p
parametresi recursive olarak klasörleri oluşturur. Yani /usr/jails
klasörü yoksa onu da oluşturur.
Gerektiğinde tekrardan indirme gerekmemesi için indirilen dosyaları /usr/jails/files
konumunda tutulacaktır.
İhtiyaç halinde hızlıca yeni bir jail kurmak için kullanabilirsiniz. Ancak alan sıkıntısı çekiyorsanız bu dosyaları her jail kurulumunda tekrardan indirebilirsiniz.
fetch https://download.freebsd.org/ftp/releases/__MİMARİ__/__MİMARİ__/__VERSION__/base.txz -o /usr/jails/files/__VERSION__-__MİMARİ__-base.txzÖrnek;
fetch https://download.freebsd.org/ftp/releases/i386/i386/13.2-RELEASE/base.txz -o /usr/jails/files/13.2-RELEASE-i386-base.txz
tar -xpf /usr/jails/files/__VERSION__-__MİMARİ__-base.txz -C /usr/jails/__JAİL_ADI__ --unlinkÖrnek;
tar -xpf /usr/jails/files/13.2-RELEASE-i386-base.txz -C /usr/jails/rtfi32bitjail --unlink
rm -f /usr/jails/files/__VERSION__-__MİMARİ__-base.txzÖrnek;
rm -f /usr/jails/files/13.2-RELEASE-i386-base.txz
Jail'lerin çalışması için ana sistem üzerinde bazı ayarlamalar yapılması gerekmektedir.
cp /etc/resolv.conf /usr/jails/__JAİL_ADI__/etc/resolv.conf cp /etc/localtime /usr/jails/__JAİL_ADI__/etc/localtimeÖrnek;
cp /etc/resolv.conf /usr/jails/rtfi32bitjail/etc/resolv.conf cp /etc/localtime /usr/jails/rtfi32bitjail/etc/localtime
freebsd-update -b /usr/jails/__JAİL_ADI__/ fetch installÖrnek;
freebsd-update -b /usr/jails/rtfi32bitjail/ fetch install
sysrc jail_enable="YES" # Başlangıçta jailleri başlatmak için. sysrc jail_parallel_start="YES" # Bu satırıda eklerseniz, jailler arkaplanda başlatılır.
Yazıda hazırlanan jail, ana sistemden tamamen bağımsız olarak hazırlanmaktadır. Bu yüzden jail'in ayrı bir ağda çalışması gerekmektedir. Bunun için VNET kullanılacaktır.
Eğer jail'inizde ayrı bir ağ üzerinden internet erişimi olmasını istemiyorsanız2) bu kısmı atlayabilirsiniz.
ifconfig bridge create
Size bir çıktı vermesi gerekmektedir. Bu çıktıda köprü bağdaştırıcının ismi bulunmaktadır. Bu ismi bir yere not edin.Örnek olarakbridge0
em0
arayüzüne eklemek gerekecektir:Buradaem0
cihazın bağdaştırıcı ismidir. Sizin sisteminizde bu isim farklı olabilir. Öğrenmek içinifconfig
komutunu kullanabilirsiniz.
Aşağıda örnek bir çıktı bulunmaktadır. Vurgulanan satırda ismi görebilirsiniz.
em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=481009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER,NOMAP> ether 08:00:27:06:c2:65 inet 192.168.1.47 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
bridge0
bir önceki komutta oluşturulan köprü ismidir. em0
ise ana sistemdeki ağ arayüzüdür.ifconfig bridge0 addm em0
/etc/rc.conf
dosyasına aşağıdaki satırları ekleyin.defaultrouter="192.168.1.1" cloned_interfaces="bridge0" ifconfig_bridge0="inet 192.168.1.150/24 addm em0 up"
Jail'ler için konfigürasyon dosyalarını ayarlamanın iki yolu bulunmaktadır. Eğer çok fazla jail kullanacaksanız ikinci yolu tercih etmeniz daha mantıklı olacaktır.
Konfigürasyon bilgileri tek bir dosyada tutulur. Bu dosya /etc/jail.conf
dosyasıdır.
Her yeni jail için bu dosyaya yeni girdiler eklemeniz gerekmektedir.
Konfigürasyon bilgileri her jail için ayrı bir dosyada tutulur. Bu dosyalar /etc/jail.conf.d/
klasörü içerisinde tutulur.
Her yeni jail için bu klasöre yeni bir dosya oluşturmanız gerekmektedir. Eğer çok sayıda jail bulunuyorsa bu yöntem karışıklığı önler.
Seçilen yönteme göre konfigürasyon dosyasını açın ve vurgulanan satırları düzenleyerek ekleyin.
Detaylı bilgiler yorum olarak yanlarına yazılmıştır.
Oluşturulacak olan dosyalarda satır sonlarına dikkat ediniz. CRLF yerine LF kullanınız. Aksi taktirde istenmeyen sonuçlar oluşabilir.
__JAİL_ADI__ { # Jail'in ismi exec.start = "/bin/sh /etc/rc"; # Jail başlatıldığında çalıştırılacak olan komutlar. exec.stop = "/bin/sh /etc/rc.shutdown"; # Jail kapatıldığında çalıştırılacak olan komutlar. exec.consolelog = "/var/log/jail_console_${name}.log"; # Komu çıktılarının yazılacağı dosya. allow.raw_sockets; # Raw soketlerin kullanılmasına izin verir. (ping gibi) exec.clean; # Komutları temiz bir ortamda çalıştırılması. mount.devfs; # /dev dizinine bir devfs(5) dosya sistemi ekleme. host.hostname = "${name}"; path = "/usr/jails/${name}"; # Komutların çalıştırılacağı dizin. Kısaca jail'in kurulu olduğu dizin. vnet; vnet.interface = "${epair}b"; $id = "154"; # Ip adresinin son kısmını hesaplayacak olan değer. Her jail için farklı olmalıdır. $ip = "192.168.1.${id}/24"; $gateway = "192.168.1.1"; $bridge = "bridge0"; # vnet ayarlamalarında oluşturulan köprü ismi. $epair = "epair${id}"; exec.prestart += "ifconfig ${epair} create up"; exec.prestart += "ifconfig ${epair}a up descr jail:${name}"; exec.prestart += "ifconfig ${bridge} addm ${epair}a up"; exec.start += "ifconfig ${epair}b ${ip} up"; exec.start += "route add default ${gateway}"; exec.poststop = "ifconfig ${bridge} deletem ${epair}a"; exec.poststop += "ifconfig ${epair}a destroy"; }
jls
service jail start __JAİL_ADI__ service jail onestart __JAİL_ADI__
service jail stop __JAİL_ADI__
service jail restart __JAİL_ADI__
FreeBSD işletim sisteminde güvenlik birinci planda olduğundan bazı dosyaları silmek için root yetkisi bile yeterli değildir. Bu sistemi dosya bayrakları kontrol eder.
chflags -R 0 /usr/jails/__JAİL_ADI__
rm -rf /usr/jails/__JAİL_ADI__
/etc/jail.conf
dosyasını düzenleyin. İkinci yol ile konfigürasyon sağladıysanız. /etc/jail.conf.d/JAİL_ADI.conf
dosyasını silin.Eğer jail'inize internet erişimi vermediyseniz.3) Ana sistemden jail'e paket kurmak için aşağıdaki komutu kullanabilirsiniz.
pkg -j __JAİL_ADI__ install __PAKET_ADI__Örnek;
pkg -j rtfi32bitjail install wget
Ana sistem üzerinden jail yönetimi daha uygun olsada, isterseniz jail içerisine aşağıdaki komutla erişebilirsiniz.
jexec -u root __JAIL_ISMI__
Jail üzerinde komut çalıştırmak için çalıştıracağınız komuta aşağıdaki ön eki eklemeniz gerekmektedir.
jexec -l __JAİL_ADI__ __KOMUT__
Örnek;
jexec -l rtfi32bitjail service stop apache24
UCH Viki'den alınmıştır. https://wiki.ulascemh.com/doku.php?id=tr:cs:op:bsd:jail