Vous avez probablement entendu parler du concept « Dans Linux, tout est un fichier ». Cela semble quelque peu déroutant car le système Linux comprend diverses entités et pas seulement des fichiers. On y trouve des annuaires, des liens symboliques, des processus, des tubes (pipes) et des connecteurs réseau (sockets), pour n’en citer que quelques-uns.
Cette simplification exagérée donne un aperçu de haut niveau de l’architecture Linux. Elle implique que dans un système Linux, chaque entité est considérée comme un fichier. Ces entités sont représentées par un descripteur de fichier qui est un identifiant unique pour un fichier ou d’autres ressources telles que des répertoires, des connecteurs réseau ou des processus – d’où le concept « tout est un fichier ».
Tout cela nous mène ensuite au concept de permissions de fichiers et de répertoires. Par défaut, chaque fichier dans Linux possède ses propres permissions et répertoires. Ces permissions déterminent les droits d’accès ou les privilèges que les utilisateurs ont sur le fichier. Si vous possédez un fichier ou un annuaire, vous pouvez faire à peu près tout ce que vous voulez avec lui – vous pouvez y accéder, le modifier, le renommer et même le supprimer.
Mais chaque utilisateur est différent. Sous le système Linux, un de ces utilisateurs est le super-utilisateur (root user). Le super-utilisateur est un utilisateur administratif doté des privilèges les plus élevés et n’est soumis à aucune restriction en ce qui concerne les permissions. L’utilisateur peut faire à peu près tout, incluant l’installation et la désinstallation de programmes, l’accès et la modification de fichiers système, et la personnalisation du système.
L’utilisateur root peut également endommager le système, que ce soit intentionnellement ou accidentellement – c’est pourquoi il est déconseillé de se connecter et de faire fonctionner le système en tant qu’utilisateur root. Une seule commande erronée peut faire dérailler le système. Pour cette raison, il est préférable de toujours exécuter les commandes en tant qu’utilisateur sudo.
Qu’est-ce qu’un utilisateur sudo ?
Comme il est fortement déconseillé d’administrer le système Linux en tant que super-utilisateur, l’administrateur système doit accorder à un utilisateur normal un certain niveau de privilège lui permettant d’exécuter certaines (ou toutes) des commandes normalement prises en charge par l’utilisateur root.
Sudo est un programme qui accorde aux utilisateurs réguliers des permissions afin d’exécuter des commandes avec les privilèges de l’utilisateur root ou d’un autre utilisateur. Un utilisateur sudo est donc un utilisateur Linux ordinaire doté de privilèges élevés. En outre, vous pouvez configurer sudo pour limiter un utilisateur sudo à une poignée de commandes ou l’autoriser à exécuter toutes les commandes en tant qu’utilisateur root. Nous couvrirons ces scénarios en profondeur plus loin dans ce guide.
Tout d’abord, nous allons vous guider dans la création d’un utilisateur sudo sur Ubuntu 20.04.
Comment créer un utilisateur sudo
Pour créer un utilisateur sudo sur Ubuntu 20.04, suivez les étapes suivantes.
Étape 1 : Connectez-vous à votre serveur
Tout d’abord, connectez-vous à votre serveur cloud en tant qu’utilisateur root en utilisant la syntaxe indiquée.
$ ssh root@server-ip
Fournissez le mot de passe root lorsque vous y êtes invité et appuyez sur ENTER pour accéder au serveur. Si vous utilisez Putty, tapez simplement l’adresse IP du serveur distant et cliquez sur le bouton « Open » ou appuyez sur la touche ENTER.
Étape 2 : Créez un nouvel utilisateur
Une fois connecté, créez un nouvel utilisateur régulier en utilisant la commande adduser
. Lci, jumpcloud
est notre nouvel utilisateur.
# adduser jumpcloud
La commande fait plus d’une chose. Tout d’abord, elle crée un nouvel utilisateur et un groupe primaire appelé jumpcloud
, puis ajoute l’utilisateur au groupe. Ensuite, un répertoire personnel est créé pour l’utilisateur et les fichiers de configuration y sont copiés. Ensuite, il vous sera demandé de saisir le mot de passe du nouvel utilisateur. Veillez à fournir un mot de passe fort et à le confirmer.
Une fois le mot de passe de l’utilisateur défini, certaines informations supplémentaires vous seront demandées. Remplissez-les si nécessaire ou laissez-les vides en appuyant sur la touche ENTER si l’information n’est pas applicable.
Pour confirmer que l’utilisateur nouvellement ajouté ait été créé, affichez le fichier /etc/passwd
à l’aide de la commande cat. Ce fichier fournit des informations telles que l’UID (User ID), le GID (Group ID) et le chemin d’accès au répertoire personnel.
# cat /etc/passwd | grep jumpcloud
De même, vous pouvez récupérer les détails de l’utilisateur en utilisant la commande id
.
# id jumpcloud
Étape 3 : Ajoutez le nouvel utilisateur au groupe sudo
Un groupe sudo est un groupe de super-utilisateurs ayant un accès privilégié aux commandes root. En gardant cela à l’esprit, procédez et ajoutez le nouvel utilisateur au groupe sudo en utilisant la commande usermod
comme suit.
# usermod -aG sudo jumpcloud
Pour vérifier que l’utilisateur ait été ajouté au groupe sudo
, utilisez la commande id
.
# id jumpcloud
D’après la lecture du résultat, nous pouvons voir que l’utilisateur appartient maintenant à deux groupes : jumpcloud
et sudo
. Vous pouvez également exécuter la commande groups
pour afficher uniquement les groupes auxquels l’utilisateur appartient.
# groups jumpcloud
Parfait ! Le nouvel utilisateur est maintenant un utilisateur sudo et a un accès illimité aux privilèges root.
Étape 4 : Testez sudo
Avec l’utilisateur sudo déjà en place, nous pouvons procéder et tester l’utilisateur. Passez maintenant à l’utilisateur sudo en utilisant la commande su.
# su – jumpcloud
La commande vous place dans le chemin du répertoire personnel de l’utilisateur. La syntaxe pour utiliser sudo est indiquée ci-dessous.
$ sudo command-to-be-executed
A titre d’exemple, nous allons mettre à jour les listes de paquets de notre système. À cette fin, invoquez sudo suivi de la commande à exécuter.
$ sudo apt update
Lorsque vous y êtes invité, saisissez le mot de passe de l’utilisateur et appuyez sur ENTER. La commande s’exécutera avec succès – une confirmation que l’utilisateur a bien été ajouté au groupe sudo et qu’il peut maintenant exécuter des tâches importantes du système.
Comprendre le fichier sudoers
L’utilisateur sudo que nous avons créé assume tous les droits et privilèges de l’utilisateur root et peut exécuter pratiquement n’importe quelle commande. Toutefois, il est conseillé d’appliquer le principe du moindre privilège. Il s’agit d’un concept de sécurité selon lequel un utilisateur ne se voit attribuer que des droits d’accès ou des autorisations minimales lui permettant de remplir son rôle. Par conséquent, en tant qu’administrateur système, vous ne devriez accorder à l’utilisateur sudo que les autorisations nécessaires à l’exécution de ses fonctions.
Le fichier sudoers /etc/sudoers
est un fichier indiquant quels utilisateurs peuvent exécuter quelles commandes sur le système. Il comprend un ensemble de règles qui régissent les utilisateurs ou les groupes qui peuvent exécuter des tâches élevées. Pour accorder ou restreindre les privilèges root aux utilisateurs, vous devez modifier ce fichier.
Vous ne devez jamais modifier le fichier sudoers à l’aide d’un éditeur de texte normal comme nano ou vim, car cela pourrait conduire à un fichier corrompu qui pourrait potentiellement bloquer l’accès de tous les utilisateurs, y compris l’administrateur. On doit donc accéder au fichier sudoers en exécutant la commande visudo
comme suit.
$ visudo
Ceci ouvre le fichier /etc/sudoers
en utilisant l’éditeur nano comme indiqué. Toutes les lignes commençant par un signe dièse – # – sont des commentaires et n’ont aucun effet ou impact sur le fichier.
Par défaut, le fichier comporte 6 lignes non commentées. Passons à la ligne de privilège de l’utilisateur qui est la quatrième ligne.
root ALL=(ALL:ALL) ALL
- Le premier paramètre pointe vers le nom d’utilisateur – dans ce cas, l’utilisateur root.
- Le premier « ALL » indique que la règle est applicable à tous les hôtes.
- Le second « ALL » indique que l’utilisateur root peut exécuter toutes les commandes comme tous les utilisateurs.
- Le troisième « ALL » montre que l’utilisateur root peut exécuter toutes les commandes comme tous les groupes d’utilisateurs.
- Enfin, le dernier « ALL » indique que les règles sont applicables à toutes les commandes.
Les deux lignes suivantes définissent les règles sudo pour les groupes. Le « % » définit un groupe. Ici, nous avons deux groupes qui ont été définis : les groupes admin et sudo.
La deuxième ligne indique que le groupe admin peut exécuter toutes les commandes comme n’importe quel utilisateur.
%admin ALL=(ALL) ALL
La troisième ligne indique que l’utilisateur sudo peut exécuter n’importe quelle commande en tant qu’utilisateur et en tant que groupe.
%sudo ALL=(ALL:ALL) ALL
Modifier directement le fichier sudoers est déconseillé. Il est préférable de placer les règles sudo associées dans le répertoire /etc/sudoers.d
. Cela permet aux administrateurs système de garder facilement la trace de quelles règles s’appliquent à quels comptes utilisateurs. Les fichiers placés dans ce répertoire suivront les mêmes règles que le fichier sudoers.
Comment empêcher les utilisateurs de sudo d’exécuter certaines commandes ?
Comme nous l’avons souligné précédemment, vous pouvez avoir besoin de limiter les utilisateurs sudo à l’exécution de certaines commandes système. Pour ce faire, vous devez créer une règle sudo dans le répertoire /etc/sudoers.d
.
Pour la démonstration, nous allons créer une règle appelée jumpcloud
qui empêche l’utilisateur sudo de mettre à jour les paquets vers leurs plus récentes versions.
# vim /etc/sudoers.d/jumpcloud
Ensuite, copiez et collez la ligne indiquée et enregistrez les modifications.
jumpcloud ALL=(ALL)
!/usr/bin/apt upgrade
La règle indique que l’utilisateur jumpcloud
peut exécuter toutes les commandes en tant qu’utilisateur root, à l’exception de la commande apt upgrade
. Notez que vous devez fournir le chemin d’accès complet de la commande, précédé d’un point d’exclamation.
Pour trouver le chemin complet d’une commande, utilisez la syntaxe de la commande which
comme indiqué.
$ which command
Lorsque l’utilisateur essaie de mettre à niveau les paquets, une erreur s’affiche à l’écran, indiquant que l’utilisateur n’est pas autorisé à le faire.
Lorsque plusieurs commandes sont impliquées, énumérez-les sur une seule ligne en les séparant par une virgule. Dans l’exemple ci-dessous, l’utilisateur sudo a tenté d’arrêter et de relancer le système, sans succès, puisqu’il n’y est pas autorisé. Il existe plusieurs façons d’éteindre ou de redémarrer un système Linux, et les commandes associées ont été listées sur une seule ligne ci-dessous.
jumpcloud ALL=(ALL)
!/usr/sbin/shutdown,!/usr/sbin/poweroff, !/usr/sbin/reboot,!/usr/sbin/init,!/usr/sbin/halt
Toute tentative de mise hors tension ou de redémarrage du système par l’utilisateur sera contrecarrée par le système.
Comment exécuter des commandes sudo spécifiques sans mot de passe ?
Parfois, vous pouvez avoir besoin d’exécuter certaines commandes sans devoir saisir un mot de passe. Ceci est particulièrement utile si vous exécutez un script contenant une commande sudo.
Pour ce faire, utilisez la directive NOPASSWD suivie du chemin complet de la commande. Dans l’exemple ci-dessous, l’utilisateur peut mettre à jour les listes de paquets sans devoir saisir de mot de passe.
jumpcloud ALL=(ALL) NOPASSWD: /usr/bin/apt update
Conclusion
La gestion des privilèges des utilisateurs est généralement l’une des tâches les plus importantes que tout administrateur système doit entreprendre. Les privilèges Sudo ne doivent être accordés qu’aux utilisateurs de confiance, tels que les équipes de support ou d’exploitation.
Il est toujours recommandé de limiter les utilisateurs sudo à un sous-ensemble de commandes système. En procédant ainsi, vous leur fournissez les privilèges de base dont ils ont besoin pour remplir leur rôle, sans plus. Un accès sudo non restreint peut être préjudiciable, car il peut conduire l’utilisateur sudo à effectuer des opérations non autorisées pouvant causer des ravages sur le système. Pire encore, des privilèges d’accès sudo non restreints peuvent faciliter la prise de contrôle du système par un pirate informatique.
Cela dit, la gestion du processus d’attribution d’autorisations spécifiques à des utilisateurs spécifiques peut prendre beaucoup de temps et rapidement dépasser vos priorités, surtout si vous êtes confronté à un environnement et une équipe en pleine expansion. Les capacités de gestion des appareils Linux de JumpCloud facilitent la gestion de l’accès sudo dans des parcs entiers grâce à ses paramètres de sécurité et ses autorisations pour les utilisateurs.
Pour voir comment cela fonctionne, ainsi qu’un certain nombre d’autres fonctionnalités de sécurité et de gestion des périphériques, inscrivez-vous à votre compte gratuit dès aujourd’hui. L’utilisation de JumpCloud est gratuite pour un maximum de 10 utilisateurs et 10 appareils ; nous fournissons également une assistance 24h/24 et 7j/7 via l’application pendant les 10 premiers jours d’utilisation.