Doküman

Linux’ta Chroot Nasıl Kullanılır ve Bozuk Sisteminizi Nasıl Onarırsınız

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

  1. 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
  1. Ç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
  1. 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.