#### Лабораторные работы по курсу RH199 (RHCSA) *** ###### top [Подготовка виртуальных хостов для выполнения лабораторных работ.](#stand) *лабораторные работы начинаются с 3-й главы* 3. [Управление локальными пользователями и группами.](#chapter3) 4. [Управление доступом к файлам.](#chapter4) 5. [Настройка SELinux.](#chapter5) 6. [Настройка производительности системы.](#chapter6) 7. [Установка и обновление программного обеспечения.](#chapter7) 8. [](#chapter8) 9. [](#chapter9) 10. [](#chapter10) 11. [](#chapter11) 12. [](#chapter12) 13. [](#chapter13) 14. [](#chapter14) 15. [](#chapter15) 16. [](#chapter16) 17. [](#chapter17) *** ###### stand **Подготовка виртуальных хостов для выполнения лабораторных работ.** *Для выполнения лабораторных работ потребуется настроить 2 виртуальных хоста* server1 - 192.168.10.10 user: student password: student root password: redhat 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 ``` *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 ``` *** ###### Chapter3 **Управление локальными пользователями и группами.** 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) *** ###### Chapter4 **Управление доступом к файлам.** 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) *** ###### Chapter5 **Настройка 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 ``` 4. Убедитесь, что проблема SELinux решена и Apache может обслуживать веб-контент. ```bash [root@server2 ~]# curl http://server2/lab.html This is the html file for the SELinux final lab on SERVER2. ``` [вверх](#top) *** ###### Chapter6 **Настройка производительности системы.** 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) *** ###### Chapter7 **Установка и обновление программного обеспечения.** *Все действия необходимо выполнять на 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) ***