expert:sudo_sans_mot_de_passe
no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | expert:sudo_sans_mot_de_passe [2018/11/17 12:53] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | |||
+ | |||
+ | ====== Exécution sous root par sudo ====== | ||
+ | |||
+ | |||
+ | |||
+ | (Edition initiale: Tyrtamos; mise à jour mars 2007) | ||
+ | |||
+ | |||
+ | |||
+ | ===== Problème à résoudre ===== | ||
+ | |||
+ | |||
+ | |||
+ | Comment un administrateur peut-il permettre à un utilisateur normal d' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Références documentaires ===== | ||
+ | |||
+ | |||
+ | |||
+ | * "man sudo" et "man sudoers" | ||
+ | |||
+ | * http:// | ||
+ | |||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | ===== Principe ===== | ||
+ | |||
+ | |||
+ | |||
+ | Il s'agit de modifier le fichier / | ||
+ | |||
+ | |||
+ | |||
+ | Prenons un exemple: | ||
+ | |||
+ | |||
+ | |||
+ | jeanmarc | ||
+ | |||
+ | |||
+ | |||
+ | (le paramêtre de fdisk est un " | ||
+ | |||
+ | |||
+ | |||
+ | Ce qui donne l' | ||
+ | |||
+ | |||
+ | |||
+ | Quand jeanmarc veut exécuter le 1er programme, par exemple, il tape dans une console (sous son login perso): | ||
+ | |||
+ | |||
+ | |||
+ | sudo /sbin/fdisk -l | ||
+ | |||
+ | |||
+ | |||
+ | A noter que sudo ne change pas votre environnement (PATH). Cela veut dire que certaines commandes que root peut déclencher sans préciser son chemin, vous obligeront, vous, à préciser son chemin. | ||
+ | |||
+ | |||
+ | |||
+ | La syntaxe de sudoers est très puissante, et permet de gérer les droits avec beaucoup de finesse: liste d' | ||
+ | |||
+ | |||
+ | |||
+ | Ce fichier / | ||
+ | |||
+ | |||
+ | |||
+ | Attention: avec la suse 10.2, il est venu un nouveau programme yast pour modifier le fichier sudoers: je vous conseille de ne pas l' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Comment modifier le fichier sudoers ===== | ||
+ | |||
+ | |||
+ | |||
+ | Le fichier / | ||
+ | |||
+ | |||
+ | |||
+ | Il est important de n' | ||
+ | |||
+ | |||
+ | |||
+ | Ça marche comme vim, (qui n'est pas très ergonomique...) mais ça fait des choses en plus: verrouillage du fichier pendant l' | ||
+ | |||
+ | |||
+ | |||
+ | ==== Petit rappel du fonctionnement de visudo ==== | ||
+ | |||
+ | |||
+ | |||
+ | Appel dans une console sous root: | ||
+ | |||
+ | |||
+ | |||
+ | visudo | ||
+ | |||
+ | |||
+ | |||
+ | * touche [inser] pour passer en mod insertion | ||
+ | |||
+ | * touche [echap] pour sortir du mode d' | ||
+ | |||
+ | * touche [:] pour passer en mode commande quand on est sorti du mode insertion | ||
+ | |||
+ | * taper [x] en mode commande pour sortir de visudo avec enregistrement | ||
+ | |||
+ | * taper [q!] en mode commande pour sortir de visudo sans enregistrement | ||
+ | |||
+ | |||
+ | |||
+ | et c'est tout ce qu'il y a d' | ||
+ | |||
+ | |||
+ | |||
+ | ==== Vérification de syntaxe ==== | ||
+ | |||
+ | |||
+ | |||
+ | En dehors de visudo, on peut aussi faire vérifier la syntaxe avec: | ||
+ | |||
+ | |||
+ | |||
+ | sudo -v | ||
+ | |||
+ | |||
+ | |||
+ | qui ne renvoie rien quand c'est ok. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Syntaxe du fichier sudoers ===== | ||
+ | |||
+ | |||
+ | |||
+ | la ligne de sudoers est en gros celle-ci (ce qui est entre crochets est optionnel): | ||
+ | |||
+ | |||
+ | |||
+ | utilisateur[, | ||
+ | |||
+ | |||
+ | |||
+ | Signification: | ||
+ | |||
+ | |||
+ | |||
+ | " | ||
+ | |||
+ | |||
+ | |||
+ | * un nom d' | ||
+ | |||
+ | * un nom de groupe (précédé par %: par exemple %users, ou %sousadmin) | ||
+ | |||
+ | * un alias défini précédemment par User_Alias | ||
+ | |||
+ | * une liste d' | ||
+ | |||
+ | |||
+ | |||
+ | Alias d' | ||
+ | |||
+ | |||
+ | |||
+ | User_Alias | ||
+ | |||
+ | |||
+ | |||
+ | " | ||
+ | |||
+ | |||
+ | |||
+ | * un nom de machine du réseau | ||
+ | |||
+ | * une adresse IP de réseau (y compris avec joker: 192.168.0.* peut indiquer toutes les machines du réseau local) | ||
+ | |||
+ | * localhost | ||
+ | |||
+ | * un alias défini précédemment par Host-Alias | ||
+ | |||
+ | * une liste | ||
+ | |||
+ | * ALL pour indiquer n' | ||
+ | |||
+ | |||
+ | |||
+ | Alias d' | ||
+ | |||
+ | |||
+ | |||
+ | Host_Alias | ||
+ | |||
+ | |||
+ | |||
+ | " | ||
+ | |||
+ | |||
+ | |||
+ | Si ce paramêtre n'est pas mentionné, c'est root par défaut. | ||
+ | |||
+ | |||
+ | |||
+ | Mais quand l' | ||
+ | |||
+ | |||
+ | |||
+ | " | ||
+ | |||
+ | |||
+ | |||
+ | On peut créer un alias de programmes à exécuter: | ||
+ | |||
+ | |||
+ | |||
+ | Cmnd_Alias | ||
+ | |||
+ | |||
+ | |||
+ | On peut utiliser un modificateur comme NOPASSWD: | ||
+ | |||
+ | |||
+ | |||
+ | ===== Comment savoir ce à quoi on a droit? ===== | ||
+ | |||
+ | |||
+ | |||
+ | Un utilisateur peut faire (sous son login): | ||
+ | |||
+ | |||
+ | |||
+ | sudo -l | ||
+ | |||
+ | |||
+ | |||
+ | (l' | ||
+ | |||
+ | |||
+ | |||
+ | Cette commande demande le mot de passe de root, à moins qu'on ait modifié sudoers pour que ce soit le mot de passe de l' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Comment faire pour que sudo ne demande plus le mot de passe root ===== | ||
+ | |||
+ | |||
+ | |||
+ | ==== Faire que sudo demande le mot de passe utilisateur (au lieu du mot de passe root) ==== | ||
+ | |||
+ | |||
+ | |||
+ | Sur la suse (ce n'est pas forcément le cas pour les autres distributions), | ||
+ | |||
+ | |||
+ | |||
+ | Pour que ce soit désormais le mot de passe de l' | ||
+ | |||
+ | |||
+ | |||
+ | #Defaults targetpw | ||
+ | |||
+ | #ALL ALL=(ALL) ALL # WARNING! Only use this together with ' | ||
+ | |||
+ | |||
+ | |||
+ | Mais, bien sûr, ça ne vous permet de lancer une commande " | ||
+ | |||
+ | |||
+ | |||
+ | Attention: comme c'est précisé, ne jamais désactiver la 1ère ligne seulement sans la 2ème!!! | ||
+ | |||
+ | |||
+ | |||
+ | ==== Faire comme dans Ubuntu: administrer avec sudo sans mot de passe root ==== | ||
+ | |||
+ | |||
+ | |||
+ | En plus de la modification précédente, | ||
+ | |||
+ | |||
+ | |||
+ | Il suffit d' | ||
+ | |||
+ | |||
+ | |||
+ | %admin | ||
+ | |||
+ | |||
+ | |||
+ | Et, bien sûr, il faut s' | ||
+ | |||
+ | |||
+ | |||
+ | Une fois qu'une commande avec sudo a été exécutée, une autre commande avec sudo peut être exécutée juste après sans nouvelle demande de mot de passe. Ça marche pendant un certain délai qui est de 5minutes par défaut. Si on veut le changer, par exemple pour 15 minutes, il faut ajouter la ligne suivante après les autres lignes " | ||
+ | |||
+ | |||
+ | |||
+ | Defaults passwd_timeout=15 | ||
+ | |||
+ | |||
+ | |||
+ | Une valeur de " | ||
+ | |||
+ | |||
+ | |||
+ | ==== Faire que sudo ne demande plus aucun mot de passe! ==== | ||
+ | |||
+ | |||
+ | |||
+ | Il suffit d' | ||
+ | |||
+ | |||
+ | |||
+ | Ce modificateur est valable jusqu' | ||
+ | |||
+ | |||
+ | |||
+ | Prenons un exemple: | ||
+ | |||
+ | |||
+ | |||
+ | tyrtamos localhost, nesti, 192.168.0.* = (root) | ||
+ | |||
+ | |||
+ | |||
+ | qui veut dire ceci: à condition que j' | ||
+ | |||
+ | |||
+ | |||
+ | ==== A ne surtout pas faire: ==== | ||
+ | |||
+ | |||
+ | |||
+ | Sauf si on a décidé de lui donner les droits " | ||
+ | |||
+ | |||
+ | |||
+ | Il est facile de comprendre que si, par exemple, un utilisateur a le droit de modifier / | ||
+ | |||
+ | |||
+ | |||
+ | Mais cet exemple est simpliste, et il existe des cas où il vaut mieux réfléchir à ce qu'on est en train de faire. Par exemple, que donne à votre avis "sudo sudo / | ||
+ | |||
+ | |||
+ | |||
+ | ===== Et quand on se trompe dans le mot de passe ===== | ||
+ | |||
+ | |||
+ | |||
+ | ==== Comment injurier les pirates ==== | ||
+ | |||
+ | |||
+ | |||
+ | Il y a une instruction amusante à placer dans sudoers: | ||
+ | |||
+ | |||
+ | |||
+ | Defaults insults | ||
+ | |||
+ | |||
+ | |||
+ | A partir de cette instruction, | ||
+ | |||
+ | |||
+ | |||
+ | Mais c'est en anglais, malheureusement: | ||
+ | |||
+ | |||
+ | |||
+ | ==== On a droit à combien d' | ||
+ | |||
+ | |||
+ | |||
+ | On a droit à 3 erreurs par défaut avant que sudo ne vous abandonne à votre triste sort (les erreurs sont enregistrés dans le fichier log: voir ci-dessous). | ||
+ | |||
+ | |||
+ | |||
+ | Ce nombre est modifiable avec l' | ||
+ | |||
+ | |||
+ | |||
+ | ==== Traçage des erreurs ==== | ||
+ | |||
+ | |||
+ | |||
+ | Les erreurs de mot de passe sont enregistrés dans le fichier log: | ||
+ | |||
+ | |||
+ | |||
+ | / | ||
+ | |||
+ | |||
+ | |||
+ | ===== Lancement d'une commande " | ||
+ | |||
+ | |||
+ | |||
+ | Prenons un exemple: | ||
+ | |||
+ | |||
+ | |||
+ | Sur la suse, le répertoire /root n'est visible que par root. Je veux me donner (et à moi seulement) le droit de lister le répertoire /root comme si j' | ||
+ | |||
+ | |||
+ | |||
+ | J' | ||
+ | |||
+ | |||
+ | |||
+ | tyrtamos localhost, nesti, 192.168.0.* = (root) | ||
+ | |||
+ | |||
+ | |||
+ | Je fabrique un script shell (fichier texte) que j' | ||
+ | |||
+ | |||
+ | |||
+ | #!/bin/sh | ||
+ | |||
+ | sudo /bin/ls -l /root | ||
+ | |||
+ | |||
+ | |||
+ | et qui ne fait que de lister le contenu du répertoire root. | ||
+ | |||
+ | |||
+ | |||
+ | Je le place (sous root) dans /usr/bin, avec propriétaire: | ||
+ | |||
+ | |||
+ | |||
+ | Dans une console sous mon login normal, si je fais: | ||
+ | |||
+ | |||
+ | |||
+ | ls -l /root | ||
+ | |||
+ | |||
+ | |||
+ | il me dit que je n'ai pas les droits pour lister le contenu du répertoire root, ce qui est normal. | ||
+ | |||
+ | |||
+ | |||
+ | Mais si je fais maintenant: | ||
+ | |||
+ | |||
+ | |||
+ | lsroot | ||
+ | |||
+ | |||
+ | |||
+ | le listage du répertoire /root apparait, bien que je n'ai pas utilisé sudo, parce que c'est le script du fichier lsroot qui le fait. | ||
+ | |||
+ | |||
+ | |||
+ | On peut aussi faire exécuter le programme par un raccourci que l'on clique sur le bureau: | ||
+ | |||
+ | |||
+ | |||
+ | * sur le bureau: clic à droite -> créer un nouveau -> lien vers une application | ||
+ | |||
+ | * onglet application -> commande = / | ||
+ | |||
+ | * option avancées -> " | ||
+ | |||
+ | * validez | ||
+ | |||
+ | |||
+ | |||
+ | Cliquez sur le raccourci placé sur le bureau: une console s' | ||
+ | |||
+ | |||
+ | |||
+ | On peut aussi pour certains ordres automatiser le lancement du fichier exécutable, | ||
+ | |||
+ | |||
+ | |||
+ | * pour qu'il se lance à l' | ||
+ | |||
+ | * dans le processus d' | ||
+ | |||
+ | * dans les tâches cron (déclenchement temporel) | ||
+ | |||
+ | |||
+ | |||
+ | On pourrait imaginer, par exemple, le montage automatique d'une partition personnelle à l' | ||
+ | |||
+ | |||
+ | |||
+ | * / | ||
+ | |||
+ | |||
+ | |||
+ | Et le script de démontage sera dans (le répertoire shutdown est à créer, mais ce nom est prédéfini: | ||
+ | |||
+ | |||
+ | |||
+ | * / | ||
+ | |||
+ | |||
+ | |||
+ | ===== Conclusion ===== | ||
+ | |||
+ | |||
+ | |||
+ | Dans ces exemples, on voit bien à quel point le fichier / | ||
+ | |||
+ | |||
+ | |||
+ | Beaucoup plus en tout cas que de mettre le bit setuid sur la commande shell elle-même. En plus, le bit setuid ne marche pas sur les scripts shell mais seulement sur les commandes shell | ||
+ | |||
+ | |||
+ | |||
+ | Amusez-vous bien! | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
expert/sudo_sans_mot_de_passe.txt · Dernière modification : 2018/11/17 12:53 de 127.0.0.1