Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Exécution de commandes en tant que superutilisateur avec sudo

Exécution de commandes en tant que superutilisateur avec sudo

Date de publication : 29 sep 2024
CONTENU

Découvrez les concepts de base de sudo et comment l'utiliser en tant qu'utilisateur ordinaire.

MOTIF

Certaines commandes nécessitent des privilèges d'administrateur. Pour exécuter une commande avec des droits d'administrateur, vous pouvez utiliser la commande sudo.

EFFORT

La lecture de cet article vous prendra au maximum 20 minutes. Si vous avez une question spécifique, vous pouvez passer directement au chapitre correspondant.

OBJECTIF

Comprendre les concepts de base de sudo et exécuter des commandes avec sudo pour certains cas d'utilisation.

CONDITIONS REQUISES
  • Privilèges root ou sudo. Ils ne sont disponibles que si vous êtes l'administrateur du système. Pour plus d'informations, reportez-vous à la Section 1, « Concepts de base de sudo ».

  • Le paquet sudo doit être installé. Il est disponible sous SLE Micro par défaut.

1 Concepts de base de sudo

Découvrez les concepts de base de sudo et son fonctionnement sur les systèmes SLE Micro.

sudo est une commande Linux utilisée pour exécuter temporairement des programmes en tant qu'un autre utilisateur. Il s'agit de l'abréviation de substitute user and do et emprunte les privilèges d'un autre utilisateur, par exemple l'utilisateur root. De cette façon, sudo vous permet d'accomplir les tâches d'administration du système sans vous connecter en tant que root.

1.1 sudo sur les systèmes Linux en général

En tant qu'utilisateur ordinaire sous Linux, vous disposez d'autorisations réduites qui sont suffisantes pour la plupart des tâches. L'utilisateur root est le superutilisateur Linux et l'équivalent de l'administrateur.

sudo permet à des utilisateurs (non-root) spécifiés ou à un groupe d'utilisateurs d'exécuter des tâches privilégiées, telles que l'appel de fonctions système en tant que root ou un autre utilisateur. Grâce à un fichier de configuration, l'administrateur système peut contrôler quels utilisateurs sont autorisés à exécuter des commandes sudo et pour quelles tâches.

1.2 sudo sur les systèmes SLE Micro

Pour des raisons de sécurité, tous les systèmes SLE Micro distinguent l'utilisateur ordinaire de l'utilisateur root. En tant qu'utilisateur ordinaire, vous ne pouvez pas écrire dans des répertoires système ou installer des programmes. Tout utilisateur ayant accès au mot de passe root peut obtenir ces privilèges et endommager le système par accident ou avec de mauvaises intentions.

Par exemple, vous êtes connecté en tant qu'utilisateur ordinaire et vous accédez accidentellement à un site Web malveillant. Il est alors impossible à un attaquant d'installer des logiciels malveillants sur votre système dans votre dos, car vous êtes connecté en tant qu'utilisateur ordinaire, autrement dit sans aucune autorisation d'administration.

Comme expliqué ci-dessus, il est déconseillé d'être connecté en permanence en tant qu'utilisateur root pour des raisons de sécurité. Une approche plus sûre consiste à rester connecté en tant qu'utilisateur ordinaire et d'exécuter une commande restreinte précédée de sudo.

Note
Note : sudo nécessite des droits d'administrateur

Sur une machine mono-utilisateur, sur laquelle vous avez défini votre propre mot de passe root, vous disposez des droits requis pour administrer votre système à l'aide de la commande sudo et configurer vous-même les paramètres sudo.

Pour plus d'informations sur la configuration de sudo, reportez-vous au document https://documentation.suse.com/smart/systems-management/html/sudo-configure-superuser-privileges/index.html.

Dans un environnement multi-utilisateur, comme dans les entreprises, les privilèges sudo sont gérés par un administrateur système et les autorisations de l'utilisateur root peuvent être limitées. Il se peut que vous ne soyez pas autorisé à modifier certains répertoires ou fichiers système, même lorsque vous exécutez la commande avec sudo.

1.3 Fonctionnement de sudo

Lorsque vous exécutez une commande précédée de sudo, le système vous demande le mot de passe du compte root. Une fois l'authentification réussie, la commande est exécutée avec les privilèges de superutilisateur.

Selon la configuration sudo, les privilèges élevés persistent un certain temps et restent applicables tant que vous travaillez dans la même session de terminal. Il n'est donc pas nécessaire d'indiquer à nouveau un mot de passe lorsque vous exécutez une autre commande sudo.

Pour exécuter une commande avec sudo, utilisez cette syntaxe :

> sudo [command]

L'exemple suivant explique comment la commande sudo est utilisée pour ouvrir le centre de contrôle YaST directement dans le terminal. Des droits d'administrateur sont nécessaires pour ouvrir YaST et, par conséquent, l'ouverture n'est possible qu'avec la commande sudo.

Exemple 1 : Ouverture du centre de contrôle YaST avec sudo
> yast
Absolute path to 'yast' is '/usr/sbin/yast', so running it may require superuser privileges (eg. root).1
> sudo yast
[sudo] password for root:2

