鉴于:DigitalOcean新鲜的Archlinux VPS盒子。 我创build了一个用户'app',并且有一个由systemd启动的二进制文件创build的/home/app/webapp.sock文件:
[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用户身份运行此应用程序,因为在某个时间点,我可能决定在另一个用户的另一台机器上运行另一个Web服务器,仅向http用户显示其.sock文件。 Rails已知有安全漏洞,所以我想避免“应用”用户从他的主文件夹和自己的数据中的任何地方。
我有一个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'不能'猫'呢?
我认为这也是以下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"
dynamic内容:
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"
摘自nginxconfiguration:
upstream webapp { server unix:/home/app/webapp.sock fail_timeout=0; } server { listen 80; root /home/app/app/public;
这是加强安全吗? SELinux的? cgroup的? 我究竟做错了什么?
您必须检查权限,不仅是套接字(文件),而且是所有父目录的权限。 如果其中任何一个拒绝访问,您的请求将失败。
例如:
# ls -ld /home/app drwx------. 8 root root 4096 Dec 7 21:33 /home/app