rhcsa_labs/rh199_(rapid)/labs_solutions.md

352 lines
16 KiB
Markdown
Raw Normal View History

2021-10-09 15:38:08 +03:00
#### Лабораторные работы по курсу RH199 (RHCSA)
***
2021-10-10 17:16:06 +03:00
###### top
2021-10-10 17:10:06 +03:00
2021-10-10 17:16:06 +03:00
[Подготовка виртуальных хостов для выполнения лабораторных работ.](#stand)
*лабораторные работы начинаются с 3-й главы*
2021-10-10 17:10:06 +03:00
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
**Подготовка виртуальных хостов для выполнения лабораторных работ.**
2021-10-09 16:27:29 +03:00
2021-10-10 17:10:06 +03:00
*Для выполнения лабораторных работ потребуется настроить 2 виртуальных хоста*
2021-10-09 16:27:29 +03:00
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*
2021-10-10 17:10:06 +03:00
Перечень необходимых команд root (*стоит это оформить в виде скрипта*)
2021-10-09 16:27:29 +03:00
```bash
2021-10-10 17:10:06 +03:00
useradd student -G wheel
echo student | passwd student --stdin
echo '192.168.10.11 server2' >> /etc/hosts
2021-10-09 16:27:29 +03:00
```
2021-10-10 17:10:06 +03:00
*SERVER2*
2021-10-09 16:45:46 +03:00
Перечень необходимых команд root (*стоит это оформить в виде скрипта*)
```bash
2021-10-10 17:10:06 +03:00
useradd student -G wheel
echo student | passwd student --stdin
echo '192.168.10.10 server1' >> /etc/hosts
2021-10-09 16:45:46 +03:00
yum install httpd -y
2021-10-10 17:10:06 +03:00
mkdir /webserver
sed -i 's/\/var\/www\/html/\/webserver/g' /etc/httpd/conf/httpd.conf
2021-10-09 16:45:46 +03:00
systemctl enable --now httpd
2021-10-10 17:10:06 +03:00
echo "This is the html file for the SELinux final lab on SERVER2." > /webserver/lab.html
2021-10-09 16:45:46 +03:00
firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent
```
2021-10-09 16:27:29 +03:00
***
2021-10-09 15:38:08 +03:00
###### 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
```
2021-10-10 17:14:20 +03:00
4. Настроить административные права членов группы `consultants`, чтобы они могли выполнять любые команды от любых пользователей.
2021-10-09 15:38:08 +03:00
*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
```
2021-10-10 17:14:20 +03:00
6. Учётные записи пользователей `consultant1`, `consultant2`, и `consultant3` настроить таким образом, чтобы срок их действия истекал через 90 дней с текущей даты.
2021-10-09 15:38:08 +03:00
*узнать какая дата будет через 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
```
2021-10-10 17:14:20 +03:00
**Проверка**
2021-10-09 15:38:08 +03:00
Наличие группы `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: Отказано в доступе
```
2021-10-10 17:14:20 +03:00
8. Изменить глобальный скрипт загрузки. Обычные пользователи должны иметь umask при которой другие пользователи не смогут просматривать и изменять новые файлы и каталоги.
2021-10-09 15:38:08 +03:00
*создадим новый файл `/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
```
2021-10-10 17:14:20 +03:00
**Проверка**
2021-10-09 15:38:08 +03:00
*проверим только последний пункт, т.к. все предыдущие проверяются в процессе выполнения*
*назначим пользователю `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)
***
2021-10-10 17:10:06 +03:00
###### 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`*
2021-10-10 17:17:55 +03:00
*в сообщении будет предложено решение проблемы*
2021-10-10 17:10:06 +03:00
```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)
***