2013-09-10 4 views
28

Я новичок в системном администрировании. После установки Nginx via puppet на Ubuntu я получаю следующий вывод:nginx on Ubuntu: Разрешение отклонено

[alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied) 

[warn] 1898#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1 

[emerg] 1898#0: open() "/var/log/nginx/access.log" failed (13: Permission denied) 

Как избавиться от всех этих сообщений?

Я не хочу использовать командную строку напрямую (chown/chmod) и повторять ее каждый раз при создании нового сервера. Поэтому я думаю о том, что должно быть добавлено к манифесту марионеток.

Какова наилучшая практика sysadmin в этом случае: изменить владельца/разрешения для/var/log/nginx или сохранить журналы в другом месте? Если chown/chmod - это способ пойти, какие конкретные разрешения обеспечит самый высокий уровень безопасности?

Я попробовал это, но это не помогло:

file { '/var/log/nginx': 
    ensure => directory, 
    mode => '0755', 
    owner => 'www-data', 
    group => 'www-data', 
    recurse => true 
    } 

Отредактировано:

[email protected]:~$ ps aux | grep [n]ginx 
root  1001 0.0 0.1 62908 1388 ?  Ss 08:47 0:00 nginx: master process /usr/sbin/nginx 
www-data 1002 0.0 0.1 63260 1696 ?  S 08:47 0:00 nginx: worker process 
www-data 1003 0.0 0.1 63260 1696 ?  S 08:47 0:00 nginx: worker process 
www-data 1004 0.0 0.1 63260 1696 ?  S 08:47 0:00 nginx: worker process 
www-data 1005 0.0 0.1 63260 1696 ?  S 08:47 0:00 nginx: worker process 
+0

Вы уверены, что кукольный код был применен (например, с использованием «бродячего обеспечения»)? Является ли '/ etc/nginx/nginx.conf' использованием' www-data' или 'nginx' для запуска nginx-не-master-процессов? –

ответ

26

Если я считать, что ваш вторым код кукольных конфигурации, то у меня есть логические объяснения, если файлы ошибки и журнал были создать до того, вы можете попробовать это

sudo chown -R www-data:www-data /var/log/nginx; 
sudo chmod -R 755 /var/log/nginx; 
+0

Потенциальная проблема безопасности с этим 'chmod' - он также устанавливает все файлы журналов как исполняемые. Вместо этого: 'sudo chmod -R u + X/var/log/nginx' – Synchro

-3

Nginx необходимо запустить командой 'sudo /etc/init.d/nginx start'

+0

Я не смог получить sudo service nginx restart для работы, получил этот вывод:' service nginx restart Не удалось перезапустить nginx.service: Имя org.freedesktop.PolicyKit1 не был предоставлен никакими .service файлами', но 'sudo /etc/init.d/nginx restart' работал как прелесть для меня. – mohnstrudel

115

Убедитесь, что вы используете тест как суперпользователя.

sudo nginx -t 

Или у теста не будет всех разрешений, необходимых для надлежащего завершения теста.

+0

Это ответ! – Notflip

0

Для меня я просто изменил selinux от принудительного до разрешающего, а затем я смог запустить nginx без каких-либо ошибок.

+1

Предоставьте некоторый код, если он у вас есть. –

+0

Отключение selinux поражает цель selinux. Да, это быстро заканчивается средствами - но это не обязательно правильные цели средства. Лучше узнать правильный способ работы с selinux. – Farray

7

только потому, что вы не имеете права Асесса файла, используйте

chmod -R 755 /var/log/nginx; 

или вы можете изменить Суд то

+0

Вы не хотите, чтобы ваши журналы были доступны для чтения, кроме корневого. –

+0

Но хочу ли я запускать nginx как root? –

3

Разрешения для просмотра файлов журнала предоставляются пользователями быть в группа adm.

Чтобы добавить пользователь в эту группу по вопросу командной строки:

sudo usermod -aG adm <USER> 
+2

Что, если таковые имеются, являются недостатками этого подхода? –

0

Я просто патч Nginx бинарного замена пути /var/log/nginx/error.log и другим с локальным путем.

$ perl -pi \ 
    -e '[email protected]/var/log/nginx/@_var_log_nginx/@g;' \ 
    -e '[email protected]/var/lib/nginx/@_var_lib_nginx/@g;' \ 
    -e '[email protected]/var/run/[email protected]_var_run/[email protected];' \ 
    -e '[email protected]/run/[email protected]_run/[email protected];' \ 
    </usr/sbin/nginx> nginx 
$ chmod +x nginx 
$ mkdir _var_log_nginx _var_lib_nginx _var_run _run 
$ ./nginx -p . -c nginx.conf 

Он работает для тестирования.

14

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

setenforce 0

Я надеюсь, что это помогает :)

+0

'setenforce 0' для вспомогательных дистрибутивов selinux (Redhat, Centos, Fedore, ...) действительно является очень верным ответом, если вы на 100% уверены, что задали правильные права в каталоге. – jochem

Смежные вопросы