Домашнее задание
Работа с загрузчиком
Описание/Пошаговая инструкция выполнения домашнего задания:
1. Попасть в систему без пароля несколькими способами.
2. Установить систему с LVM, после чего переименовать VG.
3. Добавить модуль в initrd.
4(*). Сконфигурировать систему без отдельного раздела с /boot, а только с LVM
Репозиторий с пропатченым grub: https://yum.rumyantsev.com/centos/7/x86_64/
PV необходимо инициализировать с параметром --bootloaderareasize 1m
Критерии оценки:
Описать действия, описать разницу между методами получения шелла в процессе загрузки.
Где получится - используем script, где не получается - словами или копипастой описываем действия.
Для получения доступа необходимо открыть GUI VirtualBox (или другую систему виртуализации), запустить виртуальную машину и при выборе ядра для загрузки нажать e
- в данном контексте edit
. Попадаем в окно где мы можем изменить параметры загрузки:
Для данного раздела инструкции собрана ВМ grub
в конфигурации Vagrantfile
с включенной опцией gui
. Для испытания нижеперечисленных способов ввести команду: vagrant up grub
.
- Переходим стрелкой к строке, начинающейся с
linux16
, нажимаемEnd
чтобы перейти курсором в конец строки и клавишойBackspace
удаляем всё до параметраroot=UUID=<UUID>
и после добавляемinit=/bin/sh
(пример на скриншоте ниже) нажимаемсtrl-x
для загрузки в систему
-
В целом на этом всё, Вы попали в систему. Но есть один нюанс. Рутовая файловая система при этом монтируется в режиме
Read-Only
. Если вы хотите перемонтировать ее в режимRead-Write
можно воспользоваться командойmount -o remount,rw /
-
После чего можно убедится записав данные в любой файл или прочитав вывод команды:
touch /test_rw.txt
- Переходим стрелкой к строке, начинающейся с
linux16
, нажимаемEnd
чтобы перейти курсором в конец строки и клавишойBackspace
удаляем всё до параметраroot=UUID=<UUID>
и после добавляемrd.break
(пример на скриншоте ниже) нажимаемсtrl-x
для загрузки в систему
- Попадаем в
emergency mode
- Корневая файловая система смонтирована в каталог
/sysroot
и в режимеRead-Only
. Далее будет пример как попасть в нее и поменять пароль администратора:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
- После чего можно перезагружаться и заходить в систему с новым паролем. Полезно когда вы потеряли или вообще не имели пароль администратора.
- Переходим стрелкой к строке, начинающейся с
linux16
, нажимаемEnd
чтобы перейти курсором в конец строки и клавишойBackspace
удаляем всё до параметраroot=UUID=<UUID>
и после добавляемrw init=/sysroot/bin/sh
(пример на скриншоте ниже) нажимаемсtrl-x
для загрузки в систему
-
В целом то же самое что и в прошлом примере, но файловая система сразу смонтирована в режим
Read-Write
-
В прошлых примерах тоже можно добавить
rw
после параметраroot=UUID=<UUID>
Для выполнения задания потребуется скопировать следующий Vagrantfile
-
Запускаем ВМ
vagrant up
, переходим в консоль SSHvagrant ssh
и выполняемsudo -i
. -
Первым делом посмотрим текущее состояние системы:
[vagrant@localhost ~]$ sudo -i
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup00 1 2 0 wz--n- <38.97g 0
-
Нас интересует строка с именем
VolGroup00
-
Приступим к переименованию:
[root@localhost ~]# vgrename VolGroup00 OtusRoot
Volume group "VolGroup00" successfully renamed to "OtusRoot"
- Далее правим
/etc/fstab
,/etc/default/grub
,/boot/grub2/grub.cfg
. Везде заменяем старое название на новое. По ссылкам можно увидеть примеры получившихся файлов.
[root@localhost ~]# declare -a array=("/etc/default/grub" "/etc/fstab" "/boot/grub2/grub.cfg")
[root@localhost ~]# for chpath in "${array[@]}"; do
> sed -i 's/VolGroup00/OtusRoot/g' $chpath
> done
- Пересоздаем
initrd image
, чтобы он знал новое названиеVolume Group
[root@localhost ~]# mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r)
Executing: /sbin/dracut -f -v /boot/initramfs-3.10.0-862.2.3.el7.x86_64.img 3.10.0-862.2.3.el7.x86_64
dracut module 'busybox' will not be installed, because command 'busybox' could not be found!
dracut module 'crypt' will not be installed, because command 'cryptsetup' could not be found!
dracut module 'dmraid' will not be installed, because command 'dmraid' could not be found!
dracut module 'dmsquash-live-ntfs' will not be installed, because command 'ntfs-3g' could not be found!
dracut module 'mdraid' will not be installed, because command 'mdadm' could not be found!
dracut module 'multipath' will not be installed, because command 'multipath' could not be found!
dracut module 'busybox' will not be installed, because command 'busybox' could not be found!
dracut module 'crypt' will not be installed, because command 'cryptsetup' could not be found!
dracut module 'dmraid' will not be installed, because command 'dmraid' could not be found!
dracut module 'dmsquash-live-ntfs' will not be installed, because command 'ntfs-3g' could not be found!
dracut module 'mdraid' will not be installed, because command 'mdadm' could not be found!
dracut module 'multipath' will not be installed, because command 'multipath' could not be found!
*** Including module: bash ***
*** Including module: nss-softokn ***
*** Including module: i18n ***
*** Including module: drm ***
*** Including module: plymouth ***
*** Including module: dm ***
Skipping udev rule: 64-device-mapper.rules
Skipping udev rule: 60-persistent-storage-dm.rules
Skipping udev rule: 55-dm.rules
*** Including module: kernel-modules ***
Omitting driver floppy
*** Including module: lvm ***
Skipping udev rule: 64-device-mapper.rules
Skipping udev rule: 56-lvm.rules
Skipping udev rule: 60-persistent-storage-lvm.rules
*** Including module: qemu ***
*** Including module: resume ***
*** Including module: rootfs-block ***
*** Including module: terminfo ***
*** Including module: udev-rules ***
Skipping udev rule: 40-redhat-cpu-hotplug.rules
Skipping udev rule: 91-permissions.rules
*** Including module: biosdevname ***
*** Including module: systemd ***
*** Including module: usrmount ***
*** Including module: base ***
*** Including module: fs-lib ***
*** Including module: shutdown ***
*** Including modules done ***
*** Installing kernel module dependencies and firmware ***
*** Installing kernel module dependencies and firmware done ***
*** Resolving executable dependencies ***
*** Resolving executable dependencies done***
*** Hardlinking files ***
*** Hardlinking files done ***
*** Stripping files ***
*** Stripping files done ***
*** Generating early-microcode cpio image contents ***
*** No early-microcode cpio image needed ***
*** Store current command line parameters ***
*** Creating image file ***
*** Creating image file done ***
*** Creating initramfs image file '/boot/initramfs-3.10.0-862.2.3.el7.x86_64.img' done ***
- После чего можем перезагружаться и если все сделано правильно успешно грузимся с новым именем
OtusRoot
и проверяем:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
OtusRoot 1 2 0 wz--n- <38.97g 0
- При желании можно так же заменить название
Logical Volume
Будем использовать Vagrantfile
из предыдущей инструкции, но для удобства добавим свойство vb.gui = true
после строки box.vm.provider :virtualbox do |vb|
. Перечитаем конфигурацию командой vagrant reload
.
Скрипты модулей хранятся в каталоге /usr/lib/dracut/modules.d/
. Для того чтобы добавить свой модуль создаем там папку с именем 01test
:
[root@localhost ~]# mkdir /usr/lib/dracut/modules.d/01test
В нее поместим два скрипта:
- module-setup.sh - который устанавливает модуль и вызывает скрипт
test.sh
- test.sh - собственно сам вызываемый скрипт, в нём у нас рисуется пингвинчик
Переходим в каталог и выставляем флаг x
:
[root@localhost ~]# cd /usr/lib/dracut/modules.d/01test
[root@localhost 01test]# chmod a+x *
[root@localhost 01test]# ls -al
total 12
drwxr-xr-x. 2 root root 44 Sep 15 23:03 .
drwxr-xr-x. 52 root root 4096 Sep 15 22:58 ..
-rwxr-xr-x. 1 root root 111 Sep 15 23:03 module-setup.sh
-rwxr-xr-x. 1 root root 316 Sep 15 23:03 test.sh
- Пересобираем образ
initrd
[root@localhost 01test]# mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r)
Executing: /sbin/dracut -f -v /boot/initramfs-3.10.0-862.2.3.el7.x86_64.img 3.10.0-862.2.3.el7.x86_64
dracut module 'busybox' will not be installed, because command 'busybox' could not be found!
dracut module 'crypt' will not be installed, because command 'cryptsetup' could not be found!
dracut module 'dmraid' will not be installed, because command 'dmraid' could not be found!
dracut module 'dmsquash-live-ntfs' will not be installed, because command 'ntfs-3g' could not be found!
dracut module 'mdraid' will not be installed, because command 'mdadm' could not be found!
dracut module 'multipath' will not be installed, because command 'multipath' could not be found!
dracut module 'busybox' will not be installed, because command 'busybox' could not be found!
dracut module 'crypt' will not be installed, because command 'cryptsetup' could not be found!
dracut module 'dmraid' will not be installed, because command 'dmraid' could not be found!
dracut module 'dmsquash-live-ntfs' will not be installed, because command 'ntfs-3g' could not be found!
dracut module 'mdraid' will not be installed, because command 'mdadm' could not be found!
dracut module 'multipath' will not be installed, because command 'multipath' could not be found!
*** Including module: bash ***
*** Including module: test ***
*** Including module: nss-softokn ***
*** Including module: i18n ***
*** Including module: drm ***
*** Including module: plymouth ***
*** Including module: dm ***
Skipping udev rule: 64-device-mapper.rules
Skipping udev rule: 60-persistent-storage-dm.rules
Skipping udev rule: 55-dm.rules
*** Including module: kernel-modules ***
Omitting driver floppy
*** Including module: lvm ***
Skipping udev rule: 64-device-mapper.rules
Skipping udev rule: 56-lvm.rules
Skipping udev rule: 60-persistent-storage-lvm.rules
*** Including module: qemu ***
*** Including module: resume ***
*** Including module: rootfs-block ***
*** Including module: terminfo ***
*** Including module: udev-rules ***
Skipping udev rule: 40-redhat-cpu-hotplug.rules
Skipping udev rule: 91-permissions.rules
*** Including module: biosdevname ***
*** Including module: systemd ***
*** Including module: usrmount ***
*** Including module: base ***
*** Including module: fs-lib ***
*** Including module: shutdown ***
*** Including modules done ***
*** Installing kernel module dependencies and firmware ***
*** Installing kernel module dependencies and firmware done ***
*** Resolving executable dependencies ***
*** Resolving executable dependencies done***
*** Hardlinking files ***
*** Hardlinking files done ***
*** Stripping files ***
*** Stripping files done ***
*** Generating early-microcode cpio image contents ***
*** No early-microcode cpio image needed ***
*** Store current command line parameters ***
*** Creating image file ***
*** Creating image file done ***
*** Creating initramfs image file '/boot/initramfs-3.10.0-862.2.3.el7.x86_64.img' done ***
или
[root@localhost 01test]# dracut -f
- Можно проверить/посмотреть какие модули загружены в образ:
[root@localhost 01test]# lsinitrd -m /boot/initramfs-$(uname -r).img | grep test
test
-
После чего можно пойти двумя путями для проверки:
- Перезагрузиться и руками выключить опции
rghb
иquiet
и увидеть вывод - Либо отредактировать
grub.cfg
убрав эти опции
- Перезагрузиться и руками выключить опции
-
В итоге при загрузке будет пауза на 10 секунд и вы увидите пингвина в выводе терминала