rhcsa_labs/rh199_(rapid)/labs_solutions.md

1289 lines
61 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#### Лабораторные работы по курсу RH199 (RHCSA)
***
###### top
[Подготовка виртуальных хостов для выполнения лабораторных работ.](#stand)
1. [Управление локальными пользователями и группами.](#chapter1)
2. [Управление доступом к файлам.](#chapter2)
3. [Настройка SELinux.](#chapter3)
4. [Настройка производительности системы.](#chapter4)
5. [Установка и обновление программного обеспечения.](#chapter5)
6. [Управление локальным хранилищем.](#chapter6)
7. [Настройка сервисов и управление загрузкой процессов.](#chapter7)
8. [Настройка сетевых интерфейсов.](#chapter8)
9. [Анализ и хранение логов.](#chapter9)
10. [Реализация расширенных функций хранилища.](#chapter10)
11. [Доступ к NFS (Network-Attached Storage).](#chapter11)
12. [Управление сетевой безопасностью.](#chapter12)
13. [Запуск контейнеров.](#chapter13)
***
###### stand
**Подготовка виртуальных хостов для выполнения лабораторных работ.**
*Для выполнения лабораторных работ потребуется настроить 2 виртуальных хоста*
server1 - 192.168.10.10
user: student
password: student
root password: redhat
```bash
[root@server1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 10G 0 part
│ └─rhel_server1-root 253:0 0 10G 0 lvm /
└─sda2 8:2 0 500M 0 part /boot
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sr0 11:0 1 1024M 0 rom
```
server2 - 192.168.10.11
user: student
password: student
root password: redhat
Дополнительно необходимо:
*SERVER1*
Перечень необходимых команд root (*стоит это оформить в виде скрипта*)
```bash
useradd student -G wheel
echo student | passwd student --stdin
echo '192.168.10.11 server2' >> /etc/hosts
wget -P /home/student https://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/h/htop-3.0.5-1.el8.x86_64.rpm
yum install -y httpd
echo 'Welcome to WEB on SERVER1' > /var/www/html/index.html
mkdir /var/www/html2
echo 'Welcome to VHOST on SERVER1' > /var/www/html2/index.html
cat <<EOT >> /etc/httpd/conf.d/vhost.conf
Listen 1001
NameVirtualHost *:1001
<VirtualHost *:1001>
DocumentRoot /var/www/html2
</VirtualHost>
EOT
firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent
systemctl enable --now httpd
useradd poduser
echo redhat | passwd poduser --stdin
```
*SERVER2*
Перечень необходимых команд root (*стоит это оформить в виде скрипта*)
```bash
useradd student -G wheel
echo student | passwd student --stdin
echo '192.168.10.10 server1' >> /etc/hosts
yum install httpd -y
mkdir /webserver
sed -i 's/\/var\/www\/html/\/webserver/g' /etc/httpd/conf/httpd.conf
systemctl enable --now httpd
echo "This is the html file for the SELinux final lab on SERVER2." > /webserver/lab.html
firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent
mkdir -p /shares/{nfs,autofs}
echo "Welcome to NFS share on server2!" > /shares/nfs/welcome.txt
echo "Welcome to Autofs share on server2!" > /shares/autofs/welcome.txt
echo "/shares/nfs *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports
echo "/shares/autofs *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports
systemctl enable --now nfs-server.service
firewall-cmd --add-service=nfs
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload
```
**После настройки ВМ необходимо сохранить состояние - создать снапшот и после выполнения каждой лабораторной работы возвращаться к исходному состоянию.**
***
###### Chapter1
**Управление локальными пользователями и группами.**
1. Подключиться по ssh к server1
```bash
da2001@Zenmint ~ $ ssh student@server1
```
2. У всех вновь создаваемых пользователей пароль необходимо изменять каждые 30 дней.
```bash
[student@server1 ~]$ sudo -i
[sudo] пароль для student:
[root@server1 ~]# vim /etc/login.defs
```
*необходимо изменить строку*
```bash
PASS_MAX_DAYS 30
```
3. Создать новую группу `consultants` с GID 35000.
```bash
[root@server1 ~]# groupadd -g 35000 consultants
```
4. Настроить административные права членов группы `consultants`, чтобы они могли выполнять любые команды от любых пользователей.
*best practices RedHat не редактировать существующие системные файлы, а создавать свои в соответствующих директориях.
Создадим файл vim `/etc/sudoers.d/consultants`*
```bash
[root@server1 ~]# vim /etc/sudoers.d/consultants
```
*добавить строку*
```bash
%consultants ALL=(ALL) ALL
```
5. Создать пользователей `consultant1`, `consultant2`, и `consultant3` и задать им в качестве дополнительной группы `consultants`.
```bash
[root@server1 ~]# useradd -G consultants consultant1
[root@server1 ~]# useradd -G consultants consultant2
[root@server1 ~]# useradd -G consultants consultant3
```
6. Учётные записи пользователей `consultant1`, `consultant2`, и `consultant3` настроить таким образом, чтобы срок их действия истекал через 90 дней с текущей даты.
*узнать какая дата будет через 90 дней от текущей даты можно с помощью команды*
```bash
[root@server1 ~]# date -d "+90 days" +%F
```
*ограничить срок действия пароля*
```bash
[root@server1 ~]# chage -E 2022-01-06 consultant1
[root@server1 ~]# chage -E 2022-01-06 consultant2
[root@server1 ~]# chage -E 2022-01-06 consultant3
```
7. Изменить политику паролей для учетной записи `consultant2`, чтобы нужно было менять пароль каждые 15 дней.
```bash
[root@server1 ~]# chage -M 15 consultant2
```
8. Пользователи `consultant1`, `consultant2`, и `consultant3` при первом входе в систему должны изменить свои пароли в принудительном порядке.
```bash
[root@server1 ~]# chage -d 0 consultant1
[root@server1 ~]# chage -d 0 consultant2
[root@server1 ~]# chage -d 0 consultant3
```
**Проверка**
Наличие группы `consultants`, правильность её GID и члены группы
```bash
[student@server1 ~]$ cat /etc/group | grep consultants
consultants:x:35000:consultant1,consultant2,consultant3
```
Срок действия паролей, учётной записи и требование изменить пароль при первом входе в систему
```bash
[root@server1 ~]# chage -l consultant1
Последний раз пароль был изменён : пароль должен быть изменён
Срок действия пароля истекает : пароль должен быть изменён
Пароль будет деактивирован через : пароль должен быть изменён
Срок действия учётной записи истекает : янв 06, 2022
Минимальное количество дней между сменой пароля : 0
Максимальное количество дней между сменой пароля : 30
Количество дней с предупреждением перед деактивацией пароля : 7
[root@server1 ~]# chage -l consultant2
Последний раз пароль был изменён : пароль должен быть изменён
Срок действия пароля истекает : пароль должен быть изменён
Пароль будет деактивирован через : пароль должен быть изменён
Срок действия учётной записи истекает : янв 06, 2022
Минимальное количество дней между сменой пароля : 0
Максимальное количество дней между сменой пароля : 15
Количество дней с предупреждением перед деактивацией пароля : 7
[root@server1 ~]# chage -l consultant3
Последний раз пароль был изменён : пароль должен быть изменён
Срок действия пароля истекает : пароль должен быть изменён
Пароль будет деактивирован через : пароль должен быть изменён
Срок действия учётной записи истекает : янв 06, 2022
Минимальное количество дней между сменой пароля : 0
Максимальное количество дней между сменой пароля : 30
Количество дней с предупреждением перед деактивацией пароля : 7
```
Наличие административных прав у членов группы `consultants`
```bash
[root@server1 ~]# cat /etc/sudoers.d/consultants
%consultants ALL=(ALL) ALL
```
[вверх](#top)
***
###### Chapter2
**Управление доступом к файлам.**
1. На server1 создать директорию `/home/techdocs`.
```bash
[student@server1 ~]$ sudo -i
[sudo] пароль для student:
[root@server1 ~]# mkdir /home/techdocs
```
2. Создать группу `techdocs`, изменить группу владельца директории `/home/techdocs` на группу `techdocs`.
```bash
[root@server1 ~]# groupadd techdocs
[root@server1 ~]# chgrp techdocs /home/techdocs/
```
3. Создать пользователей `tech1`, `tech2` и добавить их в группу `techdocs`.
```bash
[root@server1 ~]# useradd -G techdocs tech1
[root@server1 ~]# useradd -G techdocs tech2
```
4. Убедиться, что пользователи `tech1`, `tech2` не могут создавать файлы в папке `/home/techdocs`.
```bash
[root@server1 ~]# su - tech1
[tech1@server1 ~]$ touch /home/techdocs/testfile
touch: невозможно выполнить touch для '/home/techdocs/testfile': Отказано в доступе
[tech1@server1 ~]$ выход
[root@server1 ~]# su - tech2
[tech2@server1 ~]$ touch /home/techdocs/
touch: установка временных отметок '/home/techdocs/': Отказано в доступе
[tech2@server1 ~]$ выход
```
5. Для директории `/home/techdocs` установить следующие разрешения: setgid (2), чтение/запись/исполнение для владельца и группы (7), для остальных нет никаких прав (0).
```bash
[root@server1 ~]# chmod 2770 /home/techdocs/
```
6. Проверить, что разрешения установлены корректно.
```bash
[root@server1 ~]# ls -ld /home/techdocs/
drwxrws---. 2 root techdocs 6 окт 9 03:36 /home/techdocs/
```
7. Проверить, что члены группы `techdocs` (`tech1`, `tech2`) теперь могут создавать и редактировать файлы в директории `/home/techdocs`, а другие пользователи не могут.
```bash
[root@server1 ~]# su - tech1
[tech1@server1 ~]$ touch /home/techdocs/file1
[tech1@server1 ~]$ выход
[root@server1 ~]# su - tech2
[tech2@server1 ~]$ touch /home/techdocs/file2
[tech2@server1 ~]$ echo "Test" >> /home/techdocs/file1
[tech2@server1 ~]$ cat /home/techdocs/file1
Test
[tech2@server1 ~]$ выход
[root@server1 ~]# su - student
[student@server1 ~]$ touch /home/techdocs/file3
touch: невозможно выполнить touch для '/home/techdocs/file3': Отказано в доступе
[student@server1 ~]$ echo "Student test" >> /home/techdocs/file1
-bash: /home/techdocs/file1: Отказано в доступе
```
8. Изменить глобальный скрипт загрузки. Обычные пользователи должны иметь umask при которой другие пользователи не смогут просматривать и изменять новые файлы и каталоги.
*создадим новый файл `/etc/profile.d/local-umask.sh` и скопируем в него блок, который имеет отношение к umask из файла `/etc/profile`, значение umask в первом упоминании заменим на 007.*
**Важно обратить внимание - название файла обязательно должно иметь расширение `.sh`, т.к. только такие файлы проверяются.**
```bash
[root@server1 ~]# vim /etc/profile.d/local-umask.sh
```
```bash
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 007
else
umask 022
fi
```
**Проверка**
*проверим только последний пункт, т.к. все предыдущие проверяются в процессе выполнения*
*назначим пользователю `student` временную маску 007, создадим новый файл и проверим его разрешения.*
```bash
[student@server1 ~]$ umask 007
[student@server1 ~]$ touch file1
[student@server1 ~]$ ls -l
итого 0
-rw-rw----. 1 student student 0 окт 9 04:00 file1
```
*остальные не имеют никаких разрешений на файл - то что было нужно в задании.*
[вверх](#top)
***
###### Chapter3
**Настройка SELinux.**
1. На server1 запустите браузер и введите адрес `http://server2/lab.html`. Отобразится сообщение `Forbidden You don't have permission to access this resource.`
2. Изучите и определите проблему SELinux, которая не позволяет Apache обслуживать веб-контент.
```bash
[root@server2 ~]# less /var/log/messages
```
*поиском найти уведомления SELinux `/sealert`*
*скопировать и ввести первое упоминание вида `sealert -l 8dcf4fc2-54e6-448d-91c6-ac047615927f`*
*в сообщении будет предложено решение проблемы*
```bash
[root@server2 ~]# sealert -l 8dcf4fc2-54e6-448d-91c6-ac047615927f
SELinux запрещает /usr/sbin/httpd доступ getattr к файл /webserver/lab.html.
***** Модуль restorecon предлагает (точность 94.8) *************************
Если вы хотите исправить метку.$TARGETЗнак _PATH по умолчанию должен быть httpd_sys_content_t
То вы можете запустить restorecon. Возможно, попытка доступа была остановлена ​​из-за недостаточных разрешений для доступа к родительскому каталогу, и в этом случае попытайтесь соответствующим образом изменить следующую команду.
Сделать
# /sbin/restorecon -v /webserver/lab.html
... дальнейший вывод отброшен ...
```
3. Отобразите тип контекста SELinux для стандартной и запрашиваемой директории web сервера.
```bash
[root@server2 ~]# ls -ldZ /var/www/html/ /webserver/
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 окт 7 16:06 /var/www/html/
drwxr-xr-x. 2 root root unconfined_u:object_r:default_t:s0 40 окт 7 16:13 /webserver/
```
4. Устраните проблему SELinux, из-за которой Apache не может обслуживать веб-контент.
*как видно из предыдущего пункта, в новой папке web сервера невено установлен тип контекста SELinux. Необходимо его изменить.*
```bash
[root@server2 ~]# semanage fcontext -a -t httpd_sys_content_t '/webserver(/.*)?'
[root@server2 ~]# restorecon -vR /webserver
```
5. Убедитесь, что проблема SELinux решена и Apache может обслуживать веб-контент.
```bash
[root@server2 ~]# curl http://server2/lab.html
This is the html file for the SELinux final lab on SERVER2.
```
[вверх](#top)
***
###### Chapter4
**Настройка производительности системы.**
1. Измените текущий профиль для server1 на `balanced`.
```bash
[root@server1 ~]# tuned-adm profile balanced
```
2. Два процесса на сервере сильно загружают процессор. Измените приоритет этих процессов на значение 10.
*для запуска тестовых процессов можно использовать такие команды*
```bash
cat /dev/zero >> /dev/null &
cat /dev/zero >> /dev/null &
```
*отобразим процессы с сортировкой по загрузке процессора и выведем 2 последних*
*убедимся, что это процессы, которые сформированы нами*
```bash
[root@server1 ~]# ps -aux --sort=pcpu | tail -2
root 17216 49.6 0.0 7448 908 pts/2 R 10:21 1:07 cat /dev/zero
root 17217 49.6 0.0 7448 940 pts/2 R 10:21 1:07 cat /dev/zero
```
*для изменения приоритета выполним*
```bash
[root@server1 ~]# renice -n 10 17216 17217
17216 (process ID) old priority 0, new priority 10
17217 (process ID) old priority 0, new priority 10
```
[вверх](#top)
***
###### Chapter5
**Установка и обновление программного обеспечения.**
*Все действия необходимо выполнять на server1*
1. Проверить, находится ли система в активированном состоянии. Если система активирована, необходимо отменить регистрацию и удалить системный репозиторий, который устанавливается при регистрации.
```bash
[root@server1 ~]# subscription-manager status
```
*если окажется, что система находится в активированном состоянии, необходимо отменить регистрацию и удалить настроенные репозитории*
```bash
[root@server1 ~]# subscription-manager unregister
[root@server1 ~]# ls /etc/yum.repos.d/
redhat.repo
[root@server1 ~]# rm /etc/yum.repos.d/redhat.repo
```
2. Используя полный установочный ISO образ, настроить локальный репозиторий с BaseOS и APPSteram. Проверку GPG не использовать.
*монтирование ISO в локальную директорию*
```bash
[root@server1 ~]# echo '/dev/sr0 /iso iso9660 ro 0 0' >> /etc/fstab
```
*настройка локального репозитория*
```bash
[root@server1 ~]# vim /etc/yum.repos.d/iso.repo
```
```bash
[BaseOS]
name = Red Hat Enterprise Linux 8 for x86_64 - BaseOS
baseurl = file:///iso/BaseOS
enabled = 1
gpgcheck = 0
[AppStream]
name = Red Hat Enterprise Linux 8 for x86_64 - AppStream
baseurl = file:///iso/AppStream
enabled = 1
gpgcheck = 0
```
*проверка установленного репозитория*
```bash
[root@server1 ~]# yum repolist
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id repo name
AppStream Red Hat Enterprise Linux 8 for x86_64 - AppStream
BaseOS Red Hat Enterprise Linux 8 for x86_64 - BaseOS
```
3. Установить пакет xsane-gimp и модуль PostgreSQL client версии 12.
*установка xsane-gimp*
```bash
[root@server1 ~]# yum install -y xsane-gimp
```
*установка модуля PostgreSQL client версии 12*
```bash
[root@server1 ~]# yum module list | grep postgres
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server [d] PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
[root@server1 ~]# yum module install -y postgresql:12/client
```
4. Установить пакет `htop-3.0.5-1.el8.x86_64.rpm` из директории `/home/student`.
```bash
[root@server1 ~]# yum localinstall /home/student/htop-3.0.5-1.el8.x86_64.rpm
```
5. Выполнить проверку установленных пакетов и модулей.
```bash
[root@server1 ~]# yum list installed | grep xsane-gimp
xsane-gimp.x86_64 0.999-30.el8 @AppStream
[root@server1 ~]# yum module list | grep postgresql
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 [e] client [i], server [d] PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
```
*в строке 12 версии отмечено [e]nabled, [i]nstalled*
```bash
[root@server1 ~]# rpm -qa | grep htop
htop-3.0.5-1.el8.x86_64
```
[вверх](#top)
***
###### Chapter6
**Управление локальным хранилищем.**
1. На server1 доступны 2 новых диска. На первом диске создайте раздел GPT объемом 2 Гб с именем `backup`.
```bash
[root@server1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 10G 0 part
│ └─rhel_server1-root 253:0 0 10G 0 lvm /
└─sda2 8:2 0 500M 0 part /boot
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sr0 11:0 1 1024M 0 rom
[root@server1 ~]# parted /dev/sdb mklabel gpt mkpart backup xfs 2048s 2GiB
```
2. Отформатируйте созданный раздел в XFS и создайте постоянную точку монтирования в директории `/backup`.
```bash
[root@server1 ~]# mkdir /backup
[root@server1 ~]# uuid=`lsblk -n -o uuid /dev/sdb1`
[root@server1 ~]# echo "UUID=$uuid /backup xfs defaults 0 0" >> /etc/fstab
```
3. На этом же диске создайте два дополнительных раздела по 512 Мб с именами `swap1` и `swap2` соответственно. Укажите корректную метку для этих разделов.
```bash
[root@server1 ~]# parted /dev/sdb print
Модель: QEMU QEMU HARDDISK (scsi)
Диск /dev/sdb: 5369MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt
Флаги диска:
Номер Начало Конец Размер Файловая система Имя Флаги
1 1049kB 2147MB 2146MB xfs backup
[root@server1 ~]# parted /dev/sdb mkpart swap1 linux-swap 2147M 2659M
Информация: Не забудьте обновить /etc/fstab.
[root@server1 ~]# parted /dev/sdb print
Модель: QEMU QEMU HARDDISK (scsi)
Диск /dev/sdb: 5369MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt
Флаги диска:
Номер Начало Конец Размер Файловая система Имя Флаги
1 1049kB 2147MB 2146MB xfs backup
2 2147MB 2659MB 512MB swap1 подкачка
[root@server1 ~]# parted /dev/sdb mkpart swap2 linux-swap 2659M 3171M
Информация: Не забудьте обновить /etc/fstab.
[root@server1 ~]# parted /dev/sdb print
Модель: QEMU QEMU HARDDISK (scsi)
Диск /dev/sdb: 5369MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt
Флаги диска:
Номер Начало Конец Размер Файловая система Имя Флаги
1 1049kB 2147MB 2146MB xfs backup
2 2147MB 2659MB 512MB swap1 подкачка
3 2659MB 3171MB 512MB swap2 подкачка
```
4. Инициализируйте разделы в качестве разделов подкачки, они должны быть активны при загрузке системы. Предусмотрите более высокий приоритет использования раздела `swap2` перед `swap1`.
```bash
[root@server1 ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 488 MiB (511700992 bytes)
без метки, UUID=a905e327-802c-41c0-89ca-500d542c9650
[root@server1 ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 488 MiB (511700992 bytes)
без метки, UUID=0c267fd8-c8f3-4cc3-9c2c-54fdefc13f2f
[root@server1 ~]# vim /etc/fstab
```
*добавить строки*
```bash
UUID=a905e327-802c-41c0-89ca-500d542c9650 swap swap pri=1 0 0
UUID=0c267fd8-c8f3-4cc3-9c2c-54fdefc13f2f swap swap pri=2 0 0
```
*активировать разделы подкачки*
```bash
[root@server1 ~]# swapon -a
[root@server1 ~]# free -h
total used free shared buff/cache available
Mem: 1,8Gi 1,2Gi 106Mi 17Mi 501Mi 442Mi
Swap: 975Mi 0B 975Mi
```
5. Проверьте свою работу: перезагрузите `server1`, в директории `/backup` должен быть смонтирован XFS раздел размером 2 Гб, а также 2 раздела подкачки общим объемом 1 Гб с более высоким приоритетом использования у раздела `swap2`.
```bash
[root@server1 ~]# reboot
Connection to server1 closed by remote host.
Connection to server1 closed.
```
*смонтированный раздел `/backup`*
```bash
[student@server1 ~]$ mount | grep backup
/dev/sdc1 on /backup type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
```
*подкачка (чем выше число в поле Приоритет, тем приоритетнее устройство)*
```bash
[student@server1 ~]$ free -h
total used free shared buff/cache available
Mem: 1,8Gi 484Mi 807Mi 10Mi 525Mi 1,1Gi
Swap: 975Mi 0B 975Mi
[student@server1 ~]$ swapon -s
Имя файла Тип Размер Исп-но Приоритет
/dev/sdc2 partition 499708 0 1
/dev/sdc3 partition 499708 0 2
```
[вверх](#top)
***
###### Chapter7
**Настройка сервисов и управление загрузкой процессов.**
1. На server1 запустить сервис `psacct`.
```bash
[root@server1 ~]# systemctl start psacct
[root@server1 ~]# systemctl status psacct
● psacct.service - Kernel process accounting
Loaded: loaded (/usr/lib/systemd/system/psacct.service; disabled; vendor preset: disabled)
Active: active (exited) since Tue 2021-10-12 08:11:45 MSK; 13s ago
Process: 6272 ExecStart=/usr/sbin/accton /var/account/pacct (code=exited, status=0/SUCCESS)
Process: 6270 ExecStartPre=/usr/libexec/psacct/accton-create (code=exited, status=0/SUCCESS)
Main PID: 6272 (code=exited, status=0/SUCCESS)
окт 12 08:11:45 server1 systemd[1]: Starting Kernel process accounting...
окт 12 08:11:45 server1 accton[6272]: Turning on process accounting, file set to '/var/account/pacct'.
окт 12 08:11:45 server1 systemd[1]: Started Kernel process accounting.
```
2. Настроить автозагрузку сервиса `psacct`.
```bash
[root@server1 ~]# systemctl enable psacct
Created symlink /etc/systemd/system/multi-user.target.wants/psacct.service → /usr/lib/systemd/system/psacct.service.
```
3. Остановить сервис `rsyslog` и удалить его из автозагрузки.
```bash
[root@server1 ~]# systemctl disable rsyslog.service
Removed /etc/systemd/system/syslog.service.
Removed /etc/systemd/system/multi-user.target.wants/rsyslog.service.
[root@server1 ~]# systemctl stop rsyslog.service
```
4. Перезагрузить server1 и проверить результат:
- сервис `psacct` должен быть загружен и активен
- сервис `rsyslog` не должен быть активен.
```bash
[root@server1 ~]# reboot
Connection to server1 closed by remote host.
Connection to server1 closed.
```
```bash
[student@server1 ~]$ systemctl status psacct
● psacct.service - Kernel process accounting
Loaded: loaded (/usr/lib/systemd/system/psacct.service; enabled; vendor preset: disabled)
Active: active (exited) since Tue 2021-10-12 08:20:06 MSK; 8min ago
Process: 754 ExecStart=/usr/sbin/accton /var/account/pacct (code=exited, status=0/SUCCESS)
Process: 743 ExecStartPre=/usr/libexec/psacct/accton-create (code=exited, status=0/SUCCESS)
Main PID: 754 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 11252)
Memory: 0B
CGroup: /system.slice/psacct.service
окт 12 08:20:01 server1 systemd[1]: Starting Kernel process accounting...
окт 12 08:20:02 server1 accton[754]: Turning on process accounting, file set to '/var/account/pacct'.
окт 12 08:20:06 server1 systemd[1]: Started Kernel process accounting.
[student@server1 ~]$ systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:rsyslogd(8)
https://www.rsyslog.com/doc/
```
[вверх](#top)
***
###### Chapter8
**Настройка сетевых интерфейсов.**
1. На server1 создать новое сетевое подключение с данными из таблицы:
Параметр | Значение
:------ | :------
Имя соединения | lab
IP адрес | 192.168.10.110/24
Gateway | 192.168.10.9
DNS | 192.168.10.9
Настроить соединение на автоматическое подключение к сети.
*настройку сети необходимо выполнять в локальной консоли server1*
**важно не забыть указать ethernet ipv4.method manual, иначе соединение не активируется**
```bash
[root@server1 ~]# nmcli connection add con-name lab type ethernet ipv4.method manual ipv4.address 192.168.10.110/24 ipv4.gateway 192.168.10.9 ipv4.dns 192.168.10.9 autoconnect yes
Соединение «lab» (2cdf6ccb-42a8-4176-8af1-65b220b6a95c) добавлено.
[root@server1 ~]# nmcli connection up lab
Соединение успешно активировано (адрес действующего D-Bus: /org/freedesktop/NetworkManager/ActiveConnection/10)
```
2. На server2 создать новое сетевое подключение с данными из таблицы:
Параметр | Значение
:------ | :------
Имя соединения | lab
IP адрес | 192.168.10.111/24
Gateway | 192.168.10.9
DNS | 192.168.10.9
Настроить соединение на автоматическое подключение к сети.
*настройку сети необходимо выполнять в локальной консоли server1*
**важно не забыть указать ethernet ipv4.method manual, иначе соединение не активируется**
```bash
[root@server2 ~]# nmcli connection add con-name lab type ethernet ipv4.method manual ipv4.addresses 192.168.10.111/24 ipv4.gateway 192.168.10.9 ipv4.dns 192.168.10.9 autoconnect yes
Соединение «lab» (d665308b-458b-4e04-8553-36299e5aac30) добавлено.
[root@server2 ~]# nmcli connection up lab
Соединение успешно активировано (адрес действующего D-Bus: /org/freedesktop/NetworkManager/ActiveConnection/4)
```
3. Перезагрузить server1 и server2
```bash
[root@server1 ~]# reboot
```
```bash
[root@server2 ~]# reboot
```
4. Проверить доступность обоих хостов с новыми адресами.
*server1*
```bash
[student@server1 ~]$ ping -c 3 192.168.10.111
PING 192.168.10.111 (192.168.10.111) 56(84) bytes of data.
64 bytes from 192.168.10.111: icmp_seq=1 ttl=64 time=0.526 ms
64 bytes from 192.168.10.111: icmp_seq=2 ttl=64 time=0.463 ms
64 bytes from 192.168.10.111: icmp_seq=3 ttl=64 time=0.233 ms
--- 192.168.10.111 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2054ms
rtt min/avg/max/mdev = 0.233/0.407/0.526/0.127 ms
```
*server2*
```bash
[student@server2 ~]$ ping -c 3 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=0.252 ms
64 bytes from 192.168.10.110: icmp_seq=2 ttl=64 time=0.268 ms
64 bytes from 192.168.10.110: icmp_seq=3 ttl=64 time=0.326 ms
--- 192.168.10.110 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2041ms
rtt min/avg/max/mdev = 0.252/0.282/0.326/0.031 ms
```
[вверх](#top)
***
###### Chapter9
**Анализ и хранение логов.**
1. На server1 изменить часовой пояс на соответствующий городу Новосибирск.
```bash
[root@server1 ~]# timedatectl set-timezone Asia/Novosibirsk
[root@server1 ~]# timedatectl show
Timezone=Asia/Novosibirsk
LocalRTC=no
CanNTP=yes
NTP=no
NTPSynchronized=no
TimeUSec=Thu 2021-10-07 16:33:57 +07
RTCTimeUSec=Tue 2021-10-12 16:12:45 +07
```
2. Показать логи записанные за последние 30 минут.
```bash
[root@server1 ~]# journalctl --since -30min
```
3. Создать файл `/etc/rsyslog.d/auth-errors.conf`, с соответствующей конфигурацией rsyslog, при которой в файл `/var/log/auth-errors` будут записываться все события связанные с проблемами аутентификации и безопасности. Используйте категорию `authpriv` и приоритет `alert`.
```bash
[root@server1 ~]# vim /etc/rsyslog.d/auth-errors.conf
```
```bash
authpriv.alert /var/log/auth-errors
```
```bash
[root@server1 ~]# systemctl restart rsyslog.service
```
*для проверки правильности настройки rsyslog, сформируем соответствующее сообщение*
```bash
[student@server1 ~]$ logger -p authpriv.alert "TEST MESSAGE"
[student@server1 ~]$ sudo tail /var/log/auth-errors
Oct 7 16:44:19 server1 student[18929]: TEST MESSAGE
```
[вверх](#top)
***
###### Chapter10
**Реализация расширенных функций хранилища.**
1. На server1 установите пакеты `stratisd` и `stratis-cli`.
```bash
[root@server1 ~]# yum install -y stratisd stratis-cli
```
2. С помощью `systemctl` активируйте и запустите сервис `stratisd`.
```bash
[root@server1 ~]# systemctl enable --now stratisd
[root@server1 ~]# systemctl status stratisd.service
● stratisd.service - Stratis daemon
Loaded: loaded (/usr/lib/systemd/system/stratisd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-10-07 11:25:23 MSK; 10s ago
Docs: man:stratisd(8)
Main PID: 48237 (stratisd)
Tasks: 1 (limit: 11252)
Memory: 1.2M
CGroup: /system.slice/stratisd.service
└─48237 /usr/libexec/stratisd --log-level debug
окт 07 11:25:23 server1 systemd[1]: Starting Stratis daemon...
окт 07 11:25:23 server1 stratisd[48237]: [2021-10-07T08:25:23Z INFO libstratis::stratis::run] stratis daemon version 2>
окт 07 11:25:23 server1 stratisd[48237]: [2021-10-07T08:25:23Z INFO libstratis::stratis::run] Using StratEngine
окт 07 11:25:23 server1 stratisd[48237]: [2021-10-07T08:25:23Z INFO libstratis::engine::strat_engine::liminal::identif>
окт 07 11:25:23 server1 stratisd[48237]: [2021-10-07T08:25:23Z INFO libstratis::stratis::dbus_support] D-Bus API is av>
окт 07 11:25:23 server1 systemd[1]: Started Stratis daemon.
```
3. Создайте пул Stratis `labpool` состоящий из устройства `/dev/sdb`.
```bash
[root@server1 ~]# stratis pool create labpool /dev/sdb
```
4. Увеличьте объем пула используя доступный в системе диск `/dev/sdc`.
```bash
[root@server1 ~]# stratis pool add-data labpool /dev/sdc
```
5. Создайте на пуле файловую систему `labfs`. Смонтируйте её в директорию `/labstratisvol`. Не забудьте включить `x-systemd.requires=stratisd.service` в параметры монтирования в `/etc/fstab`.
```bash
[root@server1 ~]# stratis filesystem create labpool labfs
[root@server1 ~]# mkdir /labstratisvol
[root@server1 ~]# vim /etc/fstab
```
```bash
/dev/stratis/labpool/labfs /labstratisvol xfs defaults,x-systemd.requires=stratisd.service 0 0
```
```bash
[root@server1 ~]# systemctl daemon-reload
[root@server1 ~]# mount -a
[root@server1 ~]# mount | tail -1
/dev/mapper/stratis-1-87c72f38b1b543c0a86c885528170cee-thin-fs-1d58170dae514b62ba42afa6affbbb8e on /labstratisvol type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,sunit=2048,swidth=2048,noquota,x-systemd.requires=stratisd.service)
```
6. Создайте снапшот `labfs-snap` файловой системы `labfs`.
```bash
[root@server1 ~]# stratis filesystem snapshot labpool labfs labfs-snap
```
7. Создайте VDO раздел `labvdo` с файловой системой XFS, используя устройство `/dev/sdd`. Установите логический размер 50 Гб.
```bash
[root@server1 ~]# vdo create --name labvdo --device /dev/sdd --vdoLogicalSize 50G
Creating VDO labvdo
The VDO volume can address 2 GB in 1 data slab.
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 labvdo
Starting compression on VDO labvdo
VDO instance 0 volume is ready at /dev/mapper/labvdo
[root@server1 ~]# mkfs.xfs -K /dev/mapper/labvdo
meta-data=/dev/mapper/labvdo isize=512 agcount=4, agsize=3276800 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
```
8. Смонтируйте `labvdo` в директорию `/labvdovol`. Не забудьте включить `x-systemd.requires=vdo.service` в параметры монтирования в `/etc/fstab`.
```bash
[root@server1 ~]# mkdir /labvdovol
[root@server1 ~]# lsblk -n -o uuid /dev/mapper/labvdo >> /etc/fstab
[root@server1 ~]# vim /etc/fstab
```
```bash
UUID=f377ff48-09ea-4726-8748-d6c75adf08f3 /labvdovol xfs defaults,x-systemd.requires=vdo.service 0 0
```
```bash
[root@server1 ~]# mount -a
[root@server1 ~]# mount | tail -1
/dev/mapper/labvdo on /labvdovol type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota,x-systemd.requires=vdo.service)
```
9. Перезагрузите server1 и убедитесь, что все созданные разделы корректно смонтированы.
*смонтированные разделы*
```bash
[student@server1 ~]$ mount | grep /labstratisvol
/dev/mapper/stratis-1-87c72f38b1b543c0a86c885528170cee-thin-fs-1d58170dae514b62ba42afa6affbbb8e on /labstratisvol type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,sunit=2048,swidth=2048,noquota,x-systemd.requires=stratisd.service)
[student@server1 ~]$ mount | grep /labvdo
/dev/mapper/labvdo on /labvdovol type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota,x-systemd.requires=vdo.service)
```
*детали stratis*
```bash
[root@server1 ~]# stratis pool list
Name Total Physical Properties
labpool 10 GiB / 41.63 MiB / 9.96 GiB ~Ca,~Cr
[root@server1 ~]# stratis blockdev list labpool
Pool Name Device Node Physical Size Tier
labpool /dev/sdb 5 GiB Data
labpool /dev/sdc 5 GiB Data
[root@server1 ~]# stratis filesystem list labpool
Pool Name Name Used Created Device UUID
labpool labfs 546 MiB Oct 07 2021 11:49 /dev/stratis/labpool/labfs 1d58170dae514b62ba42afa6affbbb8e
labpool labfs-snap 546 MiB Oct 07 2021 12:17 /dev/stratis/labpool/labfs-snap cacb462cbc034b0582381d687ef53fcf
```
*детали VDO - размер раздела 50 Гб*
```bash
[student@server1 ~]$ lsblk /dev/mapper/labvdo
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
labvdo 253:8 0 50G 0 vdo /labvdovol
```
[вверх](#top)
***
###### Chapter11
**Доступ к NFS (Network-Attached Storage).**
1. На server1 настроить постоянное монтирование удалённой NFS папки сервера server2 `/shares/nfs` в локальную директорию `/mnt/nfs`.
```bash
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# showmount -e server2
Export list for server2:
/shares/autofs *
/shares/nfs *
[root@server1 ~]# vim /etc/fstab
```
*вставим строку*
```bash
server2:/shares/nfs /mnt/nfs nfs rw,sync 0 0
```
*проверим возможность монтирования*
```bash
[root@server1 ~]# mount -a
[root@server1 ~]# mount | tail -1
server2:/shares/nfs on /mnt/nfs type nfs4 (rw,relatime,sync,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.10,local_lock=none,addr=192.168.10.11)
```
2. На server1 настроить монтирование по запросу (automount) удалённой NFS папки сервера server2 `/shares/autofs` в локальную директорию `/labshares/autofs`.
```bash
[root@server1 ~]# yum install -y autofs
[root@server1 ~]# systemctl enable --now autofs
[root@server1 ~]# mkdir /labshares
```
*создадим карту*
```bash
[root@server1 ~]# vim /etc/auto.master.d/labshares.autofs
```
*вставим строку*
```bash
/labshares /etc/auto.demo
```
*отредактируем монтирование*
```bash
[root@server1 ~]# vim /etc/auto.demo
```
*вставим строку*
```bash
autofs -rw,sync server2:/shares/autofs
```
*проверим автомонтирование при обращении к папке*
```bash
[root@server1 ~]# systemctl reload autofs
[root@server1 ~]# ls -l /labshares/autofs
итого 4
-rw-r--r--. 1 root root 36 окт 9 2021 welcome.txt
```
3. Перезагрузить server1, убедиться, что сетевые папки автоматически смонтированы в соответствующие локальные директории.
```bash
[root@server1 ~]# reboot
```
*проверим монтирование указанное в fstab*
```bash
[root@server1 ~]# ls -l /mnt/nfs/
итого 4
-rw-r--r--. 1 root root 33 окт 9 04:43 welcome.txt
[root@server1 ~]# cat /mnt/nfs/welcome.txt
Welcome to NFS share on server2!
```
*проверим монтирование autofs*
```bash
[student@server1 ~]$ ls -l /labshares/autofs
итого 4
-rw-r--r--. 1 root root 36 окт 9 04:44 welcome.txt
[student@server1 ~]$ cat /labshares/autofs/welcome.txt
Welcome to Autofs share on server2!
```
[вверх](#top)
***
###### Chapter12
**Управление сетевой безопасностью.**
Ваша компания решила использовать новое web-приложение. Это приложение прослушивает порты 80/TCP и 1001/TCP. Порт 22/TCP для доступа по SSH также должен быть доступен. Все изменения, которые будут сделаны, должны быть доступны после перезагрузки.
*Все настройки этой работы необходимо производить на server1, доступ проверять с server2.*
1. С server2 проверить доступ к серверу `http://server1` и виртуальному хосту `http://server1:1001`.
```bash
[student@server2 ~]$ curl http://server1/index.html
curl: (7) Failed to connect to server1 port 80: В соединении отказано
[student@server2 ~]$ curl http://server1:1001/index.html
curl: (7) Failed to connect to server1 port 1001: Нет маршрута до узла
```
2. Подключитесь к server1, чтобы разобраться в причинах ограничения доступа.
*Проверим запущен ли Apache*
```bash
[root@server1 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2021-10-15 12:49:45 MSK; 7min ago
Docs: man:httpd.service(8)
Process: 10416 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 10416 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
окт 15 12:49:45 server1 systemd[1]: Starting The Apache HTTP Server...
окт 15 12:49:45 server1 httpd[10416]: AH00548: NameVirtualHost has no effect and will be removed in the next release /e>
окт 15 12:49:45 server1 httpd[10416]: AH00558: httpd: Could not reliably determine the server's fully qualified domain >
окт 15 12:49:45 server1 httpd[10416]: (13)Permission denied: AH00072: make_sock: could not bind to address [::]:1001
окт 15 12:49:45 server1 httpd[10416]: (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:1001
окт 15 12:49:45 server1 httpd[10416]: no listening sockets available, shutting down
окт 15 12:49:45 server1 httpd[10416]: AH00015: Unable to open logs
окт 15 12:49:45 server1 systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
окт 15 12:49:45 server1 systemd[1]: httpd.service: Failed with result 'exit-code'.
окт 15 12:49:45 server1 systemd[1]: Failed to start The Apache HTTP Server.
```
*из вывода видно, что Apache не смог прослушать порт 1001*
*проверим логи SELinux, возможно этот порт блокируется*
```bash
[root@server1 ~]# sealert -a /var/log/audit/audit.log
100% done
found 1 alerts in /var/log/audit/audit.log
--------------------------------------------------------------------------------
SELinux запрещает /usr/sbin/httpd доступ name_bind к tcp_socket port 1001.
***** Модуль bind_ports предлагает (точность 99.5) *************************
Если вы хотите разрешить /usr/sbin/httpd для привязки к сетевому порту $PORT_ЧИСЛО
То you need to modify the port type.
Сделать
# semanage port -a -t PORT_TYPE -p tcp 1001
где PORT_TYPE может принимать значения: http_cache_port_t, http_port_t, jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t.
-- дальнейший вывод опущен --
```
*проверим разрешённые SELinux порты для WEB сервера*
```bash
[root@server1 ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
```
3. Настройте SELinux для доступа сервису httpd прослушивать порт 1001/TCP.
*добавим порт 1001 в SELinux, как было предложено в выводе команды `sealert -a /var/log/audit/audit.log`*
```bash
[root@server1 ~]# semanage port -a -t http_port_t -p tcp 1001
```
*убедимся, что порт добавлен*
```bash
[root@server1 ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 1001, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
```
*перезапустим Apache*
```bash
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-10-15 13:08:01 MSK; 8s ago
Docs: man:httpd.service(8)
Main PID: 39142 (httpd)
Status: "Started, listening on: port 1001, port 80"
Tasks: 213 (limit: 11252)
Memory: 22.2M
CGroup: /system.slice/httpd.service
├─39142 /usr/sbin/httpd -DFOREGROUND
├─39148 /usr/sbin/httpd -DFOREGROUND
├─39149 /usr/sbin/httpd -DFOREGROUND
├─39150 /usr/sbin/httpd -DFOREGROUND
└─39151 /usr/sbin/httpd -DFOREGROUND
окт 15 13:08:01 server1 systemd[1]: Starting The Apache HTTP Server...
окт 15 13:08:01 server1 httpd[39142]: AH00548: NameVirtualHost has no effect and will be removed in the next release /e>
окт 15 13:08:01 server1 httpd[39142]: AH00558: httpd: Could not reliably determine the server's fully qualified domain >
окт 15 13:08:01 server1 systemd[1]: Started The Apache HTTP Server.
окт 15 13:08:06 server1 httpd[39142]: Server configured, listening on: port 1001, port 80
```
4. С server2 проверить доступ к серверу `http://server1` и виртуальному хосту `http://server1:1001`.
```bash
[student@server2 ~]$ curl http://server1/index.html
Welcome to WEB on SERVER1
[student@server2 ~]$ curl http://server1:1001/index.html
curl: (7) Failed to connect to server1 port 1001: Нет маршрута до узла
```
*сервер стал отвечать на стандартном порту (80), но порт 1001, по-прежнему недоступен*
5. Подключитесь к server1, чтобы определить верные ли порты указаны в межсетевом экране (firewall).
```bash
[root@server1 ~]# firewall-cmd --list-ports
[root@server1 ~]#
```
*из вывода понятно, что никакие порты не разрешены*
6. Добавьте порт 1001/TCP в постоянную конфигурацию зоны public.
```bash
[root@server1 ~]# firewall-cmd --zone=public --add-port=1001/tcp
success
[root@server1 ~]# firewall-cmd --list-ports
1001/tcp
[root@server1 ~]#
```
7. Проверьте доступ к серверу `http://server1` и виртуальному хосту `http://server1:1001`.
```bash
[student@server2 ~]$ curl http://server1/index.html
Welcome to WEB on SERVER1
[student@server2 ~]$ curl http://server1:1001/index.html
Welcome to VHOST on SERVER1
```
[вверх](#top)
***
###### Chapter13
**Запуск контейнеров.**
Для выполнения этой лабораторной работы необходимо создать учётную запись на https://quay.io/.
https://quay.io/ - реестр образов (аналог https://hub.docker.com/)
1. На server1 установить средства управления контейнерами.
```bash
[student@server1 ~]$ sudo yum module install container-tools -y
```
2. Реестр образов https://quay.io/ содержит образ `quay.io/bitnami/mariadb`, необходимо авторизоваться с учётной записью пользователя `poduser` используя пароль `redhat`, посмотреть доступные версии БД в образе для загрузки и скачать версию 10.6.
***Важно именно залогиниться как poduser, а не переключаться на него***
```bash
[poduser@server1 ~]$ podman login quay.io
Username: adolgiy
Password:
Login Succeeded!
```
*посмотрим доступные версии образов MariaDB (получение информации может занимать более 1 минуты)*
```bash
[poduser@server1 ~]$ skopeo inspect docker://quay.io/bitnami/mariadb
```
*результатом будет огромный вывод с большим перечнем доступных версий образов*
*скачаем необходимую версию - 10.6*
```bash
[poduser@server1 ~]$ podman pull quay.io/bitnami/mariadb:10.6
Trying to pull quay.io/bitnami/mariadb:10.6...
```
3. На server1 с учетной записью `poduser` создать папку `/home/poduser/db_data`. Подготовить директорию, чтобы контейнеры имели доступ чтения/записи в ней. Директория будет использована в качестве постоянного хранилища.
```bash
[poduser@server1 ~]$ mkdir /home/poduser/db_data
[poduser@server1 ~]$ chmod 777 /home/poduser/db_data/
```
4. На server1 с учетной записью `poduser` создать контейнер содержащий образ MariaDB с именем `inventorydb`. Необходимо выполнить трансляцию внутреннего порта в контейнере 3306 на внешний порт server1 13306. Подключить директорию `/home/poduser/db_data` в качестве хранилища БД в контейнере директории `/var/lib/mysql/data`. Кроме этого необходимо объявить следующие переменные в контейнере:
Переменная | Значение
--------------------- | ----------
MARIADB_USER | operator1
MARIADB_PASSWORD | redhat
MARIADB_DATABASE | inventory
MARIADB_ROOT_PASSWORD | redhat
После запуска контейнера необходимо убедиться в наличии доступа к БД в контейнере:
- подключиться к контейнеру;
- подключиться к консоли управления БД (команда - `mysql -u root -p`, ввести пароль `redhat`);
- убедиться в том, что БД с именем inventory присутствует в списке доступных (команда - SHOW DATABASES;);
- выйти из консоли управления БД (команда - `exit`);
- отключиться от контейнера.
*создадим контейнер - с учётом проброса порта 13306:3306, подключения хранилища и необходимые переменные*
```bash
[poduser@server1 ~]$ podman run -d --name inventorydb -p 13306:3306 -v /home/poduser/db_data:/var/lib/mysql/data -e MARIADB_USER=operator1 -e MARIADB_PASSWORD=redhat -e MARIADB_DATABASE=inventory -e MARIADB_ROOT_PASSWORD=redhat quay.io/bitnami/mariadb:10.6
98e07615544e5f899b9534fbaf84507c71beb87b27b116c1ca1a632f0b767a2c
[poduser@server1 ~]$
```
*проверим, что контейнер успешно запустился и есть доступ к созданной БД inventory*
```bash
[poduser@server1 user]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
131c9fd936ba quay.io/bitnami/mariadb:10.6 /opt/bitnami/scri... About a minute ago Up About a minute ago 0.0.0.0:13306->3306/tcp inventorydb
```
```bash
[poduser@server1 user]$ podman exec -it inventorydb bash
1001@131c9fd936ba:/$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.4-MariaDB Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| inventory |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.002 sec)
MariaDB [(none)]> exit
Bye
1001@131c9fd936ba:/$ exit
[poduser@server1 user]$
```
5. Настроить systemd на автоматический запуск контейнера `inventorydb` при загрузке server1.
*создадим папку для пользовательского сервиса systemd, перейдём в эту папку и сгенерируем сервис на основе запущенного контейнера*
```bash
[poduser@server1 ~]$ mkdir -p ~/.config/systemd/user
[poduser@server1 ~]$ cd ~/.config/systemd/user/
[poduser@server1 user]$ podman generate systemd --name inventorydb --files --new
/home/poduser/.config/systemd/user/container-inventorydb.service
```
*после того, как сервис будет сгенерирован, необходимо остановить и удалить запущенный контейнер, иначе сервис не сможет стартовать, т.к. имена запущенного вручную и создаваемого с помощью systemd контейнеров совпадают*
```bash
[poduser@server1 user]$ podman stop inventorydb
98e07615544e5f899b9534fbaf84507c71beb87b27b116c1ca1a632f0b767a2c
[poduser@server1 user]$ podman rm inventorydb
98e07615544e5f899b9534fbaf84507c71beb87b27b116c1ca1a632f0b767a2c
```
*активируем и запустим созданный пользовательский сервис systemd*
```bash
[poduser@server1 user]$ systemctl --user daemon-reload
[poduser@server1 user]$ systemctl --user enable --now container-inventorydb.service
Created symlink /home/poduser/.config/systemd/user/default.target.wants/container-inventorydb.service → /home/poduser/.config/systemd/user/container-inventorydb.service.
```
*необходимо обеспечить автозагрузку пользовательского сервиса без необходимости авторизации в системе самого пользователя*
```bash
[poduser@server1 user]$ loginctl enable-linger
```
[вверх](#top)
***