Nginx каже, що "(/etc/nginx/conf.d/foo.conf" не вдалося (13: у дозволі відмовлено)


11

Ось що я маю ls -al /etc/nginx:

total 52
drwxr-xr-x.  4 root root 4096 Jul 28 04:16 .
drwxr-xr-x. 78 root root 8192 Jul 28 03:37 ..
drwxr-xr-x.  2 root root   26 Jul 28 03:55 conf.d
drwxr-xr-x.  2 root root    6 May 10 09:21 default.d
-rw-r--r--.  1 root root 1034 May 10 09:21 fastcgi.conf
-rw-r--r--.  1 root root  964 May 10 09:21 fastcgi_params
-rw-r--r--.  1 root root 2837 May 10 09:21 koi-utf
-rw-r--r--.  1 root root 2223 May 10 09:21 koi-win
-rw-r--r--.  1 root root 3957 May 10 09:21 mime.types
-rw-r--r--.  1 root root 1033 Jul 28 03:43 nginx.conf
-rw-r--r--.  1 root root  596 May 10 09:21 scgi_params
-rw-r--r--.  1 root root  623 May 10 09:21 uwsgi_params
-rw-r--r--.  1 root root 3610 May 10 09:21 win-utf

Це те, що я бачу /var/log/nginx/error.logпісля sudo service nginx start:

[emerg] 20360#0: open() "/etc/nginx/conf.d/foo.conf" failed
(13: Permission denied) in /etc/nginx/nginx.conf:33

Це те, що у мене є ls -al /etc/nginx/conf.d/:

$ ls -al /etc/nginx/conf.d/
total 8
drwxr-xr-x. 2 root root   26 Jul 28 03:55 .
drwxr-xr-x. 4 root root 4096 Jul 28 04:16 ..
-rw-r--r--. 1 root root  230 Jul 28 03:50 foo.conf

Що не так?


2
SELinux примусовий? Що ls -lZпоказує? Спробуйте setenforce 0і подивіться, чи працює він.
yaegashi

Дійсно, setenforce 0допомогло. Будь ласка, надішліть це як відповідь, я прийму
yegor256

Відповіді:


19

Коли ви отримуєте permission deniedпомилки в доступі до файлів і т. Д. З невідомих причин, це може бути пов’язано з SELinux. Особливо, коли ви бачите період після дозволів, як drwxr-xr-x.показано ls -lдля відповідного файлу / dir, вони можуть бути неправильно позначені (ви можете бачити це ls -Z) і викликати проблему.

Спершу слід перевірити поточний режим SELinux, запустивши getenforce. Якщо він каже Enforcing, то тимчасово встановіть режим Permissive, запустивши setenforce 0, і подивіться, чи працює ваша програма після цього.

Проконсультуйтеся в посібнику дистрибутива на SELinux щодо постійного виправлення, включаючи налаштування режиму SELinux при запуску, відновлення файлів або каталогів, політику оновлення тощо. Ось інструкція щодо CentOS .


2

Зміна цілого SElinux - це не завжди правильна відповідь. Я не експерт, але я б порівнював це з відключенням брандмауера, якщо порт недоступний.

Іншим швидким рішенням може бути «відновлення контексту SE» файлів, особливо якщо вони кудись скопійовані.

Докладнішу інформацію див. На веб-сайті https://www.thegeekstuff.com/2017/05/restorecon-examples/ .

Це команди, які варто спробувати перед відключенням SElinux

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*

Ця команда дає меніFull path required for exclude: net:[...].
Накілон

0

Кращий спосіб, ніж відключення selinux - це використання команди

semanage permissive -a httpd_t

Це дозволить службі toe nginx пройти без повного вимкнення selinux

Більше інформації на https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Однак для мене command chcon -v --type=httpd_sys_content_t /etc/nginx/*він працював, і він працював належним чином, не потребуючи видобутку httpd_t

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.