Назад | Перейти на главную страницу

Что такое звуковые демоны и зачем nginx нужен тип под SELinux?

Любопытно, что звучит демон. Вики по адресу http://wiki.centos.org/TipsAndTricks/SelinuxBooleans говорит, что это «звучащий демон», но я не нахожу много дополнительной информации в Интернете.

Чтобы заставить nginx (настроенный для привязки к сокету unix) запускаться с systemctl, мне нужно добавить правило принуждения типа на httpd_t к soundd_port_t: tcp_socket. Более конкретно:

 sudo systemctl status nginx.service

не удается с сообщением:

nginx.service - The nginx HTTP and reverse proxy server
  Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled)
  Active: failed (Result: exit-code) since Mon 2015-07-13 19:53:57 EDT; 7s ago
 Process: 2699 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)

Jul 13 19:53:57 localhost.localdomain nginx[2699]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jul 13 19:53:57 localhost.localdomain nginx[2699]: nginx: [emerg] bind() to 0.0.0.0:8000 failed (13: Permissi...ied)
Jul 13 19:53:57 localhost.localdomain nginx[2699]: nginx: configuration file /etc/nginx/nginx.conf test failed
Jul 13 19:53:57 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1
Jul 13 19:53:57 localhost.localdomain systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
Jul 13 19:53:57 localhost.localdomain systemd[1]: Unit nginx.service entered failed state.

Далее делаю:

sudo cat /var/log/audit/audit.log | audit2allow

и увидеть:

#============= httpd_t ==============
allow httpd_t soundd_port_t:tcp_socket name_bind;

После импорта этого модуля nginx может запускаться.

Если вы выполните следующую команду, вы увидите, что порт 8000 / tcp определен в SELinux как soundd_port_t:

# semanage port -l | grep soundd
soundd_port_t                  tcp      8000, 9433, 16001

Это не означает, что nginx имеет какое-либо отношение к soundd, просто он пытается привязаться к tcp-порту 8000. Я предлагаю вам использовать диапазон портов, выделенный для использования nginx / прокси, http_cache_port_t:

# semanage port -l | grep http_cache_port_t
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010

Если вы слушаете порт 8080 вместо 8000, вам не придется перестраивать политику SELinux.

После нескольких часов поисков в этом статья оказаться полезным для пользователей CentOS

Я следил за всей статьей, но, как мне казалось, решил проблему с помощью следующих команд:

yum install -y policycoreutils-{python,devel}
ausearch -m avc -se httpd_t | audit2allow -M nginx
semodule -i nginx.pp
usermod -a -G user nginx
chmod g+rx /home/user/

Для предоставления разрешений замените пользователя своим фактическим пользователем. То же самое относится к каталогу под командой chmod.