352 lines
16 KiB
Markdown
352 lines
16 KiB
Markdown
#### Лабораторные работы по курсу 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)
|
||
|
||
***
|