Създаване на chroot среди във Fedora Core и Red Hat Enterprise Linux чрез yum и rpm
Copyright ©2006 Веселин Колев, Софийски Университет Св. Климент Охридски
Лиценз: CC Attribution-ShareAlike
- Въведение.
- Уточнения.
- Създаване на директорията за изграждане на chroot средата.
- Инициализиране на базата от данни на пакетната система RPM.
- Зареждане на OpenPGP сертификатите за проверка на електронните подписи върху пакетите.
- Създаване на repo файлове в помощ на инсталирането на пакети в chroot средата.
- Инсталиране на необходимите пакети в chroot средата.
1. Въведение.
Понякога дадено приложение или среда за работа, трябва да се обезопасят чрез заключването им в т.нар. chroot среда. Причините за това са най-различни, били са и продължават да бъдат предмет на дискусии, но няма да бъдат дискутирани тук, доколкото този документ представлява само и единствено едно възможно ръководство за изграждането на chroot средите.
Това ръководство не бива да се разглежда като абсолютно и напълно изчерпателно. Описаната в него практика има претенциите да бъде класифицирана като добра, но няма претенциите да отмени другите практики по изграждане на chroot среди.
Авторът не носи отговорност за причинени щети, вследствие на използване на описаните тук действия и техники.
2. Уточнения.
В примерите по-долу ще се предполага, че chroot средата ще бъде изградена в директория /home/chroot. Такова положение на директорията върху локалната файлова система не е задължиелно и е само примерно. Може да бъде използвана произволна и за предпочитане празна директория върху споменатата вече локалната файлова система.
Всички описани по-долу операции се извършват от супер потребител (root). Ориентир за това е наличието на знака # през описанията за изпълнение на команден ред.
3. Създаване на директорията за изграждане на chroot средата.
# mkdir /home/chroot
4. Инициализиране на базата от данни на пакетната система RPM.
# rpm --root /home/chroot --initdb
Изпълнението на този команден ред, създава началната и минимално необходима база данни, която да бъде използвана от пакетния мениджър. Ако операцията е протекла успешно, в директория /home/chroot/var/lib/rpm/ ще се намира файлово дърво със структура подобна на тази:
total 388
-rw-r--r-- 1 root root 24576 Feb 23 14:29 __db.001
-rw-r--r-- 1 root root 1318912 Feb 23 14:29 __db.002
-rw-r--r-- 1 root root 450560 Feb 23 14:29 __db.003
-rw-r--r-- 1 root root 12288 Feb 23 14:29 Packages
5. Зареждане на OpenPGP сертификатите за проверка на електронните подписи върху пакетите.
RPM е пакетна система, в която има вградени криптографски електронни подписи върху съдържанието на всеки пакет. За да може да се удостовери източника на пакета, в базата от данни на пакетната система, трябва да бъдат заредени OpenPGP сертификатите на дистрибуторите на пакетите, които ще бъдат инсталирани в chroot средата.
Ще предполагаме, че трябва да бъдат инсталирани само базовите за дистрибуцията OpenPGP сертификати, които по подразбиране се намират в директория /usr/share/rhn:
# rpm --root /home/chroot/ --import /usr/share/rhn/RPM-GPG-KEY*
Ако ще бъде инсталиран OpenPGP сертификат, който не в базовата колекция, той трябва да бъде посочен като файл, например:
# rpm --root /home/chroot/ --import /path/to/openpgp-cert.asc
Последното може да се наложи да бъде направено по изключение, ако се налага в chroot средата да бъдат инсталирани пакети от външни за дистрибуцията хранилища като това на Dag Wieers.
6. Създаване на repo файлове в помощ на инсталирането на пакети в chroot средата.
При инсталирането на rpm пакети в chroot средата с помощта на инструмента yum, трябва да се създадат repo файлове (един или повече, в зависимост от нуждите на конкретната инсталация), които отразяват отделните пакетни хранилища. Тези repo файлове ще се използват само за изграждане на chroot средата. Също така в създадените специално за целта repo файлове не трябва да присъстват yum променливите $basearch и $release.
Ето как изглежда примерен преработен repo файла за инсталиране на Fedora Core 4 в chroot среда:
fedora.repo
[base]
name=Fedora Core 4 — i386 — Base
baseurl=ftp://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/
enabled=1
gpgcheck=1
[updates-released]
name=Fedora Core 4 — i386 — Released Updates
baseurl=ftp://download.fedora.redhat.com/pub/fedora/linux/core/updates/4/i386/
enabled=1
gpgcheck=1
За изпълнението на действията описани в следващата точка, ще се предполага, че този файл се намира в директория /home/yum.repo.chroot.i386 и носи името fedora.repo.
7. Инсталиране на необходимите пакети в chroot средата.
Необходимите за инсталация в chroot средата пакети могат да се разделят на две категории:
Единственият базов пакет, който трябва да бъде инсталиран чрез yum е glibc. При инсталирането му ще бъдат инсталирани (като зависимости) и другите базови пакети.
# yum --installroot=/home/chroot -c /home/yum.repo.chroot.i386/fedora.repo install glibc
Допълнителните пакети се инсталират в зависимост от целите на изграждането на chroot средата. Един съвсем кратък и нагледен пример може да бъде даден с инсталирането на пакета bash:
# yum --installroot=/home/chroot -c /home/yum.repo.chroot.i386/fedora.repo install bash
След инсталацията му може да се провери правилността на изграждането на chroot средата така:
# chroot /home/chroot
bash-3.00#
За излизане от chroot средата може да се използва командата exit:
bash-3.00# exit
exit
#
Ако се налага да бъдат инсталирани пакети от външни за дистрибуцията хранилища, просто трябва да се състави правилно (по описаната в точка 6 схема) съответния repo файл и да се използва посочената в тази точка схема за инсталация на пакети с yum.
Описаната тук схема позволява актуализация на пакетите в chroot средата с минимални усилия. Ето как изглежда актуализиране на базовите за дистрибуцията пакети, ако следваме пак горния пример на инсталация:
# yum --installroot=/home/chroot -c /home/yum.repo.chroot.i386/fedora.repo update
Нужно е да се каже, че при стандартно използваните техники на създаване на chroot среди чрез копиране на файлове, много трудно може да се реализира актуализация на пакетите, а това би довело до проблеми в сигурността.