1

Lorsque seule la commande yast est entrée, le système renvoie un message indiquant que des privilèges root sont requis.

2

Si vous faites précéder la commande yast par sudo, le système vous invite à entrer le mot de passe root. Le mot de passe n'apparaît pas lors de la saisie, ni en texte clair ni en caractères de masquage.

Une fois l'authentification réussie, le centre de contrôle YaST s'ouvre.

Les privilèges élevés persistent un certain temps, de sorte qu'il n'est pas nécessaire d'indiquer à nouveau un mot de passe pour exécuter la commande sudo suivante.

2 Exécution d'une commande précédée de sudo

En tant qu'utilisateur ordinaire, vous pouvez exécuter n'importe quelle commande en tant que root en ajoutant sudo devant celle-ci. Vous êtes alors invité à fournir le mot de passe root. Si l'authentification réussit, la commande s'exécute en tant que root.

Lorsque vous exécutez une commande précédée de sudo, le système vous demande le mot de passe du compte root. Une fois l'authentification réussie, la commande est exécutée avec les privilèges de superutilisateur.

Selon la configuration sudo, les privilèges élevés persistent un certain temps et restent applicables tant que vous travaillez dans la même session de terminal. Il n'est donc pas nécessaire d'indiquer à nouveau un mot de passe lorsque vous exécutez une autre commande sudo.

Procédure 1 : exécution d'une commande précédée de sudo

La procédure suivante décrit comment utiliser la commande sudo pour copier un fichier dans un répertoire où seul l'utilisateur root dispose de droits d'édition.

  1. Ouvrez un terminal et créez un fichier test avec :

    > touch test.txt
  2. Essayez de copier le fichier dans le répertoire /usr/local/bin/ avec :

    > cp test.txt /usr/local/bin

    Le terminal renvoie, par exemple :

    cp: cannot create regular file '/usr/local/bin/test.txt': Permission denied

    Ce message apparaît également si les privilèges requis n'ont pas été accordés à sudo.

  3. À présent, entrez la même commande précédée de sudo :

    > sudo cp test.txt /usr/local/bin
  4. Vous êtes invité à fournir le mot de passe root. Notez que le mot de passe n'apparaît pas lors de la saisie, ni en texte clair ni en caractères de masquage.

    [sudo] password for root:
  5. Une fois l'authentification réussie, le fichier test est copié dans /usr/local/bin.

  6. Vous avez exécuté votre première commande sudo.

3 Commandes sudo courantes

En ajoutant sudo devant n'importe quelle commande, vous pouvez exécuter des commandes avec des autorisations élevées. Vous pouvez également exécuter des commandes en étant un autre utilisateur et utiliser ses variables d'environnement.

Cette section fournit des exemples de commandes courantes qui nécessitent souvent des privilèges d'administrateur.

Répéter la dernière commande avec sudo

Pour répéter la dernière commande en tant qu'administrateur, exécutez sudo !!, puis entrez le mot de passe. Par exemple, un utilisateur sans privilèges d'administrateur ne peut pas créer de répertoire sous le répertoire /etc/. Pour le créer, exécutez sudo !!.

> mkdir /etc/test/
mkdir: cannot create directory ‘/etc/test/’: Permission denied

> sudo !!
sudo mkdir /etc/test/
[sudo] password for root:

> ls -alrt /etc  | grep test
drwxr-xr-x 1 root root        0 Apr 20 12:48 test
Gérer les paquets à l'aide de sudo et de zypper

Pour exécuter des commandes de gestion de paquets en tant qu'administrateur, ajoutez sudo devant la commande :

> sudo zypper [--GLOBAL-OPTIONS] <COMMAND> [--COMMAND-OPTIONS] [ARGUMENTS]

Par exemple, pour installer la plate-forme de conteneurisation Docker CE à partir de son dépôt de paquets officiel, exécutez les commandes suivantes avec sudo :

> sudo zypper addrepo https://download.docker.com/linux/suse/docker-ce
            > sudo zypper refresh
            > sudo zypper search docker-ce
            > sudo zypper install docker-ce

Il n'est pas nécessaire d'ajouter sudo devant les commandes zypper qui ne modifient pas le système ou ne fournissent pas d'accès privilégié aux informations. Par exemple, vous pouvez répertorier les dépôts pour les paquets logiciels installés sur votre système sans utiliser sudo :

> zypper lr
Gérer les services système à l'aide de sudo et de systemctl

Dans les systèmes qui utilisent systemd pour la gestion des services, vous pouvez utiliser la commande systemctl avec sudo. Par exemple, pour redémarrer le service Apache Web Server, exécutez :

> sudo systemctl restart apache2

Il n'est pas nécessaire d'ajouter sudo devant les commandes systemctl qui ne modifient pas le système ou ne fournissent pas d'accès privilégié aux informations. Par exemple, vous pouvez afficher l'état de Network Manager sans utiliser sudo :

> systemctl status NetworkManager
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
    Drop-In: /usr/lib/systemd/system/NetworkManager.service.d
             └─NetworkManager-ovs.conf
     Active: active (running) since DAY YYYY-MM-DD HH:MM:SS TIMEZONE; 1h 21min ago
       Docs: man:NetworkManager(8)
   [...]
