Ceci est une ancienne révision du document !
Sudo : effectuez des tâches administratives
sudo
est l'outil permettant à un utilisateur (par défaut, le premier utilisateur, celui qui a été créé lors de l'installation du système) d'exécuter des tâches d'administration. Oui c'est le mot de passe de l'utilisateur actif dans la session qu'il faut saisir. Et c'est à dessein…
Devant le nombre impressionnant1) de personnes affectant un mot de passe au compte root2) sous Ubuntu, essayons d'expliquer comment le système gère les droits d'administration et expliquons le fonctionnement de sudo
et gksudo
/kdesu
.
Ce document s'adresse à vous si vous vous êtes déjà exclamé :
- "Comment effectuer des tâches administratives sous Ubuntu ?"
- "À l'installation, on ne m'a pas demandé le mot de passe root"
- "
su
ne fonctionne pas, Ubuntu c'est compliqué" - "Ubuntu c'est nul, je ne peux pas faire facilement mes tâches d'administration comme sous d'autres distributions."
Vous devriez comprendre le pourquoi du comment…
À propos du superutilisateur...
- On a besoin d'un compte utilisateur privilégié afin de réaliser certaines tâches particulières (souvent des tâches administratives et sensibles, pouvant corrompre le système). C'est à cela qu'est dévolu le compte superutilisateur, ou administrateur.
- Le système d'exploitation a également besoin d'un compte privilégié (le compte système) pour faire tourner certains de ses propres constituants (services ou démons).
- Sur les systèmes d'exploitation "à contrôle d'accès discrétionnaire" (VMS, Windows NT/2000/XP, …), le compte système et le compte administrateur sont différents. Par contre, Unix, depuis sa création en 1969, n'a jamais mis en place cette différence. root est à la fois le superutilisateur du système, et le système lui-même.
... et de sudo
Toutefois, certaines situations peuvent amener l'utilisateur à effectuer des tâches administratives, particulièrement lors de la résolution de problèmes de fonctionnement du système. L'utilitaire sudo
(pour Substitute User do) permet à un administrateur système de donner à un utilisateur (ou un groupe d'utilisateurs) la possibilité d'exécuter une ou toutes les commandes en tant que superutilisateur, tout en gardant une trace des commandes tapées et des arguments. (Plus d'informations à propos de ''sudo'')
Par défaut, le compte superutilisateur n'a pas de mot de passe sous Ubuntu. Sous les systèmes unix (dont Linux fait partie), on ne peut pas se connecter directement à un compte utilisateur sans mot de passe. Ceci signifie donc que vous ne pouvez pas vous connecter en tant que root ou utiliser la commande su root
3). L'installateur de Ubuntu configure plutôt l'utilitaire sudo
de façon à ce que l'utilisateur créé durant l'installation puisse effectuer toutes les tâches d'administration nécessaires.
Autrement dit, vous pouvez utiliser la commande sudo
pour effectuer les tâches nécessitant les privilèges du superutilisateur. Tous les programmes d'administration dans les menus d'applications utilisent un système graphique associé à sudo
(gksudo
sous GNOME et kdesu
sous KDE) vous demandant votre mot de passe pour s'exécuter ; que ce soient gksudo
, kdesu
ou sudo
dans un terminal qui vous demandent un mot de passe, c'est VOTRE mot de passe utilisateur qui est requis.
Aucun mot de passe n'est associé au compte root et root n'en a pas besoin.
Utilisation
L'utilitaire sudo
s'utilise en ligne de commande, dans un terminal. Il sert à exécuter, en mode superutilisateur, des commandes ou des applications en console. Pour lancer des applications graphiques avec les privilèges d'administration, il est de mise d'utiliser les pendants graphiques gksudo
, pour GNOME, ou kdesudo
, pour KDE.
sudo
sudo
s'utilise de la manière suivante :
$ sudo <commande>
Ainsi, vous devrez faire précéder chacune de vos commandes à exécuter en mode superutilisateur de sudo
.
Le mot de passe demandé est celui de l'utilisateur courant. La commande sera exécutée si le mot de passe entré est correct et que l'utilisateur courant peut effectuer des tâches d'administration. Le mot de passe est mémorisé pour une durée de 15 minutes ; au bout de ce laps de temps, il faudra entrer de nouveau le mot de passe. Pour terminer la session sudo
avant la fin des 15 minutes, entrez la commande :
$ sudo -k
Lorsque de nombreuses commandes sont à entrer, vous pouvez ouvrir un terminal en mode superutilisateur.
gksudo
gksudo
est le pendant graphique de sudo
pour l'environnement GNOME. Il est utilisé par toutes les applications du menu Système → Administration, nécessitant les droits d'administration afin d'être lancées. Il s'utilise de la même façon que sudo
, c'est-à-dire que gksudo
doit précéder la commande ou l'application à lancer.
gksudo
peut être utilisé, par exemple, avec un lanceur, pour lancer une application qui a besoin des droits du superutilisateur pour s'exécuter. Lorsque gksudo
est appelé, une fenêtre de saisie de mot de passe est affichée à l'écran. Tout comme pour sudo
, c'est le mot de passe de l'utilisateur courant qui est requis. L'application ou la commande ne sera exécutée que si le mot de passe est correct et que l'utilisateur peut exécuter des tâches d'administration.
Pour éditer par exemple un sources.list à partir d'un terminal il faut faire :
$ gksudo gedit /etc/apt/sources.list
Autre exemple, pour lancer le navigateur de fichier Nautilus avec le droit de copier ou de supprimer les fichiers systèmes, il faut taper dans le terminal :
gksudo nautilus
Attention : exécuter par un simple double-clic une commande ou un programme avec les privilèges d'administration est potentiellement dangereux ! Par exemple, lancer Nautilus avec les droits d'administration est vraiment risqué : une pression accidentelle sur la touche Suppr alors qu'un fichier ou un dossier vital au système d'exploitation est sélectionné pourrait rendre le système inutilisable !
À noter que vous devriez toujours utiliser ''gksudo'' pour exécuter des applications graphiques, même si l'utilisation de sudo
fonctionne dans un terminal et que vous ne verrez généralement aucun problème. "Généralement" n'est pas "jamais" : vous vous mordrez les doigts quand vous rencontrerez un cas particulier, tel Firestarter.
kdesudo
kdesudo
est le pendant graphique de sudo
pour l'environnement KDE. Il s'utilise de la même façon que gksudo
pour GNOME. Pour Kubuntu/KDE, il est d'autant plus important de ne pas affecter de mot de passe au compte root.
Quand utiliser sudo ou gksudo/kdesudo ?
On ne devrait jamais utiliser sudo
pour exécuter une application graphique (cf. la documentation anglophone). On devrait toujours utiliser gksudo
ou kdesu
pour exécuter de tels programmes.
La règle est donc simple :
- Utiliser
sudo
pour les commandes et les programmes fonctionnant dans une console ; - Utiliser
gksudo
oukdesudo
pour les programmes graphiques.
À l'heure actuelle, on retrouve de nombreuses fois dans cette documentation et dans le forum la commande sudo gedit
pour exécuter l'éditeur de texte gEdit avec les droits d'administration. Bien qu'elle fonctionne, il serait grandement préférable de lui substituer gksudo gedit
(sous Ubuntu) et kdesudo kate
(sous Kubuntu). Utiliser sudo
pour exécuter des applications en mode graphique peut causer des problèmes à la session graphique courante, vous empêchant de poursuivre votre travail.
Les avantages et inconvénients de sudo
Avantages
Les bénéfices qu'apportent la désactivation du compte root par défaut incluent :
- L'installateur doit poser moins de questions. Ceci est particulièrement important pour le nouvel arrivant, qui n'est peut-être pas au courant de l'existence du compte système ;
- Les usagers n'ont pas à se souvenir d'un mot de passe supplémentaire, qu'ils peuvent facilement oublier. Certains utilisateurs ayant activé le compte root notent le mot de passe sur un papier, afin de le retrouver en cas d'oubli ; ceci constitue un sérieux risque de sécurité, car n'importe qui trouvant ce papier peut prendre l'identité de root ;
- Cela évite le comportement du "Je peux tout faire sur ma machine" – avant d'effectuer une action d'administration, le système vous demande votre mot de passe, ce qui devrait vous faire réfléchir aux conséquences de votre action ;
sudo
conserve une trace de toutes les commandes exécutées (dans le fichier de journal /var/log/auth.log). Si un problème apparaît, vous pourrez toujours consulter ce journal afin de retrouver la commande ayant causé le problème ;- Tous les pirates tentant de pénétrer par la force brute votre système savent qu'il existe un compte appelé root et essaieront de pirater celui-ci d'abord. Ils ne connaissent pas les identifiants des autres utilisateurs de votre ordinateur ;
- Ceci permet un transfert rapide des droits d'administration, autant pour du long que pour du court terme, par le simple ajout ou retrait d'un utilisateur dans le groupe d'administration, le tout sans compromettre le compte root ;
sudo
peut être configuré avec une politique bien plus raffinée.
Mythes
sudo
n'est-il pas moins sécurisé quesu root
?- Le modèle de sécurité à la base est le même, et les deux systèmes partagent une même faiblesse. Tout utilisateur utilisant
su root
ousudo
doit être considéré comme un utilisateur privilégié. Si le compte de l'utilisateur est compromis par un attaquant, celui-ci peut aussi obtenir les privilèges d'administration et compromettre le système d'exploitation. Les utilisateurs ayant les droits d'administration doivent être protégés avec les mêmes soins que le compte système.
Sur une note plus ésotérique, on remarque quesudo
encourage la modification des habitudes de travail, qui peuvent provoquer un impact positif sur la sécurité du système d'exploitation.sudo
est habituellement utilisé pour lancer une commande unique, alors quesu root
est souvent utilisé pour lancer un terminal root et lancer des multiples commandes. L'approche de sudo réduit la possibilité qu'un terminal root soit laissé ouvert indéfiniment sur le poste de travail et encourage l'utilisateur à minimiser son utilisation des privilèges d'administration.
Configuration
La configuration de sudo
se fait dans le fichier /etc/sudoers. Ce fichier doit être modifié impérativement avec la commande visudo
; si vous éditez le fichier directement, il est possible que votre système refuse de fonctionner correctement par la suite. Avec 'visudo' le système vérifie la syntaxe du fichier avant d'accepter les modifications.
~$ sudo visudo
Par défaut, vous vous retrouverez avec vi, mais vous pouvez modifier l'éditeur à utiliser :
~$ EDITOR="/bin/nano" sudo visudo ~$ EDITOR="/usr/bin/gedit" sudo visudo
ou (sur Hardy Heron)
~$ export EDITOR=gedit && sudo -E visudo
par exemple.
~$ EDITOR="/usr/bin/gedit" sudo visudo [sudo] password for yannick: >>> sudoers file: syntax error, line 21 <<< What now?
Appuyez sur entrée, vous verrez :
Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
Tapez e pour éditer le fichier à nouveau, ou x pour quitter sans modifier le fichier. Ne tapez sur Q que si vous savez vraiment ce que vous faites…
Ajout des privilèges super-utilisateur à un utilisateur
sudo adduser <login> admin
Il existe également d'autres groupes relatifs à l'administration du système dont "adm" qui autorise la lecture des fichiers de log sans avoir à utiliser sudo, et "staff" qui donne des droits d'écriture dans /usr/local et /home (un sudo bridé en quelque sorte).
Options
La configuration de sudo est définie dans le fichier /etc/sudoers.
'Insultes'
Un peu de bonne humeur grâce à sudo, si vous modifiez la ligne :
Defaults !lecture,tty_tickets,!fqdn
en ajoutant insults :
Defaults !lecture,tty_tickets,!fqdn,insults
Vous affichera un autre message que le sempiternel Sorry, try again lorsque vous vous trompez dans le mot de passe 4) Ce qui donne :
sudo cat /etc/sudoers Password: Where did you learn to type? Password:
Toujours demander le mot de passe
Pour ceux qui veulent profiter d'une sécurité accrue et appliquer un délai nul à sudo, vous pouvez modifier la ligne :
Defaults !lecture,tty_tickets,!fqdn
en ajoutant timestamp_timeout=0 :
Defaults !lecture,tty_tickets,!fqdn,timestamp_timeout=0
Sudo vous demandera désormais votre mot de passe à chaque opération. Au besoin, vous pouvez ouvrir un terminal root et effectuer plusieurs opérations d'administration sans devoir taper un mot de passe à chaque coup grâce à cette superbe commande :
sudo -i
Commandes sans mots de passe
Ne pas généraliser à plus de commandes
Définissons les commandes autorisées par exemple less :
Cmnd alias specification Cmnd_Alias LESS = /usr/bin/less
Puis éditons les privilèges du groupe admin 5) :
# Members of the admin group may gain root privileges %admin ALL=(ALL) ALL, NOPASSWD: LESS
Voilà dorénavant un sudo less ne demandera pas de mot de passe aux membres du groupe admin 6) .
Utilisation avancée
Pour une configuration poussée reportez-vous à la page de manuel sur sudoers 7)
Toutes les commandes passées en sudo sont consignées dans le fichier /var/log/auth.log consultable via l'outil Système / Administration / Visionneur de journaux système
Trucs & Astuces
Pseudo-root : une console superutilisateur ?
Utiliser sudo
pour exécuter une commande ne pose pas un réel problème. Toutefois, il peut être plutôt désagréable de l'utiliser pour lancer une longue procédure nécessitant plusieurs interventions en mode superutilisateur. Dans ces cas, vous pouvez lancer un terminal superutilisateur, qui vous permettra alors de prendre l'identité de root. Vous n'aurez donc plus besoin de saisir sudo
devant chacune des actions à effectuer pour la durée de cette session en console. Toutefois, aucune trace des actions posées n'est conservée en mémoire. Il est déconseillé d'ouvrir un terminal superutilisateur.
Pour entrer en mode superutilisateur, saisissez la commande suivante dans un terminal :
sudo -s
ou
sudo -i
Effectuez ensuite les commandes que vous souhaitez, puis déconnectez-vous comme depuis n'importe quel compte, c'est-à-dire en tapant :
exit
ou le raccourci clavier équivalent, Ctrl+d.
Différences entre sudo -i, sudo -s, sudo su etc...
Différences entre sudo -i, sudo -s et sudo su:
Avec sudo -s, le répertoire HOME est toujours de celui de l'utilisateur alors qu'il devient /root avec sudo -i et sudo su. Seul sudo -s permet de récupérer les variables que vous avez exportées dans votre .bashrc (ici HISTCONTROL et HISTIGNORE par exemple). Seul sudo su permet de récupérer les variables d'environnement globales définies dans /etc/environment (ici NULLMAILER et PATH par exemple).
Récupérer ses variables d'environnement grâce à l'option -E (sudo -E -s et sudo -E su)
L'option -E permet de préserver ses variables d'environnement :
Ici on conserve avec -E son .bashrc, son .profile, ses variables globales de /etc/environment, sauf PATH pour sudo -E -s.
Redirection de flux
Sudo pose a priori des problèmes pour les redirections de flux. Ainsi, la redirection suivante ne fonctionnera pas :
sudo echo 2 > /proc/acpi/thermal_zone/ATF0/polling_frequency
car le sudo s'appliquera à la première commande, echo, mais pas à la redirection, qui se fait vers un fichier avec les droits superutilisateur.
Solution :
sudo sh -c 'echo 2 > /proc/acpi/thermal_zone/ATF0/polling_frequency'
De cette manière c'est la commande sh qui est appelée avec les droits superutilisateur, et l'option -c de sh permet d'exécuter la chaîne suivante (entre les deux ').
Autre solution :
echo 2 | sudo tee /proc/acpi/thermal_zone/ATF0/polling_frequency
tee permet d'écrire la redirection à la fois à l'écran et dans un fichier. Si l'on veut ajouter à la fin du fichier il faut alors utiliser l'option -a (tee -a /mon/fichier). Cette méthode permet de ne pas lancer un nouvel interpréteur.
Problèmes
Fichier /etc/sudoers corrompu
Il peut arriver lors de vos manipulations que vous corrompiez le fichier /etc/sudoers, il vous affichera alors quelque chose du genre :
sudoers file: syntax error, line 19 sudo: parse error in /etc/sudoers near line 19
Vous pouvez aussi avoir modifié par mégarde les droits du fichier :
sudo: bad permissions (ou autre)
Dans ce cas vous ne pouvez le corriger puisque vous avez besoin de sudo pour le modifier. Vous avez alors plusieurs possibilités pour retrouver des droits d'administrateur et le corriger :
- Utiliser un live-cd
Dans ce cas, aucun problème, insérez le CD et redémarrez.
- Redémarrer en rescue mode
Ce mode est disponible à l'écran de Grub lors du démarage de l'ordinateur. Il vous enverra directement en mode texte et vous connectera en tant qu'administrateur.
Une fois que vous êtes connecté, si c'est juste un problème de droits vous pouvez les corriger directement avec chmod et démarrer en mode normal avec la commande :
init 2
Sinon, si vous avez les compétences nécessaires pour modifier le fichier /etc/sudoers avec l'éditeur vi :
export EDITOR=vi && sudo visudo
Esc puis a permettent de rentrer en mode édition puis ESC suivi de :wq permet de sauver vos modifications (write) et de quitter
Si en revanche vous avez besoin d'aide et comme en mode rescue vous ne pouvez pas lancer votre client IRC ou votre navigateur. Je propose donc de réactiver temporairement le compte root :
passwd -d root
Démarrez ensuite le système complet avec :
init 2
Maintenant connectez-vous en root :
su -
Vous pouvez maintenant corriger les erreurs avec visudo Une fois le problème réglé, désactivez le compte root :
sudo passwd -l root
Si cette dernière commande a fonctionné, tout est rentré dans l'ordre :)
Si jamais ces deux méthodes n'ont pas marché, il reste une solution avec le Desktop CD :
- Amorcez votre ordinateur sur une session live à l'aide du Desktop CD d'Ubuntu 6.06 LTS ou d'un liveCD d'une ancienne version d'Ubuntu ou d'une autre distribution Linux
- Une fois la session live chargée, ouvrez un terminal grâce au raccourci Terminal du menu Applications → Accessoires
- Créez un point de montage pour votre partition racine d'Ubuntu et montez cette partition :
$ sudo mkdir /mnt/racine $ sudo mount -t type /dev/hdxy /mnt/racine
type
est le système de fichiers de votre partition racine (généralement, ce seraext3
oureiserfs
)/dev/hdxy
doit être remplacé par le nom de périphérique de votre partition racine
Si vous ignorez les informations concernant vos partitions, l'utilitairefdisk
peut vous aider :$ sudo fdisk -l
/mnt/racine
est le point de montage de la partition racine
- Exécutez gEdit avec les droits d'administration afin de modifier le fichier
/mnt/racine/etc/sudoers
:$~ EDITOR="/usr/bin/gedit" sudo visudo
- Une fois les modifications appliquées au fichier, enregistrez-le !
- Réamorcez votre ordinateur sur votre session normale sous Ubuntu.
Perte du privilège de sudoer
Il arrive de ne plus pouvoir exécuter de commandes en sudo, notamment en effectuant certaines manipulations. Par exemple :
$ usermod -G un_groupe nom_utilisateur
Cette commande va remplacer les groupes de l'utilisateur par ceux listés dans la commande, perdant ainsi le groupe admin. Pour éviter cela, vous pouvez ajouter l'option -a ou –append après le -G.
Lorsque l'on essaye d'exécuter une commande avec sudo ensuite, on obtient le message suivant:
nom_utilisateur is not in the sudoers file. This incident will be reported.
La solution est de redémarrer le poste et de lancer grub (appuyer sur la touche échap plusieurs fois de suite au moment du démarrage s'il ne s'affiche pas tout seul) puis de choisir le mode rescue. On est alors automatiquement connecté en root. Le but est alors de se rajouter dans le groupe admin avec la commande suivante :
$ addgroup username admin
Votre nom d'utilisateur doit alors apparaître en exécutant la commande :
$ grep admin /etc/group
Pour revenir au mode graphique, il suffit d'appuyer de nouveau sur la touche échap.
Si cela ne fonctionne toujours pas, c'est que votre fichier /etc/sudoers est corrompu.
Exceptions
Si vous ne trouvez pas comment faire, merci d'ajouter une entrée sur le forum et de mettre un lien ici.
Dans certain cas une authentification sans mot de passe est utile voir ici
Sous unix tout est fichier, les périphériques aussi, /dev est le dossier correspondant aux périphériques, /proc celui réservé aux processus et commentaires du noyau par exemple /proc/cpuinfo donne les infos sur votre processeur (infos que le noyau a découvert au boot) impossible de le modifier donc. Filesystem_Hierarchy_Standard pour plus d'informations.
Certains fichiers de /proc peuvent être édités, mais pas tous, directement ou avec sysctl (voir man sysctl.conf).
Systeme : sudo: timestamp too far in the future
Ceci vous arrive très certainement au même moment que lors du passage à l'heure d'hiver !
Pour cause la date/heure du système recule d'1 heure, sans prendre ses précautions pour sudo
Dans ce cas il convient de redémarrer en mode recovery, et de supprimer le répertoire sudo de l'utilisateur :
rm -rf /var/run/sudo/«userlogin»
Ensuite on doit pouvoir faire sudo
en tant que simple utilisateur
Webmin
Pour mettre un mot de passe à root, mais uniquement pour webmin :
sudo /usr/share/webmin/changepass.pl /etc/webmin root mot_de_passe_pour_webmin
MySQL
Pour phpMyadmin aussi donc…
sudo mysqladmin -u root password nouveau_mot_de_passe
root est un utilisateur du serveur MySQL. Même s'il porte le même nom, il ne correspond pas à celui du système Linux Ubuntu.
Plus de détails sur la FAQ mySQL.
Slogans
Ci-dessous une liste non exhaustive de slogans visant à décourager l'emploi du compte root :
- Sudo pour administrer sa machine sans se faire SUer
- Si j'avais SU, je s'rais pas venu
- Fais moi un sandwich.
- Quoi ? t'as qu'à te le faire toi même.
- sudo fais moi un sandwich.
- OK.
*pour arrêter de rooter et augmenter votre espérance de vie, un geste simple tous les jours : sudo
(illustration de Randall Munroe sous licence CC)
su
(pour "switch user") permet de changer d'identité, de prendre l'identité d'un autre utilisateur. Vous ne pouvez pas utiliser la commande su
pour prendre l'identité du superutilisateur (su root
). Toutefois, vous pouvez l'utiliser sans problème pour prendre l'identité d'un autre utilisateur enregistré de votre ordinateur (par exemple: su bob
).