rhcsa_labs/rh199_(rapid)/labs_solutions.md

352 lines
16 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)
*лабораторные работы начинаются с 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
```
*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 не может обслуживать веб-контент.
```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)
***