Avant de commencer, n'hésitez pas à suggérer un meilleur titre pour cette question.
Je me suis inscrit sur Digitalocean et j'ai installé une pile LEMP. C'est la première fois que je configure un serveur à partir de zéro. Même si j'ai choisi l'option LEMP, je veux aussi héberger des applications de nœuds.
Ma principale préoccupation est que je ne sais pas quels utilisateurs je dois créer, et lesquels doivent avoir des privilèges d'administrateur. De plus, je veux utiliser des clés SSH chaque fois que cela est possible.
-
Pour le chargement et le déchargement de fichiers, j'utilise Filezilla. Lorsque j'ai installé la pile LEMP, on m'a demandé si je souhaitais générer un mot de passe pour le compte de
root
ou utiliser des clés SSH. J'ai choisi la dernière option. En ce moment, je peuxssh root@domain.com
et utiliser mon mot de passe SSH. J'ai installé ProFTPd et SFTP activé ./etc/proftpd/authorized_keys/root
contient les clés SSH que j'utilise pour me connecter viassh
ou Filezilla, au serveur. Ni l'un ni l'autressh
ni Filezilla ne demandentroot
Le mot de passe de l'entreprise.Comme je suis le seul à accéder par SFTP, je pense que je peux m'en sortir avec cette méthode. Si j'ai besoin de quelqu'un d'autre, je créerais un utilisateur pour lui, j'associerais ses clés SSH et lui donnerais accès à certains dossiers.
Cela ne me pose pas de problème, mais j'ai pensé que je devais le mentionner et voir si quelqu'un pense que c'est une mauvaise pratique.
-
Je veux être capable d'exécuter des applications Node. Comme
root
J'ai installé node, npm et pm2 pour maintenir mes applications en vie à tout moment. Tous ces éléments se trouvent dans/usr/local/bin
détenu parroot:root
. J'ai créé un utilisateur appeléwww
et comme je stocke mes applications dans/var/www
,chown -R www:www /var/www
. Dois-je vraiment créerwww
ou puis-je utiliserwww-data
qui est celui que Nginx utilise ?Jusqu'à présent, je n'ai pas vraiment besoin d'ajouter
www
à sudoers, jusqu'à ce que je veuille utiliserpm2 startup
ynpm install
:-
PM2 nécessite
pm2 startup
(qui génère les scripts pour exécuter PM2 après chaque démarrage du système) à utiliser par l'utilisateur qui va exécuterpm2 start
(qui démarre l'application node et la surveille). Cela ne doit être fait qu'une seule fois. Cela vous donne une commande qui doit être exécutée avecsudo
. Doncusermod -aG www sudo
et exécuter ladite commande. Tout va bien. -
npm install
exige égalementsudo
. Le truc avec celui-là, c'est que Je ne veux pas qu'on me demande un mot de passe. . J'essaie d'utiliser un hook Git post-receive, donc à chaque fois que je pousse vers le serveur, je veux que ceci soit exécuté (/var/repo/nodeapp.git/hooks/post-receive
):#!/bin/sh git --work-tree=/var/www/nodeapp --git-dir=/var/repo/nodeapp.git checkout -f && cd /var/www/nodeapp && sudo npm install
Si je le fais
git push
à partir de mon terminal, je n'aurais aucun problème à ce qu'on me demande un mot de passe lorsqu'il essaie desudo npm install
mais il m'arrive d'utiliser Github pour Windows/Mac et il n'y a aucun moyen pour moi de fournir ce mot de passe. Permettez-moi de noter que je configurerais les clés SSH pour me connecter en tant quewww
via le terminal ou l'application Github.
J'ai d'abord pensé à mettre
www
comme propriétaire pournpm
ypm2
car je pensais que de cette façon, on ne me demanderait pas d'exécuter la commande avecsudo
. J'avais tort (j'espère que vous ne riez pas). Ensuite, j'ai pensé, puisquewww
est un sudoer, je pourrais rendre certaines commandes disponibles pour qu'il puisse être utilisé avec sudo. Donc jevisudo
et j'ai ça au milieu du fichier :# User privilege specification root ALL=(ALL:ALL) ALL www ALL=(ALL:ALL) NOPASSWD:/usr/local/bin/npm
Ce que j'essaie de faire, c'est de "laisser l'utilisateur
www
utilisersudo npm install
sans que l'on vous demande un mot de passe". Est-ce la voie à suivre ? Existe-t-il un moyen de dire "ne laissez pas cet utilisateur utiliser sudo avec toute autre commande, même s'il fournit le bon mot de passe". Disons que je faissudo rm file.txt
commewww
et file.txt appartient à un autre utilisateur : puis-je le désactiver ? Je veux seulementwww
(ou tout autre utilisateur que je crée) à pouvoir utiliser sudo avecnpm
.Jusqu'à présent, ça ne marche pas pour moi. Aussi, existe-t-il un moyen de réaliser tout cela sans ajouter de
www
aux sudoers ? -
PM2 nécessite
-
D'après ce que je comprends, je ne devrais pas laisser le
root
l'utilisateur se connecte viassh
. Est-ce vital ? Digitalocean ne fournit pas d'interface graphique pour configurer le serveur.ssh
commeroot
est mon seul moyen de configurer des choses comme les paramètres de Nginx. -
Nginx est exécuté par
root
pour qu'il puisse écouter le port 80, mais ensuite il sert les sites en tant qu'autre utilisateur (www-data
Je crois). Dois-je configurer quelque chose ici ? Je ne sais rien de cet utilisateur : permissions, mot de passe, clés autorisées Devrais-je configureruser www;
en/etc/nginx/nginx.conf
?Que se passe-t-il lorsque je crée un site en utilisant PHP et qu'un visiteur accède au site ? Quel utilisateur exécute réellement les choses,
www-data
par défaut ? -
Dois-je avoir un utilisateur pour mes sites PHP et un autre responsable de l'exécution de choses comme
node index.js
? -
Si je mets
AllowUsers someusername anotherusername
en/etc/ssh/sshd_config
Est-ce que cela s'applique uniquement lorsque l'on essaie d'accéder par le biais de l'interface utilisateur ?ssh
ou également lorsque j'essaie de pousser les modifications en utilisant Github pour Windows/Mac ? -
Si je mets
PasswordAuthentication no
en/etc/ssh/sshd_config
Quel mot de passe dois-je introduire lorsqu'une commande avec sudo me le demande ?