#### Решения лабораторных работ по видеокурсу Sander Van Vugt *лабораторные работы начинаются в 3-й главы* *** **Глава 3. Базовые инструменты для работы с файлами.** 1. Создать структуру каталогов `/tmp/files/pictures`, `/tmp/files/photos`, `/tmp/files/videos` ```bash mkdir -p /tmp/files/pictures /tmp/files/photos /tmp/files/videos ``` 2. Из папки `/etc` скопировать все файлы имена которых начинаются с `a`, `b` или `c` (лат.) в каталог `/tmp/files` ```bash cp /etc/[a-c]* /tmp/files ``` 3. Из `/tmp/files` переместить все файлы имена которых начинаются на `a` или `b` в `/tmp/files/photos`, а файлы, имена которых начинаются на `c` переместить в `/tmp/files/videos` ```bash mv /tmp/files/[ab]* /tmp/files/photos mv /tmp/files/c* /tmp/files/videos ``` 4. Найти в папке `/etc` все файлы, размер которых меньше 1000 байт и скопировать их в `/tmp/files/pictures` ```bash find /etc -type f -size -1000c -exec cp {} /tmp/files/pictures \; ``` 5. В папке `/tmp/files` создать символьную ссылку на `/var` ```bash cd /tmp/files ln -s /var . ``` 6. В папке `/tmp/files` создать сжатый архив директории `/home` ```bash tar -zcvf home.tar.gz /home ``` 7. Распаковать архив с относительными именами файлов в `/tmp/archive/` ```bash mkdir /tmp/archive tar -xvf home.tar.gz -C /tmp/archive ``` *** **Глава 4. Работа с текстовыми файлами.** 1. Используйте `head` и `tail` для отображения пятой строки в файле `/etc/passwd` ```bash head -n 5 /etc/passwd | tail -n 1 ``` 2. Используйте `sed` для отображения пятой строки в файле `/etc/passwd` ```bash sed -n 5p /etc/passwd ``` 3. Используйте `awk` в конвейере, чтобы отфильтровать последний столбец в выводе `ps aux` ```bash ps aux | awk '{ print $NF }' ``` 4. Используйте `grep`, чтобы показать имена всех файлов в директории `/etc`, содержащих строки со словом `root` ```bash grep '\' /etc/* 2>/dev/null ``` 5. Показать все строки в файлах директории `/etc` состоящие из 3-х символов. Используйте `grep` ```bash grep '^...$' /etc/* 2>/dev/null ``` 6. Используйте `grep`, чтобы найти все файлы содержащие `alex`, но не `alexander`. Подсказка: создайте файл, в первой строке - `alex`, во второй `alexander` ```bash cd echo -e "alex\nalexander" > testfile grep '\' * ``` *** **Глава 5. Подключение к серверу RHEL.** 1. Из графической консоли перейдите в вирутальный терминал tty6. ```bash sudo chvt 6 ``` 2. После выполнения 1-го задания авторизуйтесь как обычный пользователь и вернитесь в графический интерфейс, используя соответствующую команду. ```bash chvt 1 ``` 3. Используя `ssh` подключитесь как `root` к `localhost` ```bash ssh root@localhost ``` *** **Глава 6. Управление пользователями и группами.** 1. Настроить для всех новых пользователей: минимальная длина пароля - 6 символов, срок действия 90 дней. ```bash vi /etc/login.defs PASS_MIN_LEN 6 PASS_MAX_DAYS 90 ``` 2. В домашней директории всех новых пользователей создается пустой файл с именем `newfile`. ```bash touch /etc/skel/newfile ``` 3. Создать новых пользователей `anna`, `andrey`, `linda`, `lisa`. ```bash useradd anna useradd andrey useradd linda useradd lisa ``` 4. Установить пароль для `anna` и `andrey` - `password`, для `linda` и `lisa` - пароль отключить. ```bash passwd andrey или echo password | passwd --stdin anna passwd linda -l passwd lisa -l ``` 5. Создать группы `profs`, `students` и назначить `anna` и `andrey` членами `profs`, а `linda` и `lisa` - членами группы `students`. ```bash groupadd profs groupadd students usermod -aG profs anna usermod -aG profs andrey usermod -aG students linda usermod -aG students lisa ``` *** **Главал 7. Права доступа к файлам.** 1. Запретить доступ другим пользователям (`others`) ко всем новым файлам пользователя Linda. в файл `/home/linda/.bashrc` добавить значение `umask 007` ```bash vi /home/linda/.bash_profile ``` 2. Создать структуру общих каталогов `/data/profs`, `/data/students` со следующими разрешениями: ```bash mkdir -p /data/profs /data/students ``` * члены групп имеют доступ на чтение и запись в эти директории, другие пользователи не имеют никаких разрешений; ```bash chmod g+w,o-rx /data/profs/ chmod g+w,o-rx /data/students/ ``` * члены групп могут редактировать все файлы создаваемые в этих директориях; ```bash chmod g+s /data/profs/ chmod g+s /data/students/ ``` * пользователи могут удалять только файлы , которые им принадлежат; ```bash chmod +t /data/profs/ chmod +t /data/students/ ``` * члены группы `profs` имеют доступ на чтение в `/data/students` ```bash setfacl -m d:g:profs:rx /data/students/ ``` * пользователь `anna` должна иметь возможность удалять файлы из директорий `/data/profs` и `/data/students` ```bash chown anna /data/profs chown anna /data/students ``` *** **Глава 8. Настройка сети.** 1. Назначить серверу статический IP адрес в текущей подсети. *необходимо выяснить текущий IP* ```bash ip a ``` если в строке с указанным адресом есть `global dynamic`, значит IP адрес получен от DHCP сервера. *для изменения сетевых настроек можно использовать утилиты `nmcli` или `nmtui`. Или вручную внести изменения в конфигурационный файл соответствующего подключения в директории `/etc/sysconfig/network-scripts/`* ```bash nmcli connection add type ethernet ifname ens18 ipv4.addresses 192.168.10.11/24 ipv4.gateway 192.168.10.9 ipv4.dns 8.8.8.8 nmcli connection show - чтобы увидеть название созданного подключения, пусть это будет ethernet-ens18 nmcli connection up ethernet-ens18 - после создания нового подключения, его необходимо активировать ``` 2. Назначить дополнительный IP адрес 10.0.0.10/24 на тот же сетевой интерфейс. *для решения этого задания можно использовать `nmcli` или `nmtui`* ```bash nmcli connection modify ens18 +ipv4.addresses 10.0.0.10/24 ``` 3. Перезагрузить сервер и убедиться, что настройки сохранились. *** **Глава 9. Управление процессами.** 1. Запустить команду `dd if=/dev/zero of=/dev/null`. Перевести запущенный процесс в фоновый режим. ```bash dd if=/dev/zero of=/dev/null Ctrl+Z bg ``` 2. Запустить предыдущую команду 3 раза в фоновом режиме. ```bash dd if=/dev/zero of=/dev/null & dd if=/dev/zero of=/dev/null & dd if=/dev/zero of=/dev/null & ``` 3. Используя `jobs` получить информацию о запущенных фоновых процессах. ```bash [root@co1 ~]# jobs [1] Запущен dd if=/dev/zero of=/dev/null & [2] Запущен dd if=/dev/zero of=/dev/null & [3]- Запущен dd if=/dev/zero of=/dev/null & [4]+ Запущен dd if=/dev/zero of=/dev/null & ``` 4. Из `top` изменить приоритет (`niceness`) одного из ранее запущенных `dd` на значение `-5`. Убедиться, что использование CPU этого процесса увеличилось. ```bash top r ``` 5. Остановить все запущенные процессы `dd` из командной строки. ```bash [root@co1 ~]# ps aux | grep '\ poweroff at> ``` *для выхода из оболочки `at` нажать Ctrl+D* *отменим задание* ```bash [user@host ~]$ sudo atq 3 Fri Sep 3 21:00:00 2021 a root [user@host ~]$ sudo atrm 3 ``` *** **Глава 13. Настройка хранения логов.** 1. Убедитесь, что логи systemd сохраняются постоянно (persistently). *убедимся, что служба запущена* ```bash [user@host ~]$ systemctl status systemd-journald.service ● systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled) Active: active (running) since Sun 2021-08-22 20:12:19 MSK; 1 weeks 4 days ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 586 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 11258) Memory: 2.5M CGroup: /system.slice/systemd-journald.service └─586 /usr/lib/systemd/systemd-journald Aug 22 20:12:19 co1.rh systemd-journald[586]: Journal started Aug 22 20:12:19 co1.rh systemd-journald[586]: Runtime journal (/run/log/journal/75cfadef25be494698e02d31e421d7bf) is 8.0M, max 90.8M, 82.8M free. ``` *проверим настройки* ```bash [user@host ~]$ cat /etc/systemd/journald.conf # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See journald.conf(5) for details. [Journal] #Storage=auto #Compress=yes #Seal=yes *** ``` *в данном случае нас интересует только строка Storage, строки ниже не показаны. Значение `auto` говорит о том, что логи будут сохранятся в папку `/var/log/journal`, при условии, что папка существует. Убирать символ `#` в начале не нужно, т.к. значение auto используется по-умолчанию.* ```bash [user@host ~]$ sudo mkdir /var/log/journal [user@host ~]$ sudo systemctl restart systemd-journald.service [user@host ~]$ sudo systemctl status systemd-journald ● systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled) Active: active (running) since Fri 2021-09-03 09:20:40 MSK; 21s ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 156983 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 11258) Memory: 1.2M CGroup: /system.slice/systemd-journald.service └─156983 /usr/lib/systemd/systemd-journald Sep 03 09:20:40 co1.rh systemd-journald[156983]: Journal started Sep 03 09:20:40 co1.rh systemd-journald[156983]: System journal (/var/log/journal/75cfadef25be494698e02d31e421d7bf) is 16.0M, max 999.0M, 982.9M free. ``` *теперь видно, что логи сохраняются в `/var/log/journal/75cfadef25be494698e02d31e421d7bf`* 2. Создать запись в rsyslog, при которой сохраняются все сообщения категории error и выше (severity - error) в `/var/log/error` ```bash sudo vi /etc/rsyslog.d/error.conf ``` ```bash *.error /var/log/error ``` ```bash sudo systemctl restart rsyslog.service ``` 3. Убедитесь, что `/var/log/error` архивируется ежемесячно, при этом 12 последних сообщений должны сохраниться перед архивацией. *посмотрим настройки по-умолчанию для примера* ```bash [user@host ~]$ cat /etc/logrotate.conf # see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may be also be configured here. ``` *настройку для отдельного сервиса или категории необходимо создать в новом файле в папке `/etc/logrotate.d`* *посмотрим пример какого-нибудь файла из этой папки* ```bash [user@host ~]$ cat /etc/logrotate.d/samba /var/log/samba/log.* { compress dateext maxage 365 rotate 99 notifempty olddir /var/log/samba/old missingok copytruncate } ``` *на основе настроек в `/etc/logrotate.conf` и `/etc/logrotate.d/samba` создадим новый конфиг для архивации логов error* ```bash sudo vi /etc/logrotate.d/error ``` ```bash /var/log/error { montly rotate 12 create } ``` *** **Глава 14. Управление хранилищем.** *Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.* 1. Создать основной раздел размером 1ГиБ. Отформатировать его в Ext4 и задать постоянную точку монтирования в `/mount/files`, используя его UUID. ```bash sudo fdisk /dev/sdb o - создать mbr (DOS) таблицу разделов n - создать новый раздел p - основной (primary) раздел ``` *номер раздела и первый сектор оставить как предлагает fdisk* ```bash +1G - задать размер 1 Гб w - записать изменения на диск и выйти ``` ```bash sudo mkfs.ext4 /dev/sdb1 sudo mkdir -p /mount/files sudo blkid - покажет UUID всех разделов, скопировать UUID нужного sudo vi /etc/fstab ``` *добавить строку* ```bash UUID=3ffc186a-14c8-4fdf-807b-b1eba7b32346 /mount/files ext4 defaults 0 0 ``` ```bash sudo mount -a ``` *если ошибок нет, значит монтирование прошло успешно* 2. Создать расширенный раздел, включающий все оставшееся дисковое пространство. В этом разделе создать раздел XFS размером 5OO МиБ с постоянной точкой монтирования в `/mount/xfs`, используя метку `myxfs`. ```bash sudo fdisk /dev/sdb n - создать новый раздел e - создать расширенный (extended) раздел ``` *номер раздела и первый и последний сектор оставить как предлагает fdisk* ```bash n - создать новый раздел ``` *fdisk сам предложит создать логический раздел с номером 5, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела* ```bash +500M w - записать изменения на диск и выйти ``` *посмотреть созданные разделы* ```bash cat /proc/partitions ``` *создадим ФС и метку раздела* ```bash sudo mkfs.xfs -L myxfs /dev/sdb5 ``` *посмотреть заданную метку* ```bash [user@host ~]$ ls /dev/disk/by- by-id/ by-label/ by-partuuid/ by-path/ by-uuid/ [user@host ~]$ ls /dev/disk/by-label/ myxfs ``` *добавим монтирование по метке* ```bash sudo mkdir -p /mount/xfs sudo vi /etc/fstab ``` *добавим строку* ```bash LABEL=myxfs /mount/xfs xfs defaults 0 0 ``` *проверим правильность монтирования* ```bash [user@host ~]$ sudo mount -a [user@host ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 32G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 1000M 0 part [SWAP] └─sda3 8:3 0 9.8G 0 part └─cl-root 253:0 0 9.8G 0 lvm / sdb 8:16 0 10G 0 disk ├─sdb1 8:17 0 1G 0 part /mount/files ├─sdb2 8:18 0 1K 0 part └─sdb5 8:21 0 500M 0 part /mount/xfs sr0 11:0 1 1024M 0 rom ``` 3. Создать раздел подкачки 5OO МиБ и активировать его. После перезагрузки он должен быть доступен. ```bash sudo umount /dev/sdb1 /dev/sdb5 sudo fdisk /dev/sdb n - создать новый раздел ``` *fdisk сам предложит создать логический раздел с номером 6, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела* ```bash +500M t - изменить тип раздела 6 - указать тип какого раздела необходимо изменить L - показать все возможные варианты 82 - необходим тип 82 Linux swap / Solaris w - записать изменения на диск и выйти ``` *формат раздела как SWAP* ```bash [user@host ~]$ sudo mkswap /dev/sdb6 Setting up swapspace version 1, size = 500 MiB (524283904 bytes) no label, UUID=bdb56026-b883-41fc-a422-51492af8cbb5 ``` *укажем точку монтирования* ```bash sudo vi /etcfstab ``` *добавим* ```bash UUID=bdb56026-b883-41fc-a422-51492af8cbb5 swap swap defaults 0 0 ``` *активируем новый раздел подкачки* ```bash [user@host ~]$ sudo mount -a [user@host ~]$ free -m total used free shared buff/cache available Mem: 1817 539 753 2 524 1123 Swap: 999 0 999 [user@host ~]$ sudo swapon /dev/sdb6 [user@host ~]$ free -m total used free shared buff/cache available Mem: 1817 539 752 2 524 1123 Swap: 1499 0 1499 ``` *** **Глава 15. Управление расширенным хранилищем.** *Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.* 1. Создать LVM том с именем `lvdb` размером 1 Гб, Также создать VG и PV, необходимые для этого LV. *для создания нового LVM тома достаточно использовать существующие диски, необходимо лишь создать дополнительный раздел соответствующего объема* *разметка диска* ```bash sudo gdisk /dev/sdb n - создать новый раздел номер и начало раздела оставляем как предлагает программа Last sector - указываем +1GiB Тип раздела - 8e00 w - записать изменения на диск ``` ```bash [user@host ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 32G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 1000M 0 part [SWAP] └─sda3 8:3 0 9.8G 0 part └─cl-root 253:0 0 9.8G 0 lvm / sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 1G 0 part sdc 8:32 0 10G 0 disk sr0 11:0 1 1024M 0 rom ``` *создание LVM* ```bash [user@host ~]$ sudo pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. [user@host ~]$ sudo vgcreate vgdb /dev/sdb1 Volume group "vgdb" successfully created [user@host ~]$ sudo lvcreate -n lvdb -l 100%FREE vgdb Logical volume "lvdb" created. [user@host ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 32G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 1000M 0 part [SWAP] └─sda3 8:3 0 9.8G 0 part └─cl-root 253:0 0 9.8G 0 lvm / sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 1G 0 part └─vgdb-lvdb 253:1 0 1020M 0 lvm sdc 8:32 0 10G 0 disk sr0 11:0 1 1024M 0 rom ``` 2. Отформатировать созданный LV в XFS и примонтировать на постоянной основе в папку `/mount/lvdb` ```bash [user@host ~]$ sudo mkfs.xfs /dev/mapper/vgdb-lvdb meta-data=/dev/mapper/vgdb-lvdb isize=512 agcount=4, agsize=65280 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=261120, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=1566, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Discarding blocks...Done. ``` ```bash [user@host ~]$ sudo mkdir /mount/lvdb [user@host ~]$ sudo vi /etc/fstab ``` *добавим строку* ```bash /dev/mapper/vgdb-lvdb /mount/lvdb xfs defaults 0 0 ``` *проверим монтирование* ```bash [user@host ~]$ sudo mount -a ``` 3. Используя соответствующее решение, создать том с тонким выделением (thin provisioned volume) объёмом 10 Тб. *для выполнения этого задания необходимо создать том VDO, т.к. именно он соответствует требованию тонкого выделения. VDO работает с целыми устройствами, поэтому для создания тома необходим отдельный диск.* *для использования VDO, размер блочного устройства должен быть > 4 Гб.* ```bash sudo yum install vdo kmod-kvdo ``` ```bash [user@host ~]$ sudo vdo create --name vdo1 --device /dev/sdc --vdoLogicalSize 10T Creating VDO vdo1 The VDO volume can address 6 GB in 3 data slabs, each 2 GB. It can grow to address at most 16 TB of physical storage in 8192 slabs. If a larger maximum size might be needed, use bigger slabs. Starting VDO vdo1 Starting compression on VDO vdo1 VDO instance 0 volume is ready at /dev/mapper/vdo1 ``` *текущее задание не предполагает монтирование тома VDO, но необъодимо иметь ввиду, для монтирования подобного устройства, в файле `/etc/fstab` необходимо указать опции монтирования `x-systemd.requires=vdo.service`* *увидеть созданный том* ```bash vdostats --human-readable ``` 4. Создать зашифрованный том LUKS объемом 1 ГБ с именем `secret`. Убедитесь, что том монтируется постоянно, но не автоматически в `/mount/secret`. Создать соответствующий раздел на диске ```bash [user@host ~]$ sudo parted /dev/sdb (parted) mklabel gpt (parted) mkpart Partition name? []? luks1 File system type? [ext2]? Start? 1 End? 1GiB (parted) p Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 5369MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1074MB 1073MB ext2 luks1 (parted) q Information: You may need to update /etc/fstab. ``` Создать зашифрованный раздел ```bash [user@host ~]$ sudo cryptsetup luksFormat /dev/sdb1 ``` *подтвердить заглавными YES* *задать пароль доступа, при этом простой пароль система может не принять, в этом случае будет выведено сообщение* Открыть раздел и задать ему имя, по которому раздел будет доступе в `/dev/mapper` ```bash [user@host ~]$ sudo cryptsetup luksOpen /dev/sdb1 secret ``` ```bash [user@host ~]$ ls -l /dev/mapper/ | grep secret lrwxrwxrwx. 1 root root 7 Sep 10 14:41 secret -> ../dm-3 ``` Отформатировать раздел *форматировать необходимо в разблокированном состоянии* ```bash [user@host ~]$ sudo mkfs.xfs /dev/mapper/secret meta-data=/dev/mapper/secret isize=512 agcount=4, agsize=64448 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=257792, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=1566, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 ``` Монтирование зашифрованного раздела ```bash [user@host ~]$ sudo mkdir /mount/secret [user@host ~]$ sudo vi /etc/fstab ``` *добавить строку* ```bash /dev/mapper/secret /mount/secret xfs defaults 0 0 ``` **добавление записи в fstab недостаточно, т.к. для монтирования устройство должно быть доступно** *необходимо добавить конфигурационный файл в `/etc/crypttab`* ```bash [user@host ~]$ sudo vi /etc/crypttab ``` *в файле необходимо указать:* - название устройства, в нашем случае `secret` - блочное устройство, на котором размещён зашифрованный раздел - `/dev/sdb2` - параметр - нужно ли вводить пароль автоматически, `none` - не вводить пароль автоматически, требовать ввода от пользователя *синтаксис конфиг. файла можно узнать в справке `man crypttab`* ```bash secret /dev/sdb1 none ``` Для вступления изменений в силу, необходимо перезагрузить хост ```bash [user@host ~]$ sudo reboot ``` *** **Глава 16. Управление ядром.** 1. Обновить версию ядра. ```bash [user@host ~]$ sudo yum update kernel ``` 2. Включить маршрутизацию IPv4 пакетов *посмотрим текущую настройку* ```bash [user@host ~]$ sysctl -a | grep forward ``` *нас интересует строка `net.ipv4.ip_forward = 0`* *чтобы маршрутизация IPv4 пакетов осуществлялась после перезагрузки, необходимо добавить настройку в `/etc/sysctl.conf`* ```bash [user@host ~]$ vi /etc/sysctl.conf ``` *добавить строку* ```bash net.ipv4.ip_forward = 1 ``` *изменения вступят в силу после перезагрузки.* *для включения маршрутизации немедленно до перезагрузки* ```bash [user@host ~]$ echo 1 > /proc/sys/net/ipv4/ip_forward ``` *** **Глава 17. Управление загрузкой ОС.** 1. Назначить режимом загрузки по-умолчанию - multi user target. ```bash [user@host ~]$ sudo systemctl get-default [sudo] password for da2001: graphical.target [user@host ~]$ sudo systemctl set-default multi-user.target Removed /etc/systemd/system/default.target. Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target. ``` 2. Изменить конфигурацию загрузки - удалить опции, скрывающие процесс загрузки ОС. ```bash [user@host ~]$ sudo vi /etc/default/grub ``` *в строке* ```bash GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=212f6847-0853-46b0-9654-8b06b248f956 rd.lvm.lv=cl/root rhgb quiet" ``` *необходимо удалить `rhgb quiet`* *далее, нужно обновить конфигурацию grub* если система установлена на раздел mbr (bios), выполнить `sudo grub2-mkconfig -o /boot/grub2/grub.cfg` если система установлена на раздел gpt (uefi), выполнить `sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cgf` *узнать на какой раздел установлена система, можно посмотрев на метку диска в parted, gdisk или с помощью вывода* ```bash [user@host ~]$ mount | grep '^/' ``` *усли в выводе будут строки, содержащие `efi` значит система установлена на gpt раздел* *** **Глава 18. Устранение проблем.** 1. Сброс пароля root. *на раннем этапе загрузки - при появлении меню grub, нажать `e`* в строке `linux ($root)/...` в конце удалить `rhgb quiet` и добавить `rd.break`. Для загрузки нажать `Ctrl+x` - Корневая ФС хоста смонтирована в папку `/sysroot` в режиме только чтение `ro`, необходимо перемонтировать её на запись ```bash switch_root:/# mount -o rw,remount /sysroot ``` - Далее необходимо изменить корневую ФС на ФС хоста ```bash switch_root:/# chroot /sysroot ``` - Изменить пароль root *в интерактивном режиме - необходимо ввести новый пароль 2 раза (если основной язык хоста был русский, вместо предложения ввести новый пароль отобразятся "квадратики"* ```bash sh-4.4# passwd ``` *или сразу записать новый пароль в конфиг. файл* ```bash sh-4.4# echo new_password | passwd --stdin root ``` - Обновить контекст selinux *в текущем режиме selinux не загружен, поэтому отслеживания изменения файлов не происходит. Если после внесения изменений в файл `passwd` попытаться загрузить систему, никто не сможет авторизоваться, т.к. файл был изменен, поэтому selinux его заблокирует. Необходимо создать файл, который инициирует обновление контекста selinux для всех файлов* ```bash sh-4.4# touch /.autorelabel ``` - Дважды нажать `Ctrl+d` для перезагрузки *** **Глава 19. Написание shel скриптов.** 1. Написать скрипт, принимающий аргумент. Если аргумент - "yes", скрипт должен выполнить команду `echo that's nice`, если аргумент - "no", скрипт должен выполнить команду `echo I'm sorry to hear that`. Во всех остальных случаях - `echo unknown argument provided` - вариант 1 (if..elif..else..fi) ```bash #!/bin/bash # проверим, что аргумент присутствует if [ -z $1 ] then echo you need provide an argument exit 2 fi # добавим регистронезависимость для аргумента arg=$(echo $1 | tr [:upper:] [:lower:]) if [ $arg = yes ] then echo that\'s nice elif [ "$arg" = "no" ] then echo "I'm sorry to hear that" else echo unknown argument provided fi ``` - вариант 2 (case) ```bash #!/bin/bash # проверим, что аргумент присутствует if [ -z $1 ] then echo you need provide an argument exit 2 fi # добавим регистронезависимость для аргумента arg=$(echo $1 | tr [:upper:] [:lower:]) case $arg in yes) echo "that's nice" ;; no) echo "I'm sorry to hear that" ;; *) echo unknown argument provided ;; esac ``` *не забыть сделать скрипт исполняемым `chmod +x script_name`* *** **Глава 20. Настройка ssh.** 1. Настроить доступ с использованием ssh ключей для доступа на localhost - создать пару ключей (pub, private) ```bash [user@host ~]$ ssh-keygen ``` - передать ключи на сервер ```bash [user@host ~]$ ssh-copy-id localhost ``` - проверить подключение ```bash [user@host ~]$ ssh localhost ``` 2. Настроить ssh таким образом, чтобы только пользователи linda и root имели возможность подключения ```bash [user@host ~]$ sudo vi /etc/ssh/sshd_config ``` В секции `# Authentication:` добавить строку ```bash AllowUsers linda root ``` перезагрузить службу ssh ```bash [user@host ~]$ sudo systemctl restart sshd ``` *** **Глава 21. Настройка HTTP.** 1. Настроить Apache для отображения простой web страницы с текстом `Hello, world!` ```bash [user@host ~]$ sudo yum install -y httpd [sudo] password for da2001: Last metadata expiration check: 3:38:53 ago on Thu 16 Sep 2021 04:45:34 AM MSK. Package httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete! [user@host ~]$ sudo systemctl enable --now httpd [user@host ~]$ sudo vi /var/www/http/index.html ``` *вставить текст `Hello, world!`* ```bash [user@host ~]$ curl localhost Hello, world! ``` ***