Le fichier d'unité systemd fourni avec le paquet nginx-common exécute le processus maître en tant que root, ce qui me rend nerveux.
Je suppose que la seule raison pour laquelle il s'exécute en tant que root est de lier le port 80, mais être root est trop compliqué pour cela, donc je l'exécute en tant qu'utilisateur normal et je lui donne l'adresse suivante CAP_NET_BIND_SERVICE
capacité.
J'ai modifié le fichier de l'unité pour qu'il ressemble à ceci :
[Service]
Type=forking
PIDFile=/var/run/nginx/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=/usr/sbin/nginx -s quit
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
Capabilities=cap_net_bind_service+=ep
user=www-data
Y a-t-il des inconvénients à cette approche ? Est-ce que nginx s'attend à être root pour une autre raison ? Existe-t-il un meilleur moyen de verrouiller nginx ? Je sais que certaines personnes aiment le "chrooter", mais cela semble être très compliqué.