Les actions qu'on peut effectuer sur son système sont de deux types :
L'utilisation courante ne demande pas de privilèges particuliers. Par contre pour les tâches d'administration, qui pourraient endommager le système en cas d'erreur, des droits spécifiques sont requis : les droits de super-utilisateur.
De nombreux moyens permettent d'accéder à ces droits spécifiques, ils sont détaillés dans cet article.
Toute tâche d'administration est sensible, et il n'est pas forcément facile de revenir en arrière.
Il est vivement conseillé de chercher à comprendre les lignes de commande que vous exécuterez, par exemple en utilisant man, car en cas d'erreur, la réinstallation complète du système est parfois l'unique option.
Quand doit-on utiliser pkexec/sudo/su/gksudo/kdesudo ?
sudo
.
On trouve plusieurs fois dans cette documentation, sur le forum ou sur des blogs, l'instruction sudo <commande>
pour exécuter de nombreux programmes en mode graphique avec des privilèges d'administration !
Bien que ceci fonctionne quand même pour de certains programmes, vous devriez prendre l'habitude de lui préférer polkit, gksudo
ou kdesudo
.
Utiliser sudo
pour exécuter des applications en mode graphique peut causer des problèmes dans votre session utilisateur courante, vous empêchant de poursuivre votre travail.
Par exemple gksudo
estimera que le dossier personnel (c'est-à-dire la variable d'environnement $HOME
) pour l'application exécutée en mode privilégiée est à /root
plutôt qu'à /home/<identifiant>
, et copie le fichier .Xauthority
dans un dossier temporaire.
Ceci empêche que des fichiers du dossier personnel de l'utilisateur changent de propriétaire (et donc corrompent la session graphique en cours). En exécutant des applications graphiques avec sudo
directement, cette précaution ne sera pas prise.
Même en restant cantonné à des applications en console, des problèmes de variables d'environnement peuvent ou non survenir en fonction des options utilisées par sudo
.
Voici une commande mettant en évidence ces différences (il est nécessaire que le paquet meld soit installé pour que cette commande fonctionne) :
sudo -s env > /tmp/testenv_sudo_-s ; sudo -i env > /tmp/testenv_sudo_-i ; sudo su -c env > /tmp/testenv_sudo_su ; meld /tmp/testenv_sudo_* && rm /tmp/testenv_sudo_*
Les principales différences observées, dans le cas où ces commandes sont lancées par l'utilisateur nommé foo :
sudo -s | sudo -i | sudo su | |
---|---|---|---|
HOME= | /home/foo | /root | /root |
PWD= | /home/foo | /root | /home/foo |
PATH= | /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin | /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games | /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games |
fichier(s) exécuté(s) | /home/foo/.bashrc | /etc/environment, /root/.login, /root/.profile, /root/.bashrc | /etc/environment, /root/.bashrc |
On voit donc que ces commandes ont une influence différente sur les variables d'environnement, et cela peut avoir des conséquences inattendues (compilations, exécution de scripts, etc.).
Les avantages de l'emploi de sudo
, par opposition à l'emploi direct d'un unique compte super-utilisateur (root
), sont nombreux pour une utilisation dans un environnement domestique ou de PME/PMI :
root
par des mauvaises habitudes ;sudo
conserve une trace de toutes les commandes exécutées. Si un problème apparaît, vous pourrez toujours consulter ce journal afin de retrouver la commande ayant causé le problème ;root
et essaieront de pirater celui-ci d'abord. Ils ne connaissent pas les identifiants des autres utilisateurs de votre ordinateur ;root
;sudo
peut être configuré avec une politique bien plus affinée.Le « super-utilisateur » ayant TOUS les droits sur le système, l'utilisation de ses privilèges peut être TRÈS dangereuse, pour plusieurs raisons :
sudo
.
Non : le modèle de sécurité à la base est le même, et les deux modèles partagent une même faiblesse. Tout utilisateur utilisant su root
ou sudo
pour effectuer des tâches administratives doit être considéré comme un utilisateur privilégié : si le compte de l'utilisateur est compromis par un attaquant, alors l'attaquant peut aussi obtenir une élévation de privilèges 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 super-utilisateur.
sudo
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 exécuter une commande unique, alors que su root
est souvent utilisé pour exécuter un terminal root
et exécuter 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.
Dans l'immense majorité des cas où il vous sera demandé d'effectuer une action en ligne de commande (dans un terminal) avec les droits d'administration, il vous de faire précéder votre commande par le mot sudo
.
Ouvrez donc une fenêtre de terminal comme indiqué ici.
Exemple, pour modifier un fichier avec l'éditeur de texte nano, la commande serait :
sudo nano /chemin/vers/mon_fichier
sudo
pour lancer des logiciels graphiques, soit ça ne marchera pas, soit ça risquera de causer des bugs importants et des failles de sécurité.
Après la saisie d'une ligne de commande commençant par sudo
, il vous sera demandé de taper votre mot de passe, mais les caractères ne s'afficheront pas à l'écran et il n'y aura pas non plus de petites étoiles *
, ce qui est normal. Tapez tout de même votre mot de passe et validez avec la touche Entrée
.
La commande demandée s'exécutera alors avec les privilèges du super-utilisateur.
Si vous n'avez pas entré un mot de passe erroné, votre programme se lancera en mode privilégié. En cas d'erreur dans votre mot de passe, recommencez les opérations ci-dessus.
Lors du succès de l'authentification, les tâches administratives sont débloquées pour une durée de quelques minutes : votre mot de passe ne vous sera pas redemandé dans les minutes qui suivent pour effectuer d'autres tâches administratives.
sudo
pose a priori des problèmes pour la redirection de flux dans une console. Par exemple, la redirection suivante ne fonctionnera pas :
utilisateur@ordinateur:~$ sudo echo 2 > /proc/acpi/thermal_zone/ATF0/polling_frequency
La raison de cet échec est que sudo
n'exécute que la première tâche (echo 2
) avec l'identité empruntée ; la redirection, elle, est effectuée en mode utilisateur uniquement.
La solution, pour contourner cette limitation, est d'appeler un nouvel interpréteur de commandes et de lui faire exécuter votre redirection de flux. Par exemple :
utilisateur@ordinateur:~$ sudo sh -c 'echo 2 > /proc/acpi/thermal_zone/ATF0/polling_frequency'
De cette manière, c'est tout l'interpréteur sh
et la commande passée en argument qui est exécutée avec l'identité empruntée.
L'ensemble des actions exécutées à travers l'utilitaire sudo
– qu'elles s'accomplissent avec succès ou échec – sont journalisées. Elles sont inscrites dans le fichier de journal /var/log/auth.log.
Utiliser sudo
pour exécuter une seule commande ne cause pas un réel désagrément, mais il peut être désagréable de l'utiliser pour exécuter une longue procédure nécessitant plusieurs interventions en mode super-utilisateur (root
).
L'ouverture d'un terminal en mode root
permet d'éviter d'avoir à appeler sudo
à chacune des étapes de cette procédure, sans avoir à activer l'accès au compte d'utilisateur root
.
sudo
(sinon l'ouverture du terminal root
lui-même). Il est déconseillé d'ouvrir un terminal root
.
Pour vous servir d'un terminal root
:
utilisateur@ordinateur:~$ sudo -i
root
: root@ordinateur:~# exit
ou "Ctrl d
"
/etc/passwd
pour l'utilisateur cible (root par défaut)./etc/passwd
pour l'utilisateur cible (root par défaut). Cela signifie que des fichiers spécifiques tels que .login ou .profile seront lus par le shell ainsi lancé.
Seuls les administrateurs sont habilités à effectuer des tâches administratives à travers l'utilitaire sudo
. Pour augmenter les privilèges accessibles à un utilisateur, vous devez vous-même avoir d'abord accès à un compte administrateur.
Pour assigner le rôle d'administrateur à un autre compte d'utilisateur :
sudo adduser <identifiant> sudo
où <identifiant>
doit être remplacé par l'identifiant du compte d'utilisateur (sans les <chevrons>) auquel des privilèges supplémentaires doivent être accordés.
On peut configurer plus finement les privilèges accordés par l'utilitaire sudo
afin d'autoriser ou refuser l'exécution de tâches privilégiées. Plus que simplement autoriser l'exécution de toutes les tâches administratives à un groupe d'utilisateurs par l'authentification par mot de passe, sudo
peut être paramétré pour permettre à un utilisateur particulier ou un groupe d'utilisateurs particulier d'exécuter une ou des tâches bien précises, avec ou sans saisie du mot de passe.
D'autres paramètres, tels le délai d'attente avant qu'une ré-authentification soit nécessaire, l'endroit où est enregistré le journal d’événements et le niveau de courtoisie de sudo
, sont aussi paramétrables.
Reportez-vous à cette page pour découvrir la configuration avancée avec /etc/sudoers/
Certains logiciels, comme la commande flatpak, la logithèque GNOME, divers gestionnaires de paquets, des éditeurs de partitions, ou les paramètres système vous demanderont parfois automatiquement votre mot de passe pour certaines actions. Il s'agit de logiciels ayant été prévus pour supporter une élévation de privilèges par polkit.
polkit est un logiciel moderne actuellement privilégié par les développeurs d'environnements graphiques grâce à la sécurité qu'il fournit, en effet il fonctionne selon le principe suivant : un programme (démon) s'exécute en arrière-plan (sans fenêtre), et dispose des droits root. Les applications sont invitées à lui demander les droits nécessaires pour effectuer des opérations spécifiques. Cela évite de lancer des programmes graphiques en tant que super-utilisateur, ça évite également d'utiliser sudo
pour des commandes n'en ayant pas besoin, la sécurité est donc accrue, et moins d'actions sont requises de la part de l'utilisateur (ce sont les applications qui demandent les droits, pas l'utilisateur).
Parmi les programmes capables d'utiliser PolKit, on peut citer :
Si votre compte est paramétré correctement comme étant administrateur, l'action demandée pourra alors s'effectuer sans problème (sinon, référez-vous à ceci).
À partir d'Ubuntu 17.10, dans l'explorateur de fichiers Nautilus, on peut faire précéder l'adresse (accessible en faisant "Ctrl L
") par le préfixe admin:/
/
/
(exemple : admin:/
/
/
/usr/share/applications/
), le mot de passe sera alors demandé, et l'emplacement en question sera ouvert avec les droits d'administration. Vous pourrez notamment y modifier des fichiers avec gedit.
Pourtant, remarquez que Nautilus conserve la configuration de l'utilisateur courant (signets, thèmes, …) : polkit agit comme un filtre très précis, qui ne prend à root que ses privilèges de lecture et d'écriture dans les dossiers, sans prendre sa configuration.
En faisant précéder une commande par pkexec
, on peut la lancer avec des privilèges élevés. Exemples :
pkexec synaptic
pkexec apt update
Tous les programmes ne fonctionneront pas aussi facilement, et notamment les programmes graphiques, qui nécessitent quelques précautions pour se lancer proprement (paragraphe ci-dessous).
Pour se lancer via pkexec, les logiciels graphiques ont besoin de quelques variables d'environnement, qu'il faut préciser dans la commande.
Pour un hypothétique programme nommé "bidule", saisissez la commande suivante dans un terminal :
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY bidule
Le programme devrait se lancer en tant qu'administrateur.
Ces façades graphiques ne sont plus utilisées couramment depuis Ubuntu 13.10, et peuvent donc rencontrer des problèmes avec certaines applications.
Lancer des applications graphiques (c'est-à-dire ayant une fenêtre) en tant que super-utilisateur n'est pas une bonne pratique : il est toujours préférable de rechercher comment atteindre le même but via un utilitaire en ligne de commande. Si toutefois vous n'avez pas d'alternative, notez que l'usage du sudo
utilisé pour les lignes de commande n'est pas approprié dans ce cas : il y a entre autres un risque d'écrasement de vos configurations.
Il est donc préférable d'utiliser un utilitaire approprié à votre environnement. Ces utilitaires ne sont pas installés par défaut, il faut les ajouter. Les plus répandus sont gksudo
pour Ubuntu, Xubuntu, Ubuntu MATE, Ubuntu Budgie ou Lubuntu ; ou bien kdesudo
pour Kubuntu ou l'environnement LXQt.
L'utilitaire gksudo (ou gksu) n'est pas installé par défaut dans Ubuntu.
Installez donc le paquet gksu pour l'obtenir.
Depuis une invite d'exécution de programme (Alt+F2) ou depuis un terminal, saisissez le nom du programme à exécuter, en le faisant précéder de "gksudo". Exemple :
gksudo mousepad
Validez la commande ; une boîte de dialogue pour la saisie de votre mot de passe s'affiche. Saisissez le mot de passe de votre compte d'utilisateur.
Si vous n'avez pas entré un mot de passe erroné, votre programme se lancera en mode privilégié. En cas d'erreur dans votre mot de passe, recommencez les opérations ci-dessus.
Lors du succès de l'authentification, les tâches administratives sont débloquées pour une durée de quelques minutes : votre mot de passe ne vous sera pas redemandé dans les minutes qui suivent pour effectuer d'autres tâches administratives.
L'utilitaire kdesudo n'est pas installé par défaut dans Kubuntu.
Installez donc le paquet kdesudo pour l'obtenir.
Depuis une invite d'exécution de programme (Alt+F2) ou depuis un terminal, saisissez le nom du programme à exécuter, en le faisant précéder de "kdesudo". Exemple :
kdesudo "kate"
Utilisez les guillemets anglais pour entourer le nom de votre programme, particulièrement si celui-ci utilise plusieurs arguments.
Validez la commande ; une boîte de dialogue pour la saisie de votre mot de passe s'affiche. Saisissez le mot de passe de votre compte d'utilisateur.
Si vous n'avez pas entré un mot de passe erroné, votre programme se lancera en mode privilégié. En cas d'erreur dans votre mot de passe, recommencez les opérations ci-dessus.
Lors du succès de l'authentification, les tâches administratives sont débloquées pour une durée de quelques minutes : votre mot de passe ne vous sera pas redemandé dans les minutes qui suivent pour effectuer d'autres tâches administratives.
Si le besoin d'un login en tant que root
se fait ressentir, la meilleure alternative est de le simuler avec la commande suivante :
sudo -i
Il est possible de sortir de ce shell avec le raccourci "Ctrl d
" ou avec la commande suivante :
exit
À vos risques et périls, donc : pour activer le compte root (c'est-à-dire lui donner un mot de passe), on peut utiliser la commande suivante:
sudo passwd root
Si vous pensez avoir besoin d'un compte root activé pour réaliser une certaine action, consultez un canal de support officiel (irc, liste de diffusion, forum, …) avant de l'activer, afin de vous assurez qu'il n'y a pas une meilleure méthode pour réaliser cette action.
Pour désactiver un compte root précédemment activé:
sudo usermod -p '!' root
Certains programmes ou services affirmeront avoir besoin de comptes « super-utilisateurs », par exemple c'est généralement le cas avec des systèmes de bases de données (comme MySQL ou MariaDB).
Ce compte super-utilisateur est indépendant et distinct de celui du système d'exploitation : il est spécifique au programme ou service en particulier, vous devez paramétrer ce compte avec les outils que le programme fournit. Consultez pour cela les documents d'aide relatifs à l'application concernée.
Contributeurs : AlexandreP, Chatalors, Damocles, Ju, eagle08, roschan , …