Donné : boîte VPS Archlinux fraîche sur DigitalOcean. J'ai créé un utilisateur, 'app', et il y a un fichier, /home/app/webapp.sock
créé par le binaire lancé par 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
Je ne veux pas exécuter cette application en tant qu'utilisateur http, car à un moment donné, je pourrais décider d'exécuter un autre serveur web sur cette machine sous un autre utilisateur, n'exposant que son fichier .sock à l'utilisateur http. Rails est connu pour avoir des failles de sécurité, et je voudrais donc éviter que l'utilisateur 'app' ne puisse accéder à son dossier personnel et à ses propres données.
J'ai un utilisateur sudo, 'sudoer', et il n'y a aucun moyen de lire même un fichier 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
Il a les droits 'r' pour 'others', pourquoi est-ce que 'sudoer' ne peut pas le 'cat' ?
Je suppose que c'est également la raison des erreurs nginx suivantes. Fichier statique :
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"
Contenu dynamique :
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"
Extrait de la configuration de nginx :
upstream webapp {
server unix:/home/app/webapp.sock fail_timeout=0;
}
server {
listen 80;
root /home/app/app/public;
Est-ce une sécurité renforcée ? SELinux ? CGroups ? Qu'est-ce que je fais de mal ?