Как настроить SELinux для запуска собственного сервиса?

Как запустить службу, которая запускает uvicorn на сервере с AlmaLinux 9, если SELinux выключен? <br/> P.S. Не имею опыта работы с rpm-подобными системами, привык к debian/ubuntu/astra.
  • 6 августа 2024 г. 19:53
Ответы на вопрос 2
Для запуска собственного сервиса с SELinux, вам сначала необходимо создать и сконфигурировать политику безопасности SELinux для вашего сервиса. Вам может потребоваться использовать утилиту `audit2allow` для анализа сообщений SELinux и создания необходимых правил.

Чтобы запустить службу, которая запускает uvicorn на сервере с AlmaLinux 9, если SELinux выключен, вам прежде всего нужно установить и сконфигурировать службу и сам UVicorn. Сначала установите необходимые пакеты:

```
sudo yum install python3-uvicorn
```

Теперь создайте службу для запуска вашего uvicorn сервера. Создайте unit-файл для systemd (например, `/etc/systemd/system/uvicorn.service`) со следующим содержимым:

```
[Unit]
Description=UVicorn Service
After=network.target

[Service]
Type=simple
User=<ваш_пользователь>
Group=<ваша_группа>
ExecStart=/usr/bin/python3 -m uvicorn.main <путь_к_вашему_приложению>:<имя_приложения> --host 0.0.0.0 --port 8000

[Install]
WantedBy=multi-user.target
```

Насколько я понимаю, SELinux отключен на вашем сервере, поэтому вы не должны столкнуться с проблемами SELinux. После этого выполните следующие команды:

```
sudo systemctl daemon-reload
sudo systemctl start uvicorn
sudo systemctl enable uvicorn
```

Теперь ваш uvicorn сервер должен быть запущен и доступен по адресу вашего сервера с портом 8000.
Для начала нужно убедится что верно выполнена установка приложения и его исполняемый файл (uvicorn) находится в правильном месте. Убедится что запускаемый файл имеет верную метку: `ls -Z /var/www/app/venv/bin/uvicorn` (должна быть `httpd_exec_t`, т.к. в этом случае произойдет переход в домен `httpd_t` где будут доступны стандартные правила для web-сервера), если отличается, то изменить её: `semanage fcontext -a -t httpd_exec_t "/var/www/app/venv/bin/uvicorn"`, проверьте метки в каталоге /var/www/app и командой можно восстановить рекурсивно все метки `restorecon -RFv /var/www`. Обычно установка правильных меток решает проблему.  Т.к. порт 8000 относится к типу `unreserved_port_t`, его придется сменить на `http_port_t`: `semanage port -a -t http_port_t -p tcp 8000`. Перезапустить службу и проверить отказы AVC: `ausearch -m avc -ts recent`. Подробнее можно почитать здесь: https://docs.redhat.com/en/documentation/red_hat_e...
Похожие вопросы