Nginx не может получить доступ к файлу .sock и публичной папке upstream

Nginx не может получить доступ к файлу .sock и публичной папке upstream

Дано: свежий Archlinux VPS box на DigitalOcean. Я создал пользователя, 'app', и есть файл, /home/app/webapp.sockсозданный бинарником, запущенным systemd:

[Unit]
Description=Web application server
After=network.target

[Service]
Type=forking
User=app
PIDFile=/home/app/webapp.pid
ExecStart=/home/app/.gem/ruby/2.0.0/bin/thin -d --user app -e production --chdir /home/app/app --socket /home/app/webapp.sock --pid /home/app/webapp.pid --log /home/app/log/webapp.log start
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID

[Install]
WantedBy=multi-user.target

Не хочу запускать это приложение как http-пользователь, так как в какой-то момент времени я могу решить запустить другой веб-сервер на этой машине под другим пользователем, открывая только его .sock-файл для http-пользователя. Известно, что Rails имеет уязвимости безопасности, поэтому я хотел бы запретить пользователю 'app' получать доступ куда-либо из своей домашней папки и своих собственных данных.

У меня есть пользователь sudo, «sudoer», и нет возможности прочитать даже pid-файл:

[sudoer@host ~]$ cat /home/app/webapp.pid
cat: /home/app/webapp.pid: Permission denied
[sudoer@host ~]$ sudo su - app
[app@host ~]$ ls -l webapp.pid
-rw-r--r-- 1 app app 5 Dec  7 19:33 webapp.pid

У него есть права «r» для «других», почему «sudoer» не может его «cat»?

Я предполагаю, что это также является причиной следующих ошибок nginx. Статический файл:

2013/12/07 18:58:05 [error] 18114#0: *2 open() "/home/app/app/public/favicon.ico" failed (13: Permission denied), client: 183.89.50.151, server: host.com, request: "GET /favicon.ico HTTP/1.1", host: "host.com"

Динамический контент:

2013/12/07 20:49:00 [crit] 21581#0: *1 connect() to unix:/home/app/webapp.sock failed (13: Permission denied) while connecting to upstream, client: 183.89.50.151, server: host.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/app/webapp.sock:/favicon.ico", host: "host.com"

Выдержка из конфигурации nginx:

upstream webapp {
  server unix:/home/app/webapp.sock fail_timeout=0;
}
server {
  listen 80;
  root /home/app/app/public;

Это усиленная безопасность? SELinux? CGroups? Что я делаю не так?

решение1

Вы должны проверить разрешение не только сокета (файла), но и всех родительских каталогов. Еслилюбойиз них откажут в доступе, ваш запрос не будет выполнен.

Например:

# ls -ld /home/app
drwx------. 8 root root 4096 Dec 7 21:33 /home/app

решение2

Вставьте ваш файл sock /var/runи когда ваш файл sock будет создан, проверьте, какому пользователю и группе он принадлежит. В вашем случае пользователь должен быть 'app'

Связанный контент