Chroot Ortamına Giriş
Bir Chroot ortamı, “change root” (kök dizini değiştir) kelimelerinin kısaltmasıdır ve bir programın veya kullanıcının erişebileceği işletim sistemi dosya hiyerarşisinin kök dizinini değiştirmek için kullanılan bir Unix işletim sistemi işlemidir. Bu işlem, programın sanki kendi izole edilmiş bir işletim sistemi içinde çalışıyormuş gibi hissetmesini sağlar, ancak aslında ana sistemin çekirdeğini (kernel) kullanır.
Neden Chroot Ortamı Kullanmalısınız?
Chroot ortamları, özellikle test ve geliştirme senaryolarında bir dizi avantaj sunar:
- İzolasyon: Test ettiğiniz yazılımların veya yaptığınız değişikliklerin ana sisteminize zarar vermesini engeller. Chroot içindeki hatalar veya yanlış yapılandırmalar, ana sisteminizi etkilemez.
- Bağımlılık Yönetimi: Farklı yazılımlar için farklı bağımlılık setleri gerektiren projeler üzerinde çalışırken, her bir projeyi kendi izole ortamında tutmak, bağımlılık çakışmalarını önler.
- Güvenlik (Sınırlı): Bir chroot ortamı tam bir güvenlik duvarı olmasa da, kötü niyetli bir sürecin ana dosya sistemine erişimini kısıtlayarak ek bir güvenlik katmanı sağlar. Ancak, chroot’tan kaçış yöntemleri bulunduğundan, hassas uygulamalar için tam bir güvenlik çözümü değildir.
- Eski Uygulamaları Çalıştırma: Ana sisteminizde artık desteklenmeyen veya güncel olmayan kütüphanelere ihtiyaç duyan eski uygulamaları çalıştırmak için kullanılabilir.
- Temiz Test Ortamı: Her zaman temiz bir başlangıç noktasına sahip olmak, yazılım testleri için çok değerlidir.
Bu rehberde, Ubuntu 12.04 VPS üzerinde bir chroot ortamını adım adım nasıl yapılandıracağınızı öğreneceksiniz. Ubuntu 12.04 eski bir sürüm olmasına rağmen, belirtilen gereksinimler doğrultusunda bu sürüm için pratik uygulamaları göstereceğiz. Temel prensipler, daha yeni Ubuntu sürümleri için de geçerlidir, ancak bazı paket adları veya depolar farklılık gösterebilir.
Ön Gereksinimler ve Hazırlık
Chroot ortamınızı kurmaya başlamadan önce, bazı temel ön gereksinimlere ve hazırlık adımlarına ihtiyacınız var.
VPS Erişimi ve Yetkiler
Ubuntu 12.04 VPS’inize SSH üzerinden erişiminiz olmalı ve root yetkilerine (veya sudo kullanma yeteneğine) sahip olmalısınız. Tüm komutlar root kullanıcısı olarak veya sudo öneki ile çalıştırılacaktır.
Sistem Güncellemesi
Başlamadan önce, ana sisteminizin paket listesini güncelleyip mevcut paketleri yükseltmek iyi bir uygulamadır:
sudo apt-get update
sudo apt-get upgrade -y
Gerekli Paketlerin Kurulumu
Chroot ortamınızı oluşturmak için debootstrap paketine ihtiyacımız olacak. debootstrap, bir Debian veya Ubuntu sisteminin temel dizin yapısını ve minimum paket setini oluşturmak için kullanılan bir araçtır.
sudo apt-get install debootstrap -y
Chroot Dizin Yapısının Belirlenmesi
Chroot ortamınızın nerede barındırılacağını belirlemeniz gerekir. Genellikle /srv/chroot veya /var/chroot gibi bir konum tercih edilir. Biz bu rehberde /srv/chroot/ubuntu1204 yolunu kullanacağız.
sudo mkdir -p /srv/chroot/ubuntu1204
Chroot Ortamını Oluşturma
Şimdi, debootstrap kullanarak Ubuntu 12.04 için temel bir chroot ortamı oluşturalım.
Debootstrap ile Temel Sistemi Kurma
debootstrap komutunu kullanarak, belirtilen mimari (amd64), Ubuntu sürümü (precise – 12.04 kod adı), hedef dizin ve bir depo URL’si ile temel sistemi kuracağız. Ubuntu 12.04 eski bir sürüm olduğu için, standart depo yerine old-releases.ubuntu.com adresini kullanmamız gerekmektedir.
sudo debootstrap --arch amd64 precise /srv/chroot/ubuntu1204 http://old-releases.ubuntu.com/ubuntu/
--arch amd64: 64-bit mimariyi belirtir. VPS’inizin mimarisine uygun olduğundan emin olun.precise: Ubuntu 12.04’ün kod adıdır./srv/chroot/ubuntu1204: Chroot ortamının kurulacağı hedef dizindir.http://old-releases.ubuntu.com/ubuntu/: Ubuntu 12.04 paketlerinin bulunduğu arşiv deposu URL’sidir.
Bu komutun tamamlanması biraz zaman alabilir, çünkü temel sistem paketlerini indirip kuracaktır.
Chroot Ortamını Yapılandırma ve Kullanma
Temel sistem kurulduktan sonra, chroot ortamının işlevsel hale gelmesi için bazı ek yapılandırmalar yapmamız gerekiyor.
Temel Dosya Sistemlerini Bağlama (Mount Etme)
Chroot ortamının düzgün çalışabilmesi için /proc, /sys ve /dev gibi sanal dosya sistemlerinin bağlanması gerekir. Bunlar, çekirdek bilgileri, cihaz sürücüleri ve süreç yönetimi için gereklidir.
sudo mount -t proc proc /srv/chroot/ubuntu1204/proc
sudo mount -t sysfs sys /srv/chroot/ubuntu1204/sys
sudo mount -o bind /dev /srv/chroot/ubuntu1204/dev
sudo mount -o bind /dev/pts /srv/chroot/ubuntu1204/dev/pts # Terminal desteği için
DNS Çözümleyicisini Kopyalama
Chroot ortamı içinden internete erişebilmek için ana sistemin DNS yapılandırmasını kopyalamamız gerekir:
sudo cp /etc/resolv.conf /srv/chroot/ubuntu1204/etc/resolv.conf
Chroot Ortamına Giriş
Artık chroot ortamına girebilir ve içinde çalışmaya başlayabiliriz:
sudo chroot /srv/chroot/ubuntu1204 /bin/bash
Komutu çalıştırdığınızda, terminal prompt’unuz değişmeli ve artık chroot ortamının içinde olduğunuzu göstermelidir (örneğin, (chroot)root@hostname:/# gibi).
Chroot İçinde Temel Yapılandırma
Chroot ortamına girdikten sonra, onu daha kullanışlı hale getirmek için bazı temel yapılandırmalar yapabiliriz:
# Paket listesini güncelle
apt-get update
Temel araçları ve yerel ayarları kur
apt-get install -y locales dialog net-tools iputils-ping
Yerel ayarları yapılandır (gereklidir, aksi takdirde bazı programlar hata verebilir)
dpkg-reconfigure locales
Karşınıza çıkan menüden 'en_US.UTF-8 UTF-8' ve/veya 'tr_TR.UTF-8 UTF-8' gibi seçenekleri seçip varsayılan olarak ayarlayın.
Yeni bir kullanıcı oluştur (root olarak çalışmak yerine)
adduser testuser
Şifre belirleyin ve diğer bilgileri boş bırakabilirsiniz.
Yeni kullanıcıya sudo yetkisi verin
adduser testuser sudo
Root kullanıcısı için bir şifre belirleyin (isteğe bağlı, ama önerilir)
passwd root
Artık exit komutu ile chroot ortamından çıkış yapabilir ve isterseniz su - testuser komutu ile yeni oluşturduğunuz kullanıcı olarak tekrar giriş yapabilirsiniz.
Chroot Ortamından Çıkış ve Bağlantıları Kaldırma
İşiniz bittiğinde chroot ortamından çıkın ve bağladığınız dosya sistemlerini ana sistemden ayırın. Dosya sistemlerini bağladığınız sıranın tersiyle ayırmanız önemlidir.
exit # Chroot ortamından çıkış yapar
Bağlantıları kaldırma (ters sırada)
sudo umount /srv/chroot/ubuntu1204/dev/pts
sudo umount /srv/chroot/ubuntu1204/dev
sudo umount /srv/chroot/ubuntu1204/sys
sudo umount /srv/chroot/ubuntu1204/proc
Tüm bağlantıların başarıyla kaldırıldığından emin olun. Aksi takdirde, chroot dizinini silmeye çalışırken hatalarla karşılaşabilirsiniz.
Schroot Kullanarak Chroot Yönetimi (İsteğe Bağlı, Daha Kolay)
Yukarıdaki manuel bağlama/ayırma adımları zahmetli olabilir. schroot aracı, chroot ortamlarını daha kolay yönetmenizi sağlar. Chroot ortamına girerken gerekli dosya sistemlerini otomatik olarak bağlar ve çıkarken otomatik olarak ayırır.
sudo apt-get install schroot -y
/etc/schroot/schroot.conf dosyasını düzenleyerek chroot ortamınızı yapılandırın:
sudo nano /etc/schroot/schroot.conf
Dosyanın sonuna aşağıdaki bloğu ekleyin (your_username yerine kendi ana sistem kullanıcı adınızı yazın):
[ubuntu1204]
description=Ubuntu 12.04 Precise Pangolin
type=directory
directory=/srv/chroot/ubuntu1204
users=your_username
root-users=your_username
preserve-environment=true
Kaydedip çıktıktan sonra, chroot ortamınıza tek bir komutla girebilirsiniz:
schroot -c ubuntu1204
exit yazdığınızda, schroot otomatik olarak gerekli tüm bağlantıları kaldıracaktır. Bu, chroot ortamı ile çalışmayı çok daha pratik hale getirir.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Ubuntu 12.04 VPS üzerinde bir chroot ortamını nasıl oluşturacağınızı, yapılandıracağınızı ve kullanacağınızı adım adım öğrendiniz. Chroot ortamları, yazılım testi, geliştirme ve eski uygulamaları izole bir şekilde çalıştırmak için güçlü ve esnek bir yöntem sunar. Ana sisteminizde değişiklik yapma riski olmadan güvenli bir kum havuzu sağlar.
Sıkça Sorulan Sorular (SSS)
S1: Chroot ile sanal makine arasındaki fark nedir?
C1: Chroot, ana sistemin çekirdeğini (kernel) paylaşırken, sanal makine (VM) kendi çekirdeği ve donanım öykünmesi ile tamamen izole bir işletim sistemi çalıştırır. Chroot daha hafiftir ve daha az kaynak tüketirken, sanal makine daha yüksek izolasyon ve güvenlik sunar.
S2: Chroot güvenli midir? Kötü amaçlı yazılımlara karşı korur mu?
C2: Chroot, dosya sistemi izolasyonu sağlar ve programların ana sistemin geri kalanına erişimini sınırlar. Ancak, tam bir güvenlik sınırı değildir. Kötü niyetli bir kullanıcı veya uygulama, chroot ortamından çeşitli yöntemlerle kaçabilir (örneğin, çekirdek zafiyetlerini kullanarak). Hassas uygulamalar veya güvenilmeyen kod için tam güvenlik amacıyla sanal makineler veya konteyner teknolojileri (Docker gibi) daha uygundur.
S3: Chroot ortamına dosya nasıl aktarılır?
C3: Chroot ortamına girmeden önce, ana sisteminizdeki dosyaları chroot dizininin içine kopyalayabilirsiniz (örneğin, sudo cp /path/to/host/file /srv/chroot/ubuntu1204/path/in/chroot). Chroot içindeyken, ana dosya sisteminizdeki diğer dizinlere doğrudan erişiminiz yoktur. Ancak, mount --bind kullanarak ana sisteminizdeki belirli bir dizini chroot içine bağlayabilirsiniz.
S4: Birden fazla chroot ortamı oluşturabilir miyim?
C4: Evet, istediğiniz kadar chroot ortamı oluşturabilirsiniz. Her biri için farklı bir dizin yolu (örneğin, /srv/chroot/ubuntu1204, /srv/chroot/debian9 vb.) ve debootstrap komutunda farklı kod adları (örneğin, stretch for Debian 9) kullanmanız yeterlidir. schroot kullanıyorsanız, her chroot için /etc/schroot/schroot.conf dosyasına ayrı bir giriş eklemeniz gerekir.
S5: Chroot ortamını tamamen nasıl kaldırırım?
C5: Chroot ortamını kaldırmak için öncelikle içindeki tüm bağlama noktalarını (/proc, /sys, /dev vb.) ayırmanız gerekir. Eğer schroot kullanıyorsanız, bu adımı otomatik olarak yapar. Manuel olarak bağladıysanız, yukarıdaki “Bağlantıları Kaldırma” bölümündeki komutları çalıştırmanız gerekir. Tüm bağlantılar kaldırıldıktan sonra, chroot dizinini ana sisteminizden silebilirsiniz:
sudo rm -rf /srv/chroot/ubuntu1204
Bu komut dikkatli kullanılmalıdır, çünkü geri alınamaz bir şekilde tüm chroot dizinini silecektir.