autorisation nginx refusée pour les fichiers de certificat pour la configuration ssl

25

J'installe un proxy nginx ssl sur mon serveur Fedora.

J'ai créé une paire de certificats et de clés sous / etc / nginx. Ils ressemblent à ceci:

ls -l /etc/nginx/
total 84
...
-rw-r--r--. 1 root root 1346 Sep 20 12:11 demo.crt
-rw-r--r--. 1 root root 1679 Sep 20 12:11 demo.key

...

En tant que root, j'essaie de démarrer le service nginx:

systemctl start nginx.service

J'obtiens l'erreur suivante:

nginx[30854]: nginx: [emerg]
SSL_CTX_use_certificate_chain_file("/etc/nginx/demo.crt") failed (SSL: error:0200100D:system     library:fopen:Permission denied...e:system lib)
nginx[30854]: nginx: configuration file /etc/nginx/nginx.conf test failed

Y a-t-il un problème avec les autorisations sur ces fichiers?

numb3rs1x
la source
Il mentionne la chaîne de certificats ... n'est-ce pas le problème avec l'autorité de certification de cette clé demo.crt? Ou s'agit-il d'un certificat auto-signé? Soit dit en passant, je ne pense pas que le fichier clé devrait être lisible par le monde. Nginx devrait l'ouvrir en tant que root, puis supprimer les privilèges de l'utilisateur sous lequel il s'exécute.
Aleš Krajník
C'est auto-signé, oui. Je vais changer de propriétaire, merci.
numb3rs1x
Vous supposez que le problème concerne les certificats, mais le message d'erreur s'applique au fichier de configuration de Nginx.
bbaassssiiee

Réponses:

39

Vous avez probablement SELinux en mode d'application (par défaut pour Fedora):

sestatus -v

Si tel est le cas, vérifiez les journaux d'audit, vous devriez trouver l'erreur d'accès:

ausearch -m avc -ts today | audit2allow

Vous avez également probablement déplacé le fichier au lieu de le copier, de sorte que le contexte de sécurité du fichier peut être incorrect.

ls -lrtZ /etc/nginx/demo.* 

et corrigez-le si nécessaire:

restorecon -v -R /etc/nginx
dawud
la source
Merci beaucoup. J'ai suivi vos instructions et je ne reçois plus l'erreur. Il m'est arrivé de déplacer ces fichiers du répertoire dans lequel je les ai créés. Je pourrai les créer dans le même répertoire la prochaine fois. En dehors de cela, comment puis-je empêcher que cela se produise à l'avenir?
numb3rs1x
Pour ce cas d'utilisation spécifique, utilisez au cplieu de mvet apprendre à utiliser le auditsystème à la recherche de refus AVC.
dawud
L'ausearch | Commande audit2allow. Est-ce que cela a ajouté des autorisations à selinux ou était-ce juste pour confirmer que selinux était le problème?
numb3rs1x
C'était juste pour confirmer. Lisez leurs pages de manuel respectives pour les détails.
dawud
4
Ouah merci! C'est bien d'avoir une réponse qui ne consiste pas seulement à «désactiver SELinux».
BCran
7

Je suppose que c'est SELinux qui refuse l'autorisation. Vérifiez leur contexte SELinux. Le leur devrait être httpd_config_t. Sinon, exécutez

restorecon /etc/nginx/demo.*

ou

chcon httpd_config_t /etc/nginx/demo.*

en tant que root.

Vous pouvez consulter les journaux sous / var / log / audit / pour voir si c'est SELinux qui refuse l'autorisation. Vous pouvez également exécuter

setenforce 0

pour mettre SELinux en mode permissif . De cette façon, SELinux génère toujours des messages AVC (dans / var / log / audit /) mais autorise l'accès.

jdh8
la source