Chroot, kök dosya sistemini değiştirebilen veya düzenleyebilen bir Linux/Unix yardımcı programıdır. chroot komutunun yardımıyla, birincil dosya sisteminizde kolayca izole edilmiş bir dosya sistemi oluşturabilirsiniz. Chroot, özellikle iş ve ev ortamınızı ayırmak için veya bir test ortamının yazılımı tek başına test etmesini istiyorsanız yardımcı olur.
Chroot ve Sanal Makine Arasındaki Fark
İlk bakışta, chroot’u sanal bir makineye veya docker gibi kapsayıcı bir sisteme benzer olarak düşünebilirsiniz. Biraz benzer, ancak chroot sanal bir makineden çok daha hafif bir çözüm. Sanal makine, ana makineden farklı olan ayrı bir çekirdeğe kurmak ve üzerinde çalışmak için bir hipervizöre ihtiyaç duyar. Sanal bir makineden farklı olarak, chroot aynı çekirdeği ve süreçleri paylaşır ancak dosya sisteminde bir kısıt oluşturur. Kısıtın içinde root izni olmadan dışarıya bakmak mümkün değildir. Bu nedenle, yalıtılmış dosya sistemine chroot kısıtı da denir.
Chroot’un Farklı Kullanım Örnekleri
- CI/CD ardışık düzeninde yalıtılmış yapı ortamı : Chroot, CI/CD ardışık düzenindeki uygulamalar için yalıtılmış bir yapı ortamı oluşturmak için kullanılır. Bu, uygulamanızı benzersiz bağımlılıklarla oluşturmanıza yardımcı olur ve olası çakışmaları ortadan kaldırmak için diğer tüm oluşturma ortamlarından tamamen yalıtılmıştır.
- Ayrı geliştirme ve test ortamı : Genellikle, geliştirici makinesinde çalışan yazılımlar, son kullanıcı cihazında çalışmaz. Bunun nedeni, geliştiricinin sisteminde yüklü birçok araç ve bağımlılığa sahip olmasıdır. Normal insanların makinelerinde tüm bu bağımlılıklar kurulu değildir. Yazılımı test etmek için, tüm cihazlarda çalışacaksa, geliştirici veya testçi, yazılımlarını test etmek için chroot kullanarak kolayca sade bir vanilya ortamı oluşturabilir.
- Geliştirici için riski azaltın : Bir geliştirici olarak, genellikle herhangi bir uygun sandboxing olmadan sistem dosyalarımızla etkileşime giren bazı programlar yaparız. Bu nedenle, bir hata yaparsak, yazılımımız önemli verilerimizi cihazımızdan kolayca silebilir. Bu tür bir riski azaltmak için geliştirici, veri kaybetme riskini azaltmak için yeni bir çalışma ortamı oluşturmak için genellikle chroot’u kullanır.
- Aynı yazılımın farklı bir sürümü : Bazen geliştirme amacıyla bir yazılımın veya bağımlılığın çok eski veya çok yeni bir sürümünü yüklemeniz gerekir. Ancak böyle çelişkili bir bağımlılık kullanmak sisteminizi bozabilir. Bu durum chroot jail kullanarak kolayca aşılabilir.
- Bozuk bir sistemi düzeltin : Bozuk bir sisteminiz varsa, chroot yardımıyla kolayca onarabilirsiniz. Cihazda canlı bir Linux ortamını başlatmanız ve dosya sistemini bağlamanız yeterlidir. Bu bağlama noktasını kullanarak sorununuzu çözmek için farklı komutlar çalıştırabilirsiniz. Bu, bu eğitimde daha sonra tartışılmaktadır.
- Bir FTP sunucusunu güvenle çalıştırma : FTP, dosya aktarım protokolü anlamına gelir. Bir FTP sunucusu çalıştırmak size yalnızca istediğiniz dosyaları paylaşma kontrolünü verir. Bu nedenle, hiçbir uzak eş, ana bilgisayar dosya sisteminizi göremez ve bunlara erişemez.
Bir Chroot Ortamı Oluşturma
Bu, sisteminizde bir chroot ortamı oluşturmaya yönelik sade bir yazıdır.
- Bir chroot ortamı oluşturmak için ana klasörünüzün içinde yeni bir dizin oluşturun. Bu klasörün içinde, izole edilmiş dosya sistemimiz gelecekte mevcut olacak. Bu derste, klasöre “mte” adını verdim.
mkdir ~ / mte
- Çok minimal bir Linux ortamı yaratıyoruz. Bash’i chroot ortamına kabuk olarak kuruyoruz ve ls, rm ve touch’ı kuruyoruz. “mte” dizinimizin içinde gerekli dizinleri oluşturalım.
cd ~ / mte mkdir bin mkdir lib mkdir lib64
- Normal “/bin” dizininden gerekli ikili dosyaları “~/mte” chroot ortamına kopyalayın.
cp / bin / bash ~ / mte / bin cp / bin / dokunma ~ / mte / bin cp / bin / ls ~ / mte / bin cp / bin / rm ~ / mte / bin
4. İkili dosyaları kopyalamak yeterli değildir. Ayrıca bağımlılıklarını “mte” klasörüne kopyalamamız gerekiyor. Gerekli bağımlılıkları bilmek için ldd komutunu kullanıyoruz. Bash’in bağımlılığını bilmek istiyorsanız, şunu çalıştırın:
ldd / bin / bash
Yukarıdaki komuttan aşağıdaki çıktıyı alıyoruz.
5. Bu bağımlılıkları listelemek ve bunları tek tek kopyalamak son derece yavaş ve sıkıcı olacaktır. Bu nedenle, bu işlemi otomatikleştirmek için bir bash betiği kullanıyoruz. “copydependancy.sh” adında bir dosya oluşturun ve bu kabuk komutlarını içine yazın.
#Setting the chroot directory mte="~/mte" # enter your binary name echo -e "Please enter your binary name \n" #Reading from terminal input read binaryname # Listing all the dependencies list="$(ldd /bin/$binaryname | egrep -o '/lib.*\.[0-9]')" # Looping through the dependency list for i in $list; do cp -v --parents "$i" "${mte}"; done
Şimdi bu scriptin ne işe yaradığını inceleyelim. İlk başta, bu kabuk betiği ikili adı ister, ardından bu ikili adı alır ve bu ikilinin tüm bağımlılığını bulur ve onu bir liste değişkenine kaydeder. Ardından, listenin her öğesinde çalışan ve bağımlılığı normal “/bin” dosyamızdan “mte” chroot dizinimize kopyalayan bir for döngüsü çalıştırır.
Bu betiği başka bir yere kaydedin ve yeni bir chroot ortamı oluşturduğunuzda buna başvurun.
Ardından, komut dosyasının iznini değiştirin ve terminalin içinde çalıştırın.
chmod +x copydependancy.sh
6. Tüm bağımlılıklar sistemimizde kurulu olduğu için chroot ortamımızı aktif edelim. Standart chroot komutu şöyle görünür:
chroot [-OPTION] [PATH FOR NEW ROOT] [PATH FOR SERVER]
Ancak amacımızı gerçekleştirmek için chroot ortamımızı etkinleştirmek için aşağıdaki komutu çalıştırıyoruz.
sudo chroot ~/mte /bin/bash
Yukarıdaki komut, “~/mte” dizinindeki bir chroot ortamını etkinleştirir ve bir bash kabuğunun çalıştırılacağını belirtir. Terminal komut isteminizde bir değişiklik görebilir ve artık sırasıyla dosyaları oluşturmak, kaldırmak ve listelemek için touch, rm ve ls komutlarını kullanabilirsiniz.
Chroot ortamından çıkmak için çıkış komutunu çalıştırın.
Chroot ortamını tamamen kaldırmak istiyorsanız, dosya sisteminizden “mte” dizinini silin.
rm -rf ~ / mte
Chroot Kullanarak Arızalanan Bir Önyükleyiciyi Düzeltin
Chroot ile ilgili en büyüleyici şey, bozuk bir sisteme girip içinde bir komut çalıştırabilmenizdir. Bu nedenle, chroot kullanarak bir sistemi düzeltmek için kritik bir güncellemeyi kolayca yükleyebilir veya sorunu çözmek için tüm önyükleyiciyi yeniden yükleyebilirsiniz.
Ancak bunun için canlı bir Linux ortamınız olmalıdır. Bir Linux ISO indirerek ve USB’den önyükleyerek önyüklenebilir bir USB yapın. Size birlikte çalışabileceğiniz canlı bir ortam sağlar. Chroot ile çalışmak için sistem bölümünüzü bağlayın.
sudo mount -t ext4 / dev / sda / mnt
“/dev/sda” ile çalışmak istediğiniz sistem bölümü adını değiştirin ve grubun önyükleyicisinin, önyükleyici sorununu çözmek için ihtiyaç duyduğu bilgileri bulmasına izin verin.
sudo mount --bind / dev / mnt / dev && sudo mount --bind / dev / pts / mnt / dev / puan && sudo mount --bind / proc / mnt / proc && sudo mount --bind / sys / mnt / sistem
“/mnt” dizinine chroot yapalım ve bozuk sisteme girelim.
sudo chroot / mnt
Grub önyükleyiciyi kurun, kontrol edin ve güncelleyin. Uygun sürücü adını kullandığınızdan emin olun ve bu komutları körü körüne kopyalayıp yapıştırmayın.
grub-install /dev/sda grub-install --recheck /dev/sda update-grub
Daha önce bahsedilen çıkış komutunu kullanarak kabuktan çıkın. Önceden bağlanmış dizinleri ayırın ve dosya sistemini ayırın. Bu komutları arka arkaya çalıştırın.
sudo umount / mnt / sys && sudo umount / mnt / proc && sudo umount / mnt / dev / puan && sudo umount / mnt / dev && sudo umount / mnt
PC’nizi yeniden başlatın ve canlı USB’yi çıkarın. Bilgisayar açıldığında, grup önyükleyiciniz yeni gibi parlayacak ve her şey mükemmel şekilde çalışmalıdır.
Yazının orijinalini buradan okuyabilirsiniz.