====== sudo ======
* Objet : sudo
* Niveau requis :{{tag>débutant avisé}}
* Commentaires : //logiciel de sécurisation des terminaux//
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-)
* Suivi : {{tag>à-tester}}
* Création par [[user>smolski]] le 27/11/2012
* Testé par .... le ....
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=1698 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
{{https://debian-facile.org/images/file-R6679d85454aba230d70f7c482a3ada85.png}}
===== Important =====
== ATTENTION ! ==
Il est déconseillé d'utiliser **sudo** inconsidérément sans en remanier la configuration par défaut.
Exemple :
* Si on fait un sudo dans un terminal et qu'on en ouvre un autre, //le mot de passe est bien demandé//.
* Si on fait un sudo dans un terminal où on donne le mot de passe,
- qu'on le ferme
- qu'on en ouvre un de nouveau... //le mot de passe n'est plus demandé// !
Pour éviter cet inconvénient, porte ouverte à l'infection par des virus et des vers, veillez à configurer votre sudo selon le paragraphe : **[[doc:systeme:sudo#configuration_de_securite_elementaire | Configuration de sécurité élémentaire]]**
De toute façon mieux vaut **privilégier** [[:doc:systeme:su | la commande su]] chaque fois que cela est possible !
===== Introduction =====
Voilà un logiciel permettant de lancer **[[doc:systeme:superutilisateur | des commandes root]]** en maintenant un terminal **user** ouvert.
==== Utilisation de sudo ====
Sudo lui-même prend comme argument **une commande et ses paramètres**, pas une expression du shell.
Quand on utilise sudo, il est important de bien comprendre comment fonctionnent le [[doc:programmation:shell:shell|shell]] et [[doc:programmation:shell:regexp|ses opérateurs de redirection et de condition]]. \\
Pour le shell, la commande passée à sudo et **elle seule**, (pas les //opérateurs// donc) est vue comme un argument du programme sudo.
Pour exécuter une expression du shell avec sudo, il faut spécifier un shell comme commande et l'expression comme paramètre de celle-ci.
=== Exemples : ===
sudo commande > fichier
est interprété en distinguant les arguments (ici la commande de son application) comme :
[sudo //lacommande//] > [//lefichier//]
et **NON** comme deux ensembles composés de :
[sudo] [//lacommande// > //lefichier//]
c'est donc **le shell de l'utilisateur** courant qui écrit dans fichier, et non pas **le shell de root**.
Dans la même veine :
sudo commande1 && commande2
est interprété comme :
[sudo //lacommande1//] && [//lacommande2//]
**sans appliquer le sudo** sur //lacommande2// donc.
Dans les exemples ci-dessus les crochets servent à visualiser la priorité d'exécution. \\
Les expressions résultantes appliquées en copie/colle ne seront donc pas valides. LOL
==== Remerciements et liens : ====
Merci à **Walker29** et **raleur** pour avoir initié ces précisions sur le forum là :
* https://debian-facile.org/viewtopic.php?pid=242982#p242982
//Qu'une pluie de choco df leur soit à tous deux prescrit... \\
Quand ce sera possible bien sûr !// ;-)
===== Installation =====
apt-get update && apt-get install sudo
//Si vous avez plus simple, faite-le savoir !// ;-)
===== Configuration de sudo - visudo =====
Passer __obligatoirement__ par la commande **visudo** pour configurer sudo. L'utilitaire visudo vérifie la syntaxe du fichier ''/etc/sudoers'' avant d'enregistrer celui-ci.
Taper :
visudo
===== Configuration de sécurité élémentaire =====
==== Droits d'exécution à une seule commande ====
Sous la ligne :
Defaults env_reset
Ajoutez :
Defaults timestamp_timeout=0
En mettant le timeout à 0, les droits **root** ne seront plus utilisables dès que vous aurez validé l'exécution de votre commande.
==== Droits d'exécution à un seul user ====
//mon_nom// et //badaboum// sont des exemples, il faut les remplacer par le nom de l'user réel.
Pour réserver l'utilisation de sudo à //mon_nom// seulement, écrivez :
Defaults:mon_nom tty_tickets
Ici, //mon_nom// est le nom que vous utilisez pour vous connecter à votre session.
Ainsi, pour un seul //utilisateur//, il n'est pas nécessaire d'intégrer ce dernier dans le groupe //sudo//
//Merci à //**Asmodée**// pour cette indication précise !// :-D
**DÉCONSEILLÉ** : \\
Si vous voulez ouvrir les droits de **sudo** pour **plusieurs utilisateurs** sans les énumérer ici, écrivez :
Defaults:All tty_tickets
==== sudo UN SEUL utilisateur AVEC mot de passwd demandé ====
//mon_nom// et //badaboum// sont des exemples, il faut les remplacer par le nom de l'user réel.
C'est la configuration préconisée pour tous les utilisateurs de sudo débutant.
Sous la ligne :
root ALL=(ALL:ALL) ALL
écrivez :
badaboum ALL=(ALL:ALL) ALL
(**badaboum** illustrant ici votre nom d'utilisateur **mon_nom**, par exemple...) \\
Ainsi, **badaboum** sera le seul //utilisateur// autorisé à se servir de la commande **sudo** dans un terminal.
== Test de la configuration modifiée ==
Tapez une commande root comme celle-ci par exemple :
sudo fdisk -l
Le mot de passe de l'//user// sera alors demandé et non plus celui de root :
[sudo] password for badaboum: /Taper ici le passwd de cet user//>
Et la commande s'exécute !
== Reboot ==
Autoriser user à exécuter toutes les commandes via sudo mais que sudo reboot ne demande pas le mot de passe (faire 2 lignes) :
nom_user ALL=(ALL) ALL
nom_user ALL=(ALL) NOPASSWD: /usr/sbin/reboot
==== UN SEUL utilisateur SANS mot de passwd demandé ====
**Ceci est une utilisation réservée :**
* aux machines __non connectées__ sur la toile ou dont le serveur proxy intermédiaire est configuré soigneusement par un EXPERT.
* aux EXPERTS, sachant protéger leurs machines par des configurations personnelles en amont.
* aux EXPERTS couvrant des tâches d'Administration exigeant les privilèges **super-utilisateur** pour certaines commandes uniquement non d'un accès **root**. Un usage particulier de [[:doc:systeme:kvm|KVM - Fork de Qemu]] par exemple...
voir : [[:doc:reseau:iptables|iptable]] et autres sécurités évoluées.
Sous la ligne ''root ALL=(ALL) ALL'', écrivez seulement :
badaboum ALL=NOPASSWD: ALL
(**badaboum** étant votre nom d'utilisateur **mon_nom**, par exemple...)
Si vous utilisez la branche testing, soit Wheezy, ou bien Sid, veuillez tenir compte de la modification mentionné plus haut
À partir de maintenant, vous pouvez quitter le shell //root// et faire le reste sous votre //nom// avec **sudo** sans plus taper de mot de passe.
== Exemple ==
Tapez une commande **root** mais sous votre **user** ainsi :
sudo fdisk -l
Et la commande s'exécute sans demande de passwd !
===== Configuration pour plusieurs utilisateurs =====
==== PLUSIEURS utilisateur AVEC mot de passwd demandé ===
Sous la ligne :
Defaults env_reset
Décommentez (ou rédigez) cette commande :
%sudo ALL=(ALL:ALL) ALL
Il vous sera alors possible d'ajouter chaque //utilisateur// que vous voulez au groupe //sudo// pour leur faire partager les droits sudo.
Mettons que vous ayez un pote... un vrai hein... nommé //ploumploum// par exemple. Pour l'ajouter à la commande sudo, il suffira de taper :
adduser ploumploum sudo
Et il y sera pareillement maintenant !
On met la petite soeurette //tagada// ? \\
Alors on le fait ainsi :
adduser tagada sudo
Je vous laisse ajouter l'user //tsointsoin// si vous le voulez bien... ;-)
//Ce tuto est illustré sous la célèbre musique du captnfab ://
ploumploum badaboum tagada tsointsoin...
**Tchibâââ** ! :-D
==== sudo PLUSIEURS utilisateurs SANS mot de passwd demandé ====
**Bien que possible**, il n'est absolument pas recommandé d'offrir les droits **root** automatiquement et __sans mot de passwd__ à tous les utilisateurs.
===== Utilisation de SUDO =====
Il est ainsi possible d'accomplir :
* Moultes configurations de votre système sans maintenir un terminal root permanent.
* De préserver ainsi une certaine sécurité en n'opérant pas de commande accidentelle sous **root**, la demande de mot de passe servant de rattrape-couillonnade...
Il est à noter que si toutes les opérations d'administrations peuvent se faire sous sudo, le passage par su option trait (-) est plus confortable pour des opérations multiples et longues à s'effectuer.
//Merci à //**Y316**// pour sa relecture des tutos et la pertinence de ses interrogations postés sur le forum concernant la terminologie de ceux-ci//. ;-)
==== Exemple ====
On veut donner à deux utilisateurs le droit d'installer/enlever des paquets et de pouvoir éteindre/redémarrer le système.
Le fichier ''/etc/sudoers'' ci-dessous n'est pas complet. Seul les éléments illustrant cet exemple ont été mis en évidence.
Pour ce faire, on éditera le fichier /etc/sudoers ainsi :
visudo
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
# Définition d'un Alias pour deux utilisateurs
User_Alias MESADMINS = jojo,zozo
# Définition de deux Alias de commandes
Cmnd_Alias ETEINDRE = /sbin/shutdown, /sbin/reboot, /sbin/halt
Cmnd_Alias PAQUETS = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude
# Les utilisateurs faisant partie de l'Alias MESADMINS peuvent installer/enlever des paquets et
# redémarrer/éteindre le système.
MESADMINS ALL = ETEINDRE, PAQUETS
=== tâche cron et sudo ===
utiliser sudo dans une tâche cron, par nature non interactive, est une aberration. Si la tâche doit s'exécuter avec les privilèges root, il faut la créer avec root. Merci **raleur** :-)
===== Passer root =====
On peut aussi [[doc:systeme:superutilisateur|passer root]] avec sudo en utilisant l'option -i ainsi:
sudo -i
Le passwd de l'user est réclamé et l'on devient Superutilisateur sur son système. \\
Pour quitter ce privilège, utiliser le raccourci clavier : \\
''Ctrl d''
===== Lien et remerciements =====
Depuis le tuto de captnfab, là:
http://wiki.chezlefab.net/tuto_nix/installation_squeeze#rompre_la_rootine
//nôtre 'pitaine au long cours préféré sur DF !//
Vous l'auriez trouvé vous : "Rompre la rootine" ?
// - Tant de poësie émeut...//
===== Référence =====
[[http://www.debian.org/doc/manuals/debian-reference/ch01.fr.html#_sudo_configuration|La référence Debian]]