Kullanıcı Aletleri

Site Aletleri


tr:cs:op:bsd:jail

FreeBSD Jail

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.

  • FreeBSD sisteminizde internet erişimi gerekmektedir.
  • Yazı boyunca kullanılan __JAİL_ADI__ sizin belirleyeceğiniz bir isim olacaktır. Örnek komutlarda uch32bitjail ismi kullanılmıştır.
  • Yazı boyunca kullanılan __VERSİYON__ kuracağınız jail'in FreeBSD sürümüdür. Örnek komutlarda kullanılan sürüm 13.2-RELEASE'dir.
  • Yazı boyunca kullanılan __MİMARİ__ kuracağınız jail'in FreeBSD mimarisidir. Örnek komutlarda kullanılan mimari i386'dir.
    • Örnek komutlar amd64 mimarisi içerisinde i386 jail kurulumu için kullanılmıştır.

FreeBSD Jail Kurulumu

Jail kurulum aşamaları şu şekilde sıralanabilir.

  1. Klasörlerin oluşturulması.
  2. Gerekli base arşivinin indirilmesi.
  3. Ana sistem üzerinde ayarların yapılması.
  4. Jail yapılandırma dosyalarının oluşturulması ve düzenlenmesi.

Klasör Yapısı

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.

Gerekli Dosyaların İndirilmesi

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.

  • Gerekli dosyaları indirmek için aşağıdaki komutu düzenleyerek çalıştırın.
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
  • İndirilen base arşivini ilgili jail konumuna çıkartmak için aşağıdaki komutu düzenleyerek çalıştırın.
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
  • Eğer disk alanınız az ise, indirilen dosyaları silmek için aşağıdaki komutu çalıştırabilirsiniz. Yeni jail kurmak için yeniden indirmeniz gerekir.
rm -f /usr/jails/files/__VERSION__-__MİMARİ__-base.txz
Örnek;
rm -f /usr/jails/files/13.2-RELEASE-i386-base.txz

Ana Sistem Ayarları

Jail'lerin çalışması için ana sistem üzerinde bazı ayarlamalar yapılması gerekmektedir.

  • Jail için internet bağlantısı ve saat ayarlarını direkt olarak ana sistemden kopyalanması gerekmektedir. Aşağıdaki komutu düzenleyerek çalıştırın.
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
  • Jail için olası güncelleştirmeleri almak için aşağıdaki komutu düzenleyerek çalıştırın.
freebsd-update -b /usr/jails/__JAİL_ADI__/ fetch install
Örnek;
freebsd-update -b /usr/jails/rtfi32bitjail/ fetch install
  • Makine başladığında jail'lerin otomatik olarak başlamasını istiyorsanız aşağıdaki komutu çalıştırın.1)
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.

VNET Ayarları

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.

  • Bağdaştırıcı köprüsü oluşturmak için aşağıdaki komutu çalıştırın.
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 olarak bridge0
  • Köprü oluşturulduktan sonra aşağıdaki komutu çalıştırarak onu em0 arayüzüne eklemek gerekecektir:
Burada em0 cihazın bağdaştırıcı ismidir. Sizin sisteminizde bu isim farklı olabilir. Öğrenmek için ifconfig komutunu kullanabilirsiniz.

Aşağıda örnek bir çıktı bulunmaktadır. Vurgulanan satırda ismi görebilirsiniz.
  1. em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  2. options=481009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER,NOMAP>
  3. ether 08:00:27:06:c2:65
  4. inet 192.168.1.47 netmask 0xffffff00 broadcast 192.168.1.255
  5. media: Ethernet autoselect (1000baseT <full-duplex>)
  6. status: active
  7. nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
  • Aşağıdaki komutu çalıştırın ve köprüyü em0 arayüzüne ekleyin. Burada bridge0 bir önceki komutta oluşturulan köprü ismidir. em0 ise ana sistemdeki ağ arayüzüdür.
ifconfig bridge0 addm em0
  • Bu işlemlerin her başlangıçta otomatik gerçekleşmesi için /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 Konfigürasyonu

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.

Birinci Yol

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.

İkinci Yol

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.

/etc/jail.conf
__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";
}

Jail Yönetimi

  • Sistemde çalışmakta olan jail'leri listelemek için aşağıdaki komutu kullanabilirsiniz.
jls
  • Jail'i başlatmak için aşağıdaki komutu kullanabilirsiniz. Eğer başlangıçta otomatik başlatmak için ayar yapmadıysanız bir alttaki komutu kullanmak zorundasınız.
service jail start __JAİL_ADI__
service jail onestart __JAİL_ADI__
  • Jail'i durdurmak için aşağıdaki komutu kullanabilirsiniz.
service jail stop __JAİL_ADI__
  • Jail'i yeniden başlatmak için aşağıdaki komutu kullanabilirsiniz.
service jail restart __JAİL_ADI__

Jail'i Silme

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.

  • İlk olarak sileceğinizi jaili durdurun. Daha sonra aşağıdaki komutu jail'inize göre çalıştırın ve dosya bayraklarını değiştirin.
chflags -R 0 /usr/jails/__JAİL_ADI__
  • Artık jail klasörünü aşağıdaki komutla silebilirsiniz.
rm -rf /usr/jails/__JAİL_ADI__
  • Son olarak ilgili jail'e ait konfigürasyon dosyasını silerek silme işlemini tamamlayın. Birinci yol ile konfigürasyon sağladıysanız. /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.

Jail Paket Yönetimi

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

Jail Erişimi

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ırma

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

1)
Eğer manuel olarak başlatmak istiyorsanız bu adımı es geçiniz. Jail'i başlatma komutu bu aşamaya göre değişecektir.
2)
Hiç internet bağlantısı olmaması veya ana sistemle aynı ip'yi paylaşması
3)
Bu yazıda vnet ile jail'lere internet erişimi verildiği için bu kısım atlanmıştır.
tr/cs/op/bsd/jail.txt · Son değiştirilme: 2025/05/04 17:45 Değiştiren: ulascemh