web-dev-qa-db-ja.com

CentOS 7でnginxがpumaソケットにアクセスできないのはなぜですか?

だから私はRuby on Rails app in /var/www/nginx755権限。このアプリは、プーマを介して展開することを目的としています。

そのようです:

rvmsudo -u nginx bundle exec puma -e production -d -b unix:///var/www/my_app/tmp/sockets/my_app.socket

ソケットのアクセス許可は次のとおりです。

srwxrwxrwx. 1 nginx nginx 0 Nov  6 09:43 tmp/sockets/my_app.sock

もちろん、このプロセスはnginxが所有しています。

nginx     7335  0.0  8.8 536744 90388 ?        Sl   09:43   0:00 puma 2.9.2 (unix:///var/www/my_app/tmp/sockets/my_app.sock)

私のnginx構成構成は次のとおりです。

upstream my_app {
  server unix:///var/www/my_app/tmp/sockets/my_app.sock;
}

server {
  listen 80;
  server_name www.example.com example.com;
  root /var/www/my_app/public;

  location / {
    proxy_pass http://my_app;
    proxy_set_header Host $Host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

これらすべてと私のアプリケーションはまだ権限を拒否されています。

connect() to unix:///var/www/my_app/tmp/sockets/my_app.sock failed (13: Permission denied) while connecting to upstream,

私もrootユーザーとしてこれらすべてを試しました。しかし、それでも機能しません。

誰かが私が間違っていることを知っていますか?

8
Pori

ハレルヤ!これはすべて、特にnginxに関連するSELinuxポリシーの問題であることが判明しました。何時間も掘り下げた後、私は実行することによってそのような否定を発見しました:

Sudo grep nginx /var/log/audit/audit.log

メッセージは次のようになりました。

type=AVC msg=audit(1415283617.227:1386): avc:  denied  { write } for  pid=1683 comm="nginx" name="my_app.sock" dev="tmpfs" ino=20657 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_run_t:s0 tclass=sock_file

これを修正するために、 Axilleas による素晴らしい記事を見つけました。

必要な権限を含むポリシーを作成するには、audit2allowをインストールして実行する必要がありました。

grep nginx /var/log/audit/audit.log | audit2allow -M nginx

完了したら、次の方法でポリシーを完成させました。

semodule -i nginx.pp

残念ながら、さらにポリシーが必要なため、アプリケーションにアクセスする前に、このプロセスを2回実行する必要がありました。それにもかかわらず、ここに解決策がありました。

また、 Sergiy Krylkov による別の素敵な記事があります。

話の教訓:SELinuxを学ぶ。

11
Pori