Как запустить службу, которая запускает uvicorn на сервере с AlmaLinux 9, если SELinux выключен? <br/> P.S. Не имею опыта работы с rpm-подобными системами, привык к debian/ubuntu/astra.
Для запуска собственного сервиса с 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`. Подробнее можно почитать здесь: <a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/chap-managing_confined_services-the_apache_http_server" rel="nofollow">https://docs.redhat.com/en/documentation/red_hat_e...</a>