Sudo (substitute user do) est une commande sous linux qui permet à un utilisateur de lancer une commande avec les droits root, sans avoir besoin de connaitre le mot de passe de ce dernier. Nous allons voir au cours de ce guide comment configurer sudo pour permettre à un utilisateur d’exécuter des commandes exigeant les droits root.
Pourquoi sudo ?
Imaginer que vous êtes un administrateur système au sein d’une entreprise et un développeur est connecté à distance à un serveur via ssh et souhaite relancer un service critique ( comme apache ), le système lui demande de saisir le mot de passe root, sur Centos voici ce que ça donne :
[dev@server ~]$ systemctl restart httpd.service ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentification requise pour gérer les services système ou les unités. Authenticating as: root Password:
Dans ce cas là vous êtes obligé de vous connecter au serveur pour lui relancer apache via root bien évidement vous ne pouvez pas lui donner le mot de passe root.
Pour un seul utilisateur, c’est pas trop gênant par contre imaginer qu’il y en a plusieurs et chacun souhaite relancer un service différent à commence à être une tache répétitif et épuisante. C’est là qu’intervient le mot magique sudo =D.
Avec sudo vous allez permettre à vos développeurs de relancer leurs service eux même comme des grand sans vous déranger, c’est cool pas vrais 🙂 , allons voir comment peut-on faire ça.
/etc/sudoers :
Pour permettre à vos développeurs d’utiliser sudo, vous devez les ajouter au fichier /etc/sudoers par contre il n’est pas recommander d’éditer le fichier avec un éditeur comme vi,vim et nano, utiliser plutôt la commande visudo, En effet, avec visudo, lors de l’enregistrement, l’outil nous indique s’il y a une erreur de syntaxe.
Voici la syntaxe de la commande à ajouter :
user ALL = (user) commande1,commande2, etc
%groupe ALL = (user) commande1,commande2, etc
- user : indique le nom d’utilisateur auquel le droit sudo s’appliquera.
- %groupe : indique le nom du groupe auquel le droit sudo s’appliquera.
- ALL : Désigne la ou les systèmes dans lesquels le droit sudo s’appliquera
- (user) : Désigne l’utilisateur dont on prend les droits (vous pouvez mettre « ALL » qui signifie « pour tous », y compris root)
- commande : la commande pouvant être exécutées par user ou %groupe, vous pouvez mettre « ALL » si vous souhaitez que le user aie le droit d’exécuter toutes les commandes, ce n’est pas recommandé bien sur. Vous pouvez spécifier plusieurs commandes séparé par « , » . Il faut mettre le chemin abslu de la commande, si vous l’ignorer utiliser la commande which :
[root@apache-server ~]# which httpd /usr/sbin/httpd
Il ne reste maintenant que de donner le droit sudo à nos développeurs pour redémarrer apache, voici la ligne à saisir :
dev ALL=(root) /usr/bin/systemctl restart httpd.service
Notre administrateur ne sera plus dérangé et notre développeur est comptent 🙂 .
[dev@server]$ sudo systemctl restart httpd.service [sudo] Mot de passe de dev1 :
Utiliser sudo sans mot de passe :
Imaginer que notre développeur à programmer un script contenant la commande sudo qui se lance tout les 10min , donc à chaque 10 min le développeur doit saisir le mot de passe et ce n’est pas du tout pratique. Ou bien tout simplement il ne souhaite plus retaper son mot de passe à chaque qu’il utilise sudo. Cela peut être résolu en indiquant sur /etc/sudoers de ne pas demander le mot de passe.
Il suffit pour cela de mettre « NOPASSWD » devant la commande commande :
dev1 ALL=(root) NOPASSWD: /usr/bin/systemctl restart httpd.service
[dev@server ~]$ sudo systemctl restart httpd.service [dev@server ~]$
nmap : les 12 commandes que vous devez connaître
DNS round robin
Protocole du routage
Désinstaller apache complétement
Fail2Ban : How to protect Linux services