2 votes

Exécuter un serveur Node.js HTTPS en tant que non-root

Un serveur Node.js servant une application sur HTTPS peut-il être exécuté par un utilisateur non root ? Le problème est qu'il ne semble pas y avoir de moyen d'exécuter un script comme este sans sudo, puisqu'il doit accéder aux certs.

Je suis conscient qu'il est possible d'abandonner les privilèges de l'administrateur après le démarrage de Node, mais j'aimerais éviter cela si possible, car cela peut conduire à un comportement inattendu.

4voto

nico_ekito Points 13977

Le problème des certificats est facile à résoudre, il suffit de les attribuer à votre utilisateur et d'ajuster les permissions en conséquence.

Vous constaterez cependant que vous ne pouvez pas faire en sorte que votre serveur écoute le port HTTPS, 443, car il s'agit d'un port privilégié (< 1024).

Vous pouvez cependant résoudre ce problème de différentes manières, par exemple :

  • Reverse proxy en amont (Apache / nginx) qui transmet les requêtes à nodejs qui écoute sur un port plus élevé.

  • Transfert de port 443 -> 1443 (ou tout autre port supérieur à 1024) et écoute de nodejs sur 1443.

  • Utilisation des capacités de linux (CAP_NET_ADMIN IIRC).

Il existe probablement d'autres méthodes.

0 votes

Merci pour votre réponse Fredi ! J'ai déjà trouvé un moyen d'exécuter l'application sur un port privilégié sans sudo. Le chowning et l'ajustement des permissions pour les fichiers de certitude étaient quelque chose à laquelle j'ai pensé. Cependant, est-ce une mauvaise pratique d'accorder ces permissions à un utilisateur non root ?

0 votes

Il y a beaucoup d'opinions à ce sujet :-) . J'aime celui d'Apache, où le serveur démarre en tant que root (il peut donc ouvrir les ports privilégiés et lire tous les fichiers) puis passe à un utilisateur non privilégié, le daemon par défaut. Dans ce cas, vous pouvez garder vos certificats illisibles pour tous, sauf pour root, de sorte que si votre serveur web est compromis, l'attaquant ne peut faire que ce que l'utilisateur non privilégié fait et ne peut pas lire les certificats. En fait, si vous suivez le chemin du proxy inverse, vous pouvez avoir cela gratuitement. Et vous pouvez faire évoluer votre application si nécessaire. Mais ceci est une réponse à une autre question :-)

0 votes

@MatiasHeikkilä, si vous avez aimé la réponse, vous pouvez l'approuver :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X