Введение
Эта заключительная практическая работа объединяет несколько навыков, необходимых для подготовки к экзамену RHCSA. Вы по-прежнему будете получать инструкции по выполнению команд, но сами шаги максимально приближены к рабочему процессу системного администратора: инспекция системы, настройка требуемого состояния и подтверждение результата с помощью стандартных инструментов.
В ходе этой работы вы создадите учетную запись оператора, подготовите постоянное хранилище, развернете на нем небольшую службу, настроите политики SELinux и брандмауэра, а также выполните итоговую проверку готовности.
Инспекция подготовленной системы
На этом этапе вы осмотрите ресурсы, подготовленные для итогового рабочего процесса. Начните с подтверждения блочного устройства, состояния службы и режима работы SELinux.
При подготовке среды в постоянной конфигурации зоны public сохранены правила доступа по SSH и к браузерному терминалу LabEx на 3002/tcp. Сохраните эти правила административного доступа при изменении политики межсетевого экрана для приложения.
Перейдите в каталог проекта.
cd /home/labex/project
Выведите путь к подготовленному разделу. Последующие команды будут использовать этот путь, чтобы вам не пришлось гадать, какое именно блочное устройство относится к лабораторной работе.
cat /home/labex/project/rhcsa-final-part
Осмотрите подготовленное блочное устройство. На нем еще нет файловой системы, поэтому это ваша отправная точка перед форматированием.
lsblk "$(cat /home/labex/project/rhcsa-final-part)"
Убедитесь, что итоговая служба еще не настроена. Конструкция || true позволяет лабораторной работе продолжаться, даже если юнит в данный момент отсутствует.
systemctl status rhcsa-final-web.service --no-pager || true
Перед началом работы убедитесь, что SELinux находится в режиме принудительного применения (enforcing). Это важно, так как последующие метки SELinux не просто носят информационный характер, а влияют на применение политик.
getenforce
Создание учетной записи оператора и общего каталога
На этом этапе вы создадите локальную группу, локального пользователя и общий каталог с установленным битом setgid. Команды составлены таким образом, чтобы их можно было безопасно выполнять повторно.
Создайте группу, если она еще не существует. getent group сначала проверяет локальную службу имен, а часть || создает группу только в том случае, если поиск не дал результатов.
getent group rhcsaops || sudo groupadd rhcsaops
Создайте пользователя finaladmin, если он еще не существует.
id finaladmin >/dev/null 2>&1 || sudo useradd -m -s /bin/bash -G rhcsaops finaladmin
Убедитесь, что пользователь является членом группы операторов. Опции -aG добавляют пользователя в группу, не удаляя его из других дополнительных групп.
sudo usermod -aG rhcsaops finaladmin
id finaladmin
Создайте общий каталог для заметок операторов. Режим 2770 предоставляет группе полный доступ и устанавливает бит setgid, благодаря чему новые файлы будут наследовать группу rhcsaops.
sudo mkdir -p /srv/rhcsa-final/team
sudo chown root:rhcsaops /srv/rhcsa-final/team
sudo chmod 2770 /srv/rhcsa-final/team
Создайте тестовый файл от имени finaladmin.
sudo -u finaladmin bash -c 'echo final validation access > /srv/rhcsa-final/team/finaladmin.txt'
Проверьте права доступа к каталогу и файлу.
sudo stat -c '%a %U:%G %n' /srv/rhcsa-final/team /srv/rhcsa-final/team/finaladmin.txt
Подготовка постоянного хранилища
На этом этапе вы создадите файловую систему на подготовленном разделе и настроите ее постоянное монтирование по UUID. Это соответствует шаблону проверки хранилища, используемому в задачах RHCSA.
Сохраните путь к подготовленному разделу в переменной оболочки.
part="$(cat /home/labex/project/rhcsa-final-part)"
Создайте файловую систему ext4 с понятной меткой. Это действие приведет к удалению данных на подготовленном разделе, поэтому выполняйте его только после того, как убедились в правильности пути к устройству.
sudo mkfs.ext4 -F -L RHCSA_FINAL "$part"
Создайте точку монтирования.
sudo mkdir -p /mnt/rhcsa-final
Получите UUID файловой системы и удалите старые записи для этой точки монтирования из fstab. UUID являются стабильными идентификаторами для постоянных точек монтирования, а удаление старых строк предотвращает дублирование записей в fstab.
uuid="$(sudo blkid -s UUID -o value "$part")"
sudo sed -i '/\/mnt\/rhcsa-final/d' /etc/fstab
Добавьте запись для постоянного монтирования.
echo "UUID=$uuid /mnt/rhcsa-final ext4 defaults 0 0" | sudo tee -a /etc/fstab
Выполните монтирование согласно fstab и проверьте результат. mount -a подтверждает работоспособность записи в fstab, а findmnt и df показывают точку монтирования и доступный объем.
sudo mount -a
findmnt /mnt/rhcsa-final
df -h /mnt/rhcsa-final
Развертывание и запуск итоговой службы
На этом этапе вы разместите веб-контент в смонтированной файловой системе и создадите службу systemd, которая будет обслуживать его локально на порту 18083.
Создайте каталог для веб-контента.
sudo mkdir -p /mnt/rhcsa-final/www
Создайте файл контента.
echo "RHCSA final validation service" | sudo tee /mnt/rhcsa-final/www/index.html >/dev/null
Настройте права доступа так, чтобы служебный пользователь labex мог читать контент, не делая его доступным для записи всем пользователям. Службе требуется только право на чтение группы и доступ к каталогу, а не полные права на запись.
sudo chown -R root:labex /mnt/rhcsa-final/www
sudo chmod 750 /mnt/rhcsa-final/www
sudo chmod 640 /mnt/rhcsa-final/www/index.html
Создайте юнит службы. Служба запускается из смонтированного каталога и привязывается к localhost на порту 18083, что позволяет легко проверить ее локально с помощью curl.
sudo tee /etc/systemd/system/rhcsa-final-web.service >/dev/null <<'EOF'
[Unit]
Description=RHCSA final validation web service
After=network.target
[Service]
Type=simple
User=labex
Group=labex
WorkingDirectory=/mnt/rhcsa-final/www
ExecStart=/usr/bin/python3 -m http.server 18083 --bind 127.0.0.1
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Защитите файл юнита, перезагрузите конфигурацию systemd и включите службу. Файлы юнитов в /etc/systemd/system должны принадлежать пользователю root, а daemon-reload заставляет systemd прочитать новый юнит перед его включением и запуском.
sudo chown root:root /etc/systemd/system/rhcsa-final-web.service
sudo chmod 644 /etc/systemd/system/rhcsa-final-web.service
sudo systemctl daemon-reload
sudo systemctl enable rhcsa-final-web.service
sudo systemctl restart rhcsa-final-web.service
sleep 1
Проверьте работу службы.
systemctl is-active rhcsa-final-web.service
curl -s http://127.0.0.1:18083/
Добавление политик SELinux и брандмауэра
На этом этапе вы завершите настройку политик службы. Добавьте постоянные метки SELinux для контента и порта, а затем откройте порт в firewalld.
Добавьте или обновите правило постоянного контекста файлов. Шаблон с || делает команду безопасной для повторного запуска: она добавляет правило, если оно отсутствует, и изменяет его, если для пути уже задано пользовательское правило.
sudo semanage fcontext -a -t httpd_sys_content_t '/mnt/rhcsa-final/www(/.*)?' || sudo semanage fcontext -m -t httpd_sys_content_t '/mnt/rhcsa-final/www(/.*)?'
Примените правило контекста. restorecon изменяет текущие метки файлов в соответствии с созданным вами постоянным правилом SELinux.
sudo restorecon -Rv /mnt/rhcsa-final/www
Добавьте или обновите метку порта HTTP в SELinux. Шаблон добавления или изменения корректно обрабатывает как чистую систему, так и повторный запуск, если метка порта уже существует.
sudo semanage port -a -t http_port_t -p tcp 18083 || sudo semanage port -m -t http_port_t -p tcp 18083
Запустите firewalld и откройте порт службы на постоянной основе.
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-port=18083/tcp
sudo firewall-cmd --reload
Проверьте метки и состояние брандмауэра. Эти проверки связывают настройки политик с наблюдаемым состоянием: меткой файла, разрешенным типом порта HTTP и открытым портом в брандмауэре.
ls -Z /mnt/rhcsa-final/www/index.html
sudo semanage port -l | grep '^http_port_t'
sudo firewall-cmd --list-ports
Выполнение итоговой проверки готовности
На этом этапе вы проверите состояние системы с помощью тех же инструментов, которые использовали на протяжении всего курса. Это не письменный отчет, а операционная проверка.
Проверьте локальную учетную запись и членство в группах.
id finaladmin
getent group rhcsaops
Проверьте постоянное хранилище. Вы проверяете как текущее монтирование, так и сохраненную запись в fstab, так как только оба этих фактора вместе удовлетворяют требованиям к хранилищу.
findmnt /mnt/rhcsa-final
grep /mnt/rhcsa-final /etc/fstab
Проверьте службу.
systemctl is-enabled rhcsa-final-web.service
systemctl is-active rhcsa-final-web.service
curl -s http://127.0.0.1:18083/
Проверьте SELinux и firewalld. Итоговое состояние должно показывать, что SELinux находится в режиме принудительного применения, на файле службы установлена метка HTTP-контента, а порт 18083/tcp открыт в firewalld.
getenforce
ls -Z /mnt/rhcsa-final/www/index.html
sudo firewall-cmd --list-ports
Резюме
Вы завершили итоговый рабочий процесс подготовки, настроив учетную запись оператора, общий каталог с setgid, постоянное хранилище, службу systemd, метки SELinux для файлов и портов, доступ через firewalld, а также выполнив итоговую проверку с помощью команд.