Modifier un compte utilisateur à l'aide de sudo et de usermod

Pour exécuter la commande usermod afin de modifier des comptes utilisateur, utilisez :

> sudo usermod [OPTION] USERNAME

Par exemple, pour définir le nombre de jours sur 30 en vue de la désactivation définitive du compte utilisateur tux après l'expiration du mot de passe, exécutez :

> sudo usermod --inactive 30 tux
Modifier la propriété des fichiers et des répertoires à l'aide de sudo et de chown

Pour transférer la propriété des fichiers et des répertoires du propriétaire actuel à un nouveau propriétaire, utilisez :

> sudo chown [OPTION] [OWNER:[GROUP]] FILE

Par exemple, pour attribuer à tux la propriété des fichiers et des sous-répertoires du répertoire /home/test/tux-files, exécutez :

> sudo chown tux /home/test/tux-files/ --recursive

Vous pouvez tester le changement de propriété en exécutant la commande suivante :

> ls -alrt /home/test/tux-files/ --recursive
Exécuter une commande en tant qu'autre utilisateur à l'aide de sudo -s

Au lieu d'utiliser la commande su pour prendre l'identité d'un autre utilisateur et exécuter des commandes, vous pouvez utiliser la commande sudo -s. Un shell exécuté par la commande sudo -s hérite de l'environnement de l'utilisateur actuel. La commande sudo -s offre également quelques mesures de contrôle des privilèges.

Pour exécuter une commande en tant qu'autre utilisateur, utilisez :

> sudo -s -u USERNAME COMMAND

Par défaut, la commande s'exécute à partir du répertoire de l'utilisateur précédent, car l'utilisateur cible hérite de l'environnement de l'utilisateur précédent.

Par exemple, pour répertorier de manière récurrente les fichiers et les sous-répertoires du répertoire /home/test/tux-files/ en tant qu'utilisateur cible tux, exécutez :

> sudo -s -u tux ls -alrt /home/test/tux-files/ --recursive

Lorsque vous utilisez l'approche sudo -s pour exécuter une commande en tant qu'autre utilisateur, la commande est consignée dans votre historique.

Exécuter une commande en tant qu'autre utilisateur avec un environnement propre à l'aide de sudo -i

Lorsque vous utilisez la commande sudo -s, l'utilisateur cible hérite de l'environnement de l'utilisateur précédent. Vous pouvez empêcher cet héritage en utilisant la commande sudo -i, où l'utilisateur cible obtient un environnement nettoyé et démarre à partir de son propre répertoire $HOME.

Pour exécuter une commande en tant qu'autre utilisateur avec un environnement propre, utilisez :

> sudo -i -u USERNAME COMMAND

La commande sudo -i exécute le shell en tant que shell de connexion interactif de l'utilisateur cible. Par conséquent, il existe des scripts de démarrage du shell tels que des fichiers .profile et .bash_profile.

Par exemple, pour lister les fichiers et sous-répertoires du répertoire /home/test/tux-files/ en tant que tux, exécutez la commande suivante :

> sudo -i -u tux ls -alrt /home/test/tux-files/

Lorsque vous utilisez l'approche sudo -i pour exécuter une commande en tant qu'autre utilisateur, la commande est consignée dans votre historique.

4 Différence entre les commandes sudo et su

Découvrez la différence entre les commandes sudo et su quand les utiliser.

Sur les systèmes Linux, vous pouvez faire précéder une commande par sudo ou su. Les deux vous permettent d'exécuter des commandes en tant que root.

4.1 Caractéristiques de la commande sudo

  • sudo permet d'exécuter une commande en tant que root. Selon la configuration, vous ne devez pas entrer le mot de passe root, mais uniquement celui de l'utilisateur. De cette façon, aucune information sensible ne doit être partagée avec tous les autres utilisateurs (ordinaires).

  • Le fichier de configuration sudo permet à l'administrateur système de contrôler les utilisateurs autorisés à utiliser sudo et de limiter l'utilisation à certaines tâches.

  • sudo met en cache le mot de passe pendant un certain temps. Une fois ce délai écoulé, vous êtes de nouveau invité à entrer le mot de passe lorsque vous exécutez une autre commande sudo.

  • Toutes les commandes exécutées avec sudo sont consignées individuellement. Le fichier journal effectue le suivi de la date et de l'heure d'exécution, de l'utilisateur qui a exécuté la commande et de la commande proprement dite.

4.2 Caractéristiques de la commande su

  • su vous permet d'exécuter une commande en tant que root, mais vous oblige à connaître le mot de passe root.

  • Il ne peut pas être configuré pour limiter l'accès à certains utilisateurs et tâches et pour élever les privilèges de toute personne connaissant le mot de passe root.

  • Les privilèges sont élevés durant toute la session de terminal. Tant que vous restez dans la session, vous n'êtes plus invité à entrer le mot de passe.

  • Les commandes exécutées avec su ne sont pas consignées individuellement, car toutes les opérations ne peuvent être consignées qu'avec le compte utilisateur.