Введение
В реальной работе системного администратора задачи редко ограничиваются выполнением одной команды. Служба может выйти из строя по разным причинам: модуль неактивен, пользователь службы не имеет прав на чтение контента, метки SELinux неполны или брандмауэр не открывает требуемый порт.
В этой лабораторной работе вам предстоит восстановить подготовленный хост веб-службы. Служба должна работать от имени пользователя labex, обслуживать контент из директории /srv/rhcsa-review/site, прослушивать порт 127.0.0.1:18082, быть включенной в автозагрузку, иметь корректные метки SELinux и открытый порт 18082/tcp в firewalld.
Воспроизведение и диагностика сбоя службы
На этом этапе вы воспроизведете сбой службы и изучите доказательства перед внесением изменений. Начните с использования systemctl и journalctl, а затем сопоставьте сообщения журнала с правами доступа к файлам.
При подготовке среды в постоянной конфигурации зоны public сохранены правила доступа по SSH и к браузерному терминалу LabEx на 3002/tcp. Сохраните эти правила административного доступа при изменении политики межсетевого экрана для приложения.
Перейдите в директорию проекта.
cd /home/labex/project
Проверьте подготовленную службу. Она существует, но пока не запущена.
systemctl status rhcsa-review-web.service --no-pager || true
Попробуйте запустить её. Это должно привести к ошибке, так как служба работает от имени пользователя labex, но у этого пользователя нет доступа к директории с контентом.
sudo systemctl start rhcsa-review-web.service || echo "service start failed as expected"
sleep 1
Проверьте, пометил ли systemd модуль как неисправный.
systemctl is-failed rhcsa-review-web.service || true
Прочитайте последние записи журнала службы. Журнал должен указать на то, что учетная запись службы не может использовать настроенную рабочую директорию или путь к контенту.
sudo journalctl -u rhcsa-review-web.service -n 20 --no-pager
Проверьте права доступа к пути с контентом.
sudo stat -c '%a %U:%G %n' /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html
Исправление прав доступа к контенту
На этом этапе вы сделаете контент доступным для чтения учетной записью службы, не открывая при этом доступ для всех пользователей. Служба работает от имени пользователя labex и группы labex.
Установите группу labex для дерева директорий. Служба работает с группой labex, поэтому владение группой позволяет предоставить доступ без смены владельца файлов на пользователя службы.
sudo chown root:labex /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html
Разрешите группе переходить по директориям и читать файл контента. Директориям нужен бит исполнения для доступа, а HTML-файлу нужен бит чтения, чтобы служба могла его отдавать.
sudo chmod 750 /srv/rhcsa-review /srv/rhcsa-review/site
sudo chmod 640 /srv/rhcsa-review/site/index.html
Проверьте исправленные права доступа.
sudo stat -c '%a %U:%G %n' /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html
Сбросьте состояние ошибки и снова запустите службу. Команда reset-failed удаляет старый маркер сбоя, что упрощает чтение состояния systemctl после исправления прав.
sudo systemctl reset-failed rhcsa-review-web.service
sudo systemctl start rhcsa-review-web.service
sleep 1
Убедитесь, что служба активна и отдает контент.
systemctl is-active rhcsa-review-web.service
curl -s http://127.0.0.1:18082/
Обеспечение постоянной работы службы
На этом этапе вы включите исправленную службу, чтобы она запускалась при загрузке системы. Служба, которая работает только до следующей перезагрузки, не считается полностью исправленной.
Включите модуль. Запуск исправляет текущую сессию, а включение гарантирует, что исправленная служба будет автоматически запускаться при загрузке системы.
sudo systemctl enable rhcsa-review-web.service
Проверьте состояние автозагрузки.
systemctl is-enabled rhcsa-review-web.service
Перезапустите службу, чтобы убедиться, что модуль корректно запускается после исправления прав. Чистый перезапуск — более надежное доказательство, чем просто проверка уже запущенного процесса.
sudo systemctl restart rhcsa-review-web.service
sleep 1
Снова протестируйте службу.
systemctl is-active rhcsa-review-web.service
curl -s http://127.0.0.1:18082/
Добавление контекста SELinux и меток портов
На этом этапе вы приведете метаданные политики SELinux в соответствие с архитектурой службы. Даже если простая демонстрационная служба может читать контент, исправления веб-служб в стиле RHCSA должны включать настройку постоянного контекста файлов и меток портов.
Добавьте правило постоянного контекста HTTP-контента для файлов службы. Правило fcontext — это постоянная метаданная политики; она сообщает SELinux, какую метку должен получить этот путь после перемаркировки.
sudo semanage fcontext -a -t httpd_sys_content_t '/srv/rhcsa-review/site(/.*)?'
Примените правило к существующим файлам. restorecon считывает постоянное правило и применяет правильную метку к уже существующим файлам.
sudo restorecon -Rv /srv/rhcsa-review/site
Проверьте пользовательское правило и итоговую метку.
sudo semanage fcontext -l | grep '/srv/rhcsa-review/site'
ls -Zd /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html
Добавьте порт службы к типу HTTP-портов. Метки портов позволяют политике SELinux понимать, что TCP-порт 18082 предназначен для трафика веб-служб.
sudo semanage port -a -t http_port_t -p tcp 18082
Проверьте метку HTTP-порта.
sudo semanage port -l | grep '^http_port_t'
Открытие брандмауэра и комплексная проверка
На этом этапе вы откроете порт службы в firewalld и проведете финальную проверку. Служба должна быть активна, включена в автозагрузку, иметь правильные метки и быть разрешенной брандмауэром хоста.
Запустите и включите firewalld.
sudo systemctl enable --now firewalld
Добавьте порт службы на постоянной основе и перезагрузите брандмауэр. Постоянное правило сохраняется после перезагрузки firewalld, а команда reload применяет его к активной конфигурации.
sudo firewall-cmd --permanent --add-port=18082/tcp
sudo firewall-cmd --reload
Проверьте список активных портов.
sudo firewall-cmd --list-ports
Выполните финальные проверки службы. Эти команды подтверждают, что служба включена в автозагрузку, активна в данный момент и возвращает ожидаемый локальный веб-ответ.
systemctl is-enabled rhcsa-review-web.service
systemctl is-active rhcsa-review-web.service
curl -s http://127.0.0.1:18082/
В последний раз проверьте права доступа к контенту. Эта финальная проверка защищает от распространенной ошибки частичного исправления: служба работает, но модель доступа оказалась шире или уже, чем требовалось.
sudo stat -c '%a %U:%G %n' /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html
Резюме
Вы восстановили работу службы на хосте, устранив несколько проблем: диагностировали сбой модуля systemd, исправили права доступа для пользователя службы, включили службу в автозагрузку, добавили метки файлов и портов SELinux, открыли порт в firewalld и подтвердили корректность работы веб-службы.



