#### Решения лабораторных работ по видеокурсу Sander Van Vugt *** *лабораторные работы начинаются в 3-й главы* 3. [Базовые инструменты для работы с файлами.](#Chapter3) 4. [Работа с текстовыми файлами.](#Chapter4) 5. [Подключение к серверу RHEL.](#Chapter5) 6. [Управление пользователями и группами.](#Chapter6) 7. [Права доступа к файлам.](#Chapter7) 8. [Настройка сети.](#Chapter8) 9. [Управление процессами.](#Chapter9) 10. [Управление программным обеспечением.](#Chapter10) 11. [Работа с systemd.](#Chapter11) 12. [Планирование заданий.](#Chapter12) 13. [Настройка хранения логов.](#Chapter13) 14. [Управление хранилищем.](#Chapter14) 15. [Управление расширенным хранилищем.](#Chapter15) 16. [Управление ядром.](#Chapter16) 17. [Управление загрузкой ОС.](#Chapter17) 18. [Устранение проблем.](#Chapter18) 19. [Написание shel скриптов.](#Chapter19) 20. [Настройка ssh.](#Chapter20) 21. [Настройка HTTP.](#Chapter21) 22. [Управление SELinux.](#Chapter22) 23. [Управление межсетевым экраном.](#Chapter23) 24. [Автоматическая установка.](#Chapter24) 25. [Настройка даты и времени.](#Chapter25) 26. [Доступ к удалённым ФС.](#Chapter26) *** ###### Chapter3 **Базовые инструменты для работы с файлами.** 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 ``` *** ###### Chapter4 **Работа с текстовыми файлами.** 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 '\' * ``` *** ###### Chapter5 **Подключение к серверу RHEL.** 1. Из графической консоли перейдите в вирутальный терминал tty6. ```bash sudo chvt 6 ``` 2. После выполнения 1-го задания авторизуйтесь как обычный пользователь и вернитесь в графический интерфейс, используя соответствующую команду. ```bash chvt 1 ``` 3. Используя `ssh` подключитесь как `root` к `localhost` ```bash ssh root@localhost ``` *** ###### Chapter6 **Управление пользователями и группами.** 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 ``` *** ###### Chapter7 **Права доступа к файлам.** 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 ``` *** ###### Chapter8 **Настройка сети.** 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. Перезагрузить сервер и убедиться, что настройки сохранились. *** ###### Chapter9 **Управление процессами.** 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 ``` *** ###### Chapter13 **Настройка хранения логов.** 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 } ``` *** ###### Chapter14 **Управление хранилищем.** *Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 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 ``` *** ###### Chapter15 **Управление расширенным хранилищем.** *Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 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 ``` *** ###### Chapter16 **Управление ядром.** 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 ``` *** ###### Chapter17 **Управление загрузкой ОС.** 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 раздел* *** ###### Chapter18 **Устранение проблем.** 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` для перезагрузки *** ###### Chapter19 **Написание 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`* *** ###### Chapter20 **Настройка 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 ``` *** ###### Chapter21 **Настройка 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! ``` *** ###### Chapter22 **Управление SELinux.** 1. Убедиться, что SELinux включен и работает в режиме enforcing. ```bash [user@host ~]$ getenforce Enforcing ``` *если значение будет `Permissive`, необходимо перевести в режим `enforced` командой `sudo setenforce enforced` или `sudo setenforce 1`* *усли значение будет `desabled`, значит SELinux отключен полностью, необходимо изменить конфиг.файл* ```bash sudo vi /etc/sysconfig/selinux ``` *установить значение* ```bash SELINUX=enforcing ``` 2. Некоторые файлы в `/etc` имеют неверную метку контекста. Необходимо это исправить. ```bash [user@host ~]$ sudo restorecon -Rv /etc [user@host ~]$ sudo reboot ``` *** ###### Chapter23 **Управление межсетевым экраном.** 1. Настроить фаервол таким образом, чтобы службы ssh и Apache имели удалённый доступ. ```bash [user@host ~]$ sudo firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit collectd condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-apiserver ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rquotad rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server [user@host ~]$ sudo firewall-cmd --add-service=ssh [sudo] password for da2001: Warning: ALREADY_ENABLED: 'ssh' already in 'public' success [user@host ~]$ sudo firewall-cmd --add-service=http success [user@host ~]$ sudo firewall-cmd --add-service=http --permanent success [user@host ~]$ sudo firewall-cmd --add-service=https success [user@host ~]$ sudo firewall-cmd --add-service=https --permanent success [user@host ~]$ sudo reboot ``` *** ###### Chapter24 **Автоматическая установка.** 1. Создать kickstart файл `my-ks.cfg`, убедиться, что его можно использовать для автоматической установки. Кроме этого необходимо учесть: - установщик должен запросить пароль - сетевое поключение будет доступно при загрузке - имя компьютера будет `server10.example.com` *после установки RHEL, в домашней директории root создается `kickstart.cfg`, его можно взять за основу* ```bash [root@host ~]# ls anaconda-ks.cfg initial-setup-ks.cfg [root@host ~]# cp initial-setup-ks.cfg my-ks.cfg ``` - установщик должен запросить пароль *в файле `my-ks.cfg` необходимо найти секцию `# Root password`, чтобы установщик запросил пароль, необходимо удалить данные из этой секции* - сетевое поключение будет доступно при загрузке *в файле `my-ks.cfg` в секции `# Network information`, проверить корректность данных для подключения к сети* - имя компьютера будет `server10.example.com` *в файле `my-ks.cfg` в секции `# Network information` привести строку к виду:* `network --hostname=server10.example.com` *** ###### Chapter25 **Настройка даты и времени.** 1. Установить часовой пояс в соответствии с расположением. ```bash [user@host ~]$ timedatectl set-timezone Europe/Moscow ``` 2. Вручную установить время на 5 минут вперед. ```bash [user@host ~]$ timedatectl Local time: Ср 2021-09-22 16:46:37 MSK Universal time: Ср 2021-09-22 13:46:37 UTC RTC time: Ср 2021-09-22 13:46:38 Time zone: Europe/Moscow (MSK, +0300) System clock synchronized: no NTP service: inactive RTC in local TZ: no [user@host ~]$ sudo timedatectl set-time 16:51 [user@host ~]$ timedatectl Local time: Ср 2021-09-22 16:51:08 MSK Universal time: Ср 2021-09-22 13:51:08 UTC RTC time: Ср 2021-09-22 13:51:08 Time zone: Europe/Moscow (MSK, +0300) System clock synchronized: no NTP service: inactive RTC in local TZ: no ``` 3. Убедиться, что синхронизация времени по NTP активна и работает. ```bash [user@host ~]$ sudo timedatectl set-ntp yes ``` *** ###### Chapter26 **Доступ к удалённым ФС.** ***Сервер - 192.168.10.10, Клиент - 192.168.10.11*** 1. На своём IPA сервере установить hostname `labipa.example.com`. ```bash [da2001@server1 ~]$ sudo hostnamectl set-hostname labipa.example.com ``` 2. Настроить на IPA сервере доступ для чтения/записи к двум папкам: - `home/ldap` - `/data` ```bash [da2001@labipa ~]$ sudo mkdir /data /home/ldap [da2001@labipa ~]$ sudo vi /etc/exports ``` *добавить строки* ```bash /data *(rw) /home/ldap *(rw) ``` *затем необходимо запустить NFS сервер* ```bash [da2001@labipa ~]$ sudo systemctl enable --now nfs-server.service ``` *также необходимо добавить сервисы в фаервол* ```bash [da2001@labipa ~]$ sudo firewall-cmd --add-service=nfs success [da2001@labipa ~]$ sudo firewall-cmd --add-service=mountd success [da2001@labipa ~]$ sudo firewall-cmd --add-service=rpc-bind success [da2001@labipa ~]$ sudo firewall-cmd --add-service=nfs --permanent success [da2001@labipa ~]$ sudo firewall-cmd --add-service=mountd --permanent success [da2001@labipa ~]$ sudo firewall-cmd --add-service=rpc-bind --permanent success ``` *на клиенте необходимо проверить доступные сетевые папки для монтирования* ```bash [user@host ~]$ sudo showmount -e 192.168.10.10 Export list for 192.168.10.10: /home/ldap * /data * ``` 3. В папке `/home/ldap` должны создаваться поддиректории с именами LDAP пользователей. *для выполнения этого задания необходимо использовать `autofs`* *!Настройку необходимо выполнять на клиенте!* ```bash [user@host ~]$ sudo yum install autofs -y ``` *выполним настройку* ```bash [user@host ~]$ sudo vi /etc/auto.master ``` *добавить строку* ```bash /home/ldap /etc/auto.ldap ``` *добавим путь к папке* ```bash [user@host ~]$ sudo vi /etc/auto.ldap ``` *втавим строку* ```bash * -rw 192.168.10.10:/home/ldap/& ``` ```bash [user@host ~]$ sudo systemctl restart autofs ``` 4. Домашние директории LDAP пользователей доступны по NFS по пути `/home/ldap/username`. Необходимо настроить их автоматическое монтирование. ***выполнено в предыдущем пункте*** 5. Настроить NFS клиент для автоматического монтирования `192.168.10.10:/data`. ```bash [user@host ~]$ sudo mkdir /files ``` ```bash [user@host ~]$ sudo vi /etc/auto.master ``` *добавить строку* ```bash /files /etc/auto.files ``` ```bash [user@host ~]$ sudo vi /etc/auto.files ``` *добавить строку* ```bash data -rw 192.168.10.10:/data ``` ```bash [user@host ~]$ sudo systemctl restart autofs ``` ***