Лабораторные задания: Сервисы безопасности Linux - efanov/mephi GitHub Wiki

Общие требования

Каждый разработанный сервис должен удовлетворять следующим требованиям:

  1. Сервис должен работать в режиме системной службы, т.е. существовать как системный процесс.
  2. Сервис должен вести собственный журнал событий: событие старта, завершения и обработки сигнала. При выполнении своей основной функции сервис должен записывать в системный журнал информацию о выполненном действии.
  3. Сервис должен выполнять свою основную функцию периодически (сама функция и её период написаны в задании).
  4. Сервис должен перехватывать и обрабатывать сигнал USR1. При получении сигнала USR1 должна выполниться основная функция 1 раз.
  5. Для сервиса должен быть разработан systemd-юнит, которым можно управлять с помощью команды systemctl.
  6. Для сервиса должен быть разработана man-страница с документацией: краткая информация о сервисе, расположение файлов конфигурации.
  7. Для сервиса должна быть написан модуль безопасности SELinux. Сервис должен работать в собственном домене SELinux имя_сервиса_t.
  8. Сервис должен компилироваться с помощью команды rpmbuild и формировать RPM-пакет, в который будет включён сам сервис, его политика безопасности SELinux, systemd-юнит и man-страница с описанием.
  9. Готовый RPM-пакет должен быть подписан приватным ключом разработчика.
  10. Нужно создать локальный репозиторий, в котором будет находиться RPM-пакет и публичный ключ разработчика. Репозиторий должен быть подключён к системе.

Методика демонстрации выполненного задания.

  1. Продемонстрировать сборку пакета, процесс подписи RPM-пакета и собственный GPG-ключ подписи пакета.
  2. Продемонстрировать метаинформацию RPM-пакета. В пакете должен быть указан автор, наименование сервиса, описание сервиса.
  3. Установить сервис в систему командой yum.
  4. После установки показать сервис в дереве процессов. Продемонстрировать, что сервис работает в собственном домене SELinux.
  5. Перезапустить сервис. Продемонстрировать сообщения в журнале о том, что сервис был перезапущен.
  6. Выполнить проверочное действие, позволяющее проверить выполнение основной функции сервиса (зависит от варианта задания). Отправить сигнал USR1 процессу. Продемонстрировать факт успешной обработки сигнала в системном журнале.
  7. Ждем определенное время (в зависимости от периода выполнения задания). В системном журнале должна накопиться информация о периодическом выполнении сервиса - смотрим.
  8. Команда man НАЗВАНИЕ выводит документацию по сервису.

Задания

1. Сервис управления файловым пространством swap

Разработать сервис, который выполняет мониторинг состояния файла подкачки каждые 30 секунд. Если swap заполнен более чем наполовину, создаёт ещё один swap-файл, который удваивает существующее пространство swap.

2. Сервис управления состоянием оперативной памяти

Разработать сервис, который выполняет мониторинг состояния ОЗУ раз в 5 секунд. Если память заполнена более чем на 90%, сервис завершает пользовательский процесс, который занимает больше всего памяти в системе. Сервис не должен завершать системные службы.

3. Сервис мониторинга сеансов пользователей

Разработать сервис, который выполняет мониторинг подключённых к системе пользователей по ssh каждые 30 секунд. При подключении внешнего пользователя по ssh, пользователю должно выводиться на экран уведомление (механизм notify) с именем пользователя, который подключился к системе удалённо.

4. Сервис дискреционного управления доступом

Разработать сервис, который выполняет мониторинг прав доступа наиболее важных системных конфигурационных файлов раз в минуту. В случае отклонения прав доступа, сервис должен изменить права доступа на стандартные. Список файлов для мониторинга должен контролироваться администратором через конфигурационный файл в каталоге /etc, содержать путь до файла, права доступа и владельца/группу владельца. В предустановленном конфигурационном файле должны быть: /etc/passwd, /etc/group, /etc/fstab, /etc/shadow.

5. Сервис черного списка системных служб

Разработать сервис, который раз в минуту проверяет, что службы из чёрного списка не запущены. Если сервис обнаруживает, что служба из чёрного списка запущена, он её завершает. Чёрный список должен контролироваться администратором через конфигурационный файл в каталоге /etc. В предустановленном конфигурационном файле должен быть сервис httpd.