NGINX Permissões: 'sudo nginx' vs 'serviço sudo nginx start'

1

Estou fazendo uma configuração capistrano aqui com o nginx 1.6.2 e Unicorn. Mas sob minha configuração atual, o nginx não cria o servidor que eu escrevi em arquivo con. Tenho certeza de que é um erro de permissão para o diretório do meu usuário, pois é onde os arquivos conf estão localizados em dois diretórios do aplicativo rails.

Meu arquivo nginx é como abaixo:

user  mjp 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;
    include /etc/nginx/sites-enabled/*;
}

/etc/nginx/conf.d/*.conf; está vazio.

O diretório

/etc/nginx/sites-enabled/; contém 2 links simbólicos:

[mjp@centos nginx]$ ll sites-enabled/
total 4
lrwxrwxrwx. 1 root root 61 Jan  5 06:58 mjp-portal_production -> /home/mjp/apps/mjp-portal_production/shared/config/nginx.conf
lrwxrwxrwx. 1 root root 58 Jan  3 21:03 mjp-portal_staging -> /home/mjp/apps/mjp-portal_staging/shared/config/nginx.conf

Toda a permissão que leva a esses arquivos con:

[mjp@centos ~]$ ll
total 4
drwxrwxr-x. 4 mjp nginx 4096 Jan  5 06:58 apps

[mjp@centos ~]$ ll apps/
total 8
drwxr-xr-x. 5 mjp nginx 4096 Jan  5 07:27 mjp-portal_production
drwxrwxr-x. 5 mjp nginx 4096 Jan  3 21:11 mjp-portal_staging


[mjp@centos ~]$ ll apps/mjp-portal_staging/
total 16
lrwxrwxrwx. 1 mjp nginx   57 Jan  3 21:11 current -> /home/mjp/apps/mjp-portal_staging/releases/20150103210756
drwxrwxr-x. 4 mjp nginx 4096 Jan  3 21:07 releases
drwxrwxr-x. 7 mjp nginx 4096 Jan  3 21:04 repo
-rwxrwxr-x. 1 mjp nginx   71 Jan  3 21:11 revisions.log
drwxrwxr-x. 9 mjp nginx 4096 Jan  3 21:05 shared


[mjp@centos ~]$ ll apps/mjp-portal_staging/shared/
total 28
drwxrwxr-x. 2 mjp nginx 4096 Jan  3 21:10 bin
drwxrwxr-x. 3 mjp nginx 4096 Jan  3 21:05 bundle
drwxrwxr-x. 2 mjp nginx 4096 Jan  5 07:46 config
drwxrwxr-x. 2 mjp nginx 4096 Jan  3 21:11 log
drwxrwxr-x. 3 mjp nginx 4096 Jan  3 21:04 public
drwxrwxr-x. 5 mjp nginx 4096 Jan  3 21:04 tmp
drwxrwxr-x. 3 mjp nginx 4096 Jan  3 21:04 vendor

[mjp@centos ~]$ ll apps/mjp-portal_staging/shared/config/
total 24
-rwxrwxr-x. 1 mjp nginx  136 Jan  3 21:03 database.example.yml
-rwxrwxr-x. 1 mjp nginx  155 Jan  3 21:06 database.yml
-rwxrwxr-x. 1 mjp nginx  188 Jan  3 21:03 log_rotation
-rwxrwxr-x. 1 mjp nginx  814 Jan  5 07:46 nginx.conf
-rwxrwxr-x. 1 mjp nginx 1996 Jan  3 21:03 unicorn_init.sh
-rwxrwxr-x. 1 mjp nginx 1327 Jan  3 21:03 unicorn.rb

mjp-portal_production -> /home/mjp/apps/mjp-portal_production/shared/config/nginx.conf :

upstream unicorn1 {
  server unix:/tmp/unicorn.mjp-portal_production.sock fail_timeout=0;
}

server
{
  server_name 185.48.117.98;
  listen 8080 default;
  root /home/mjp/apps/mjp-portal_production/current/public;

  #access_log /home/mjp/apps/mjp-portal_production/shared/log/nginx_access.log;
  #error_log  /home/mjp/apps/mjp-portal_production/shared/log/nginx_error.log;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn1;
    proxy_buffering off;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

mjp-portal_staging -> /home/mjp/apps/mjp-portal_staging/shared/config/nginx.conf :

upstream unicorn {
  server unix:/tmp/unicorn.mjp-portal_staging.sock fail_timeout=0;
}

server
{
  server_name 185.48.117.98;
  listen 8081 default;
  root /home/mjp/apps/mjp-portal_staging/current/public;

  #access_log /home/mjp/apps/mjp-portal_staging/shared/log/nginx_access.log;
  #error_log  /home/mjp/apps/mjp-portal_staging/shared/log/nginx_error.log;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
    proxy_buffering off;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

Mesmo quando configuro para executar o processo nginx ("worker") como root . Ainda assim, o nginx não pode criar o servidor e começar a ouvi-lo.

netstat -anp não mostra as portas abertas pelo nginx. Nesse caso, port 8080 and port 8081 .

O que estou fazendo errado? Todas as permissões parecem estar corretas. Eu ainda estou sentindo falta de algo? Quando eu colocar código para esses dois links simbólicos em /etc/nginx/conf.d/. It does opens those ports although i get 502 gateway ruim ', o que me faz pensar que é um erro de permissão. nesses diretórios de aplicativos.

O que estou fazendo de errado?

    
por Saad Masood 05.01.2015 / 09:22

2 respostas

6

Este é um problema de selinux.

Quando você executa sudo nginx , inicia nginx as unconfined_t , quando você executa sudo service nginx start , ele inicia o nginx como httpd_t .

Inicialmente começando com apenas sudo, ele cria um monte de arquivos e inicializa seu estado como unconfined_t . Por exemplo, o arquivo pid será o contexto errado. Portanto, ao usar service nginx stop para terminá-lo, não há privilégios suficientes para httpd_t ler arquivos escritos pelo unconfined_t .

Você deve sempre começar a usar service , o que evitará esse problema. Para corrigi-lo, você precisará redefinir os arquivos com estado que existem no sistema de arquivos, por exemplo, executar restorecon /var/run/nginx.pid corrigirá o conjunto de rótulos incorreto nesse arquivo pid.

Não tenho certeza se existem mais arquivos que são gravados quando o serviço é criado, o que também precisará ser corrigido. Você pode obter uma lista de quais arquivos eles podem estar fazendo ausearch -ts recent -m avc .

    
por 05.01.2015 / 14:48
3

Algumas informações adicionais para aqueles que desejam estender um pouco de conhecimento sobre o selinux e para depurar problemas com o selinux:

link

tl; dr

Depurar problemas com permissões do SElinux:

  1. definir modo permissivo (informa sobre violação de segurança em audit.log e executa ações)
  2. check audit.log (para centos e probaly todos RH familly /var/log/audit/audit.log)
  3. aplique permissões adequadas no SElinux ou em arquivos

Ferramenta:

ausearch -i -m avc

ajudará a ler o audit.log em formato legível por humanos em qualquer problema do AVC (SElinux)

Você também pode tentar adicionar:
   -ts recentes
   -ts hoje

restringir o escopo da pesquisa.

    
por 27.01.2016 / 00:10