Amazon Elastic Compute Cloud ou EC2 est un service proposé par Amazon Web Services (AWS) permettant à des tiers de louer des serveurs sur lesquels exécuter leurs propres applications web.
Si vous avez déjà travaillé sur une instance Amazon EC2 sous linux, vous avez très certainement essayé d’utiliser sudo
pour lancer des commandes qui nécessitent une élévation des privilèges de votre utilisateur.
Or, la configuration Amazon ne le permet pas par défaut mais utilise une implémentation du fichier sudoers
qui n’est pas standard pour une installation linux.
Une implémentation du fichier sudoers différente
Normalement, lorsque l’on lance visudo
, on obtient une version éditable du fichier /etc/sudoers
qui nous permet de modifier les comptes utilisateurs pour leur donner la permission d’exécuter la commande sudo
et donc contrôler quelles commandes ces utilisateurs peuvent lancer.
Anatomie du fichier sudoers
Voici un exemple de fichier sudoers
classique :
# User privilege specification
root ALL=(ALL:ALL) ALL# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL# See sudoers(5) for more information on “#include” directives:#includedir /etc/sudoers.d
Code language: PHP (php)
Les membres des groupes admin
et sudo
bénéficient des privilèges sudo, tout comme le compte root
. Toutefois, aucune de ces lignes ne s’appliquent à un compte EC2 qu’un utilisateur AWS peut utiliser.
C’est la dernière ligne, avec la directive #includedir
, qui permet de charger le bon fichier avec les privilèges utilisateur. Il est vital de noter que le signe #
dans #includedir
n’est pas un commentaire mais indique qu’il faut charger les fichiers contenus dans le répertoire /etc/sudoers.d
– cela peut prêter à confusion mais c’est comme cela que le fichier sudoers
fonctionne.
EC2 : donner les droits sudo à un utilisateur
Sur une instance EC2, il suffit de lister le contenu du répertoire /etc/sudoers.d
pour trouver le bon fichier:
ls /etc/sudoers.d
Dans la plupart des cas et des distributions, le nom du fichier débute par un nombre élevé tel que 90. Ces fichiers sont chargés par ordre décroissant, à la manière du lancement d’une fusée, donc un fichier qui commence par 90 sera exécuté avant un fichier qui commence par 10.
1. Sous Ubuntu, on édite le fichier /etc/sudoers.d/90-cloud-init-users
:
sudo visudo -f /etc/sudoers.d/90-cloud-init-users
Voici le contenu du fichier au départ :
Supplemental Sudo file example // Follows same formatting rules as /etc/sudoers
# User rules for ubuntu
ubuntu ALL=(ALL) NOPASSWD:ALL
Code language: PHP (php)
Dans cette configuration, l’utilisateur ubuntu
a le droit de lancer toutes le commandes (ALL
), sans mot de passe sudo
(NOPASSWD
) sur tous les hôtes (ALL
).
2. On ajoute le nom de notre utilisateur matt
avec les bonnes permissions :
matt ALL=(ALL) NOPASSWD:ALL
3. On enregistre le fichier et on redémarre le service sudo
:
sudo service sudo restart
Notre utilisateur peut désormais devenir root en lançant un simple:
sudo -i
Et voilà, vous avez désormais un utilisateur capable de lancer des commandes avec sudo sans mot de passe ou de passer root sur une instance Amazon EC2.
Vous voulez un site WordPress ou WooCommerce qui soit à la fois rapide et performant? Vous êtes au bon endroit.