2015-04-21 4 views
0

Я хотел бы указать каталог на моем сервере, используя мой веб-браузер. Каталог/srv/downloads/Nginx: stat() failed (13: Permission denied) при просмотре

Для этого я установил сервер nginx. Вот файлы конфигурации:

user nginx; 
worker_processes 1; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    keepalive_timeout 65; 

    #gzip on; 

    include /etc/nginx/conf.d/*.conf; 
} 

и .conf файл внутри каталога conf.d является:

server { 
    listen  80 default_server; 
    server_name example.org; 
    root  /srv; 

    client_max_body_size 64M; 

    location /downloads/ { 
    autoindex on; 
     alias /srv/downloads/; 
    allow 192.168.0.0/24; 
    allow 10.212.116.0/23; 
    deny all; 
    } 
} 

Но когда я пытаюсь получить доступ к http://192.168.0.2/downloads/, я могу перечислить каталоги, но не все , Ниже то, что происходит:

2015/04/21 17:08:54 [crit] 12839#0: *1 stat() "/srv/downloads/fix_kernel_doc.patch.done" failed (13: Permission denied), client: 192.168.0.26, server: example.org, request: "GET /downloads/ HTTP/1.1", host: "192.168.0.2" 

Как показано на nginx.conf, сервер Nginx побежал пользователем «Nginx». Поэтому я сделал следующее:

[[email protected]]# su -l nginx -s /bin/stat /srv/downloads/fix_kernel_doc.patch.done 
Last login: mar. avril 21 17:30:19 CEST 2015 on pts/0 
    File: '/srv/downloads/fix_kernel_doc.patch.done' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: fd00h/64768d Inode: 85524762 Links: 1 
Access: (0644/-rw-r--r--) Uid: (1000/ is) Gid: (1000/ devs) 
Context: system_u:object_r:var_t:s0 
Access: 2015-04-21 17:22:48.393259661 +0200 
Modify: 2015-04-21 17:22:48.393259661 +0200 
Change: 2015-04-21 17:22:48.393259661 +0200 
Birth: - 

Мой пользователь nginx находится в группе «devs». Я также пробовал с пользовательскими www-данными, чтобы быть уверенным, но он не работает ни.

Любая идея, пожалуйста? Спасибо

ответ

1

Основываясь на Context: system_u:object_r:var_t:s0, я предполагаю, что вы используете SELinux.

SELinux может блокировать доступ. Чтобы проверить, является ли проблема SELinux, попробуйте запустить setenforce 0 для временного отключения SElinux и повторите попытку загрузки каталога. Альтернативно, /var/log/audit/audit.log должен был зарегистрировать отказ, если он действительно произошел.

Если это работает, вам нужно будет изменить контекст каталога, чтобы позволить nginx его прочитать, или попробуйте запустить audit2allow, чтобы узнать, есть ли логическое SELinux, которое вы можете изменить, чтобы разрешить доступ nginx.

Редактировать: Поскольку это SELinux и одна папка, самый простой способ исправить это должен состоять в запуске semanage fcontext -a -t httpd_sys_content_t "/srv(/.*)?", а затем restorecon -R -v /srv.

Первый сообщает SELinux, что каталог/srv содержит содержимое только для чтения для HTTP-сервера, второе - через и перемаркирует все файлы должным образом.

Наконец, снова включите SELinux с setenforce 1.

Инструкция от http://www.serverlab.ca/tutorials/linux/web-servers-linux/configuring-selinux-policies-for-apache-web-servers/, https://drupalwatchdog.com/volume-2/issue-2/using-apache-and-selinux-together и http://www.techrepublic.com/blog/linux-and-open-source/practical-selinux-for-the-beginner-contexts-and-labels/

Configure SELinux access so that Apache can access mounted directories является связанным с этим вопросом.

+0

Действительно, отключение SELinux помогает мне получить весь контент каталога и его подкаталогов. Проблема с пользователем nginx заключается в получении атрибутов файлов. type = AVC msg = audit (1429687617.608: 30874): avc: denied {getattr} для pid = 12839 comm = "nginx" path = "/ srv/downloads/gdk-pixbuf-2.30.8.tar.xz" dev = " dm-0 "ino = 75184977 scontext = system_u: system_r: httpd_t: s0 tcontext = unconfined_u: object_r: admin_home_t: s0 tclass = file – Lazao

+0

Я отредактировал свой ответ, чтобы включить команды, которые должны делать то, что вы хотите, надеюсь, они работают! – Kyle

+0

Спасибо, это работает! – Lazao

0

У меня была эта проблема, и я комментирую это для целей документации.

Пример:

Nginx пользователей: WWW-данные

location /sub { 
      alias /home/dir1/dir2/dir3; 
      autoindex on; 
    } 

параметр г + х, для WWW-данных, как владелец группы для разрешения DIR3 возвращается отказано

настройки г + х для www- данные как владелец группы для dir2 возвращает желаемое поведение

права устанавливаются с помощью рекурсивного варианта

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