8
votes

Run Sails.js avec le moins de privilèges en production

J'utilise des voiles.js 0.10.5 sur le nœud 0.10.33 sur Ubuntu Trusty. J'aimerais exécuter le processus de nœud en tant qu'utilisateur non root avec les principaux privilèges possibles dans l'environnement de production. Je suis à l'aise avec les différentes options de liaison aux ports inférieurs à 1024, mais je suis plus préoccupé par les autorisations d'annuaire.

Idéalement, je préférerais que le processus de nœud n'a qu'un accès en écriture à ses fichiers journaux et rien d'autre. Il ne devrait avoir que lu accès au répertoire contenant app.js et ci-dessous.

Pour le moment, j'ai besoin d'accorder un accès en écriture au répertoire ./.tmp et aussi au répertoire/views en raison des tâches grogneuses qui fonctionnent au démarrage. Je préférerais effectuer les tâches grogneuses à Déployer le temps comme un utilisateur différent au lieu de l'exécution. La commande www est apparue prometteuse mais je n'ai pas pu obtenir le résultat souhaité.

Quelqu'un peut-il me signaler dans la bonne direction pour courir des voiles.js avec zéro accès en écriture à ses actifs, vues, etc.


3 commentaires

Cela ressemble à créer simplement un utilisateur (avec des autorisations particulières à des répertoires particuliers) et d'exécuter nœud (ou démarrage de votre application) car cet utilisateur devrait fonctionner. Avez-vous essayé ça?


sudo -u foo grognez quelque chose et sudo -u bar nœud app.js (ou similaire)?


@Whymarrh aussi loin que je comprends, exécuter nœud app.js pour l'application basée sur les voiles puis lance grunt en tant que processus enfant en tant que même compte d'utilisateur. Si quelqu'un sait comment séparer l'exécution automatique du grognement des voiles, cela aiderait à répondre à ma question.


3 Réponses :


1
votes

Edité: J'utilise PM2 avec Apache comme proxy (avec MOD WS).

Vous pouvez utiliser un proxy comme Apache pour passer à partir du port 80 vers d'autres ports de serveur internes basés sur l'hôte.

Avec de cette façon, vous pouvez exécuter plusieurs applications dans le même serveur.

Il possède de nombreuses fonctions utiles telles que voir les journaux Comment varius applications dans la borne, redémarrez et enregistrez des applications clatanées, exécutez l'application en tant qu'utilisateur, l'état de l'application ... etc.

lien PM2: https://github.com/unitech/pm2

configs PM2: https://github.com/unitech/pm2 /blob/development/advanced_readme.md#OPTIONS


3 commentaires

J'utilise PM2 dans certains endroits et pour toujours dans d'autres. Dans les deux cas, il suffit de veiller à ce que l'application de nœud continue à fonctionner en cas de défaillance. Ces outils n'ont aucun impact sur les autorisations requises par l'application de nœuds.


Oui, mais vous pouvez l'utiliser avec un proxy comme Apache ou Nginx


Conformément au premier paragraphe de ma question, le port de soutien 80 avec des autorisations limitées est un problème résolu via une proxy comme Apache ou Nginx, ou via la mappage de ports IPTABLES, ou via CAP_NET_BIND_SERVICE. Je vise à exécuter l'application de nœud avec zéro accès en écriture à ses fichiers source.



4
votes

Utiliser voiles www pour construire des actifs statiques

CHMOD -R 440 Tous les fichiers et répertoires, de sorte que votre utilisateur et votre serveur Web (Group) puisse accéder aux fichiers.

Utilisez nginx / Apache pour héberger un serveur Web sur les demandes de port 80/443 et de proxy à des voiles (exécutées sur son propre port ou sur une prise UNIX).

Run Sails à l'aide de PM2 pour la maintenir en cours d'exécution et de gérer / collecter des journaux.

Les voiles se souleveront, mais ne pourront pas écrire son répertoire .tmp, qui ne devrait même pas être nécessaire car tous vos fichiers statiques seront acheminés vers le répertoire www via Nginx / Apache.


2 commentaires

De plus, vous pouvez déplacer le répertoire www à l'extérieur des voiles et l'avoir possédée par le serveur Web.


Cela semble manifeste. Vous suggérez-vous que Sails.js soulevez et continuez à courir même s'il ne parvient pas à écrire dans son répertoire .TMP? J'ai également trouvé que les voiles / grognements essayaient d'écrire sur le répertoire ./views/views/.



2
votes

La solution la plus simple pour moi semble être de séparer les tâches grogneuses nécessitant les privilèges élevés dans un fichier séparé que vous pouvez appeler avec un utilisateur différent sur le déploiement. Ensuite, les voiles ne devront rien courir et ne peut être lu que.


0 commentaires