Introduction
La séparation des privilèges est l’un des paradigmes de sécurité fondamentaux implémentés dans les systèmes d’exploitation Linux et de type Unix. Les utilisateurs réguliers fonctionnent avec des privilèges limités afin de réduire la portée de leur influence à leur propre environnement, et non pas à l’ensemble du système d’exploitation.
A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.
Dans cet article, nous discuterons de la manière correcte et sécurisée d’obtenir les privilèges root, en mettant particulièrement l’accent sur la modification du fichier /etc/sudoers
.
Nous effectuerons ces étapes sur un serveur Ubuntu 20.04, mais la plupart des distributions Linux modernes telles que Debian et CentOS devraient fonctionner de manière similaire.
Ce guide suppose que vous avez déjà terminé la configuration initiale du serveur discutée ici. Connectez-vous à votre serveur en tant qu’utilisateur régulier, non root, et continuez ci-dessous.sudoers
. Si vous souhaitez simplement ajouter des privilèges sudo
à un utilisateur, consultez nos tutoriels de démarrage rapide sur
Note: Ce tutoriel aborde en profondeur l’élévation des privilèges et le fichier sudoers
. Si vous souhaitez simplement ajouter des privilèges sudo
à un utilisateur, consultez nos tutoriels de démarrage rapide Comment créer un nouvel utilisateur avec sudo pour Ubuntu et CentOS.
Comment obtenir des privilèges de root
Il existe trois moyens de base d’obtenir des privilèges root, qui varient en termes de sophistication.
Se connecter en tant que root
La méthode la plus simple et la plus directe pour obtenir des privilèges root est de se connecter directement à votre serveur en tant qu’utilisateur root.
Si vous vous connectez à une machine locale (ou utilisez une fonction de console hors bande sur un serveur virtuel), entrez root
comme nom d’utilisateur au prompt de connexion et entrez le mot de passe root lorsqu’on vous le demande.
Si vous vous connectez via SSH, spécifiez l’utilisateur root avant l’adresse IP ou le nom de domaine dans votre chaîne de connexion SSH :
Si vous n’avez pas configuré les clés SSH pour l’utilisateur root, entrez le mot de passe root lorsqu’on vous le demande.
Utilisation de su
pour devenir Root
Se connecter directement en tant que root n’est généralement pas recommandé, car il est facile de commencer à utiliser le système pour des tâches non administratives, ce qui est dangereux.
La prochaine façon d’obtenir des privilèges de super-utilisateur vous permet de devenir l’utilisateur root à tout moment, au besoin.
Nous pouvons le faire en invoquant la commande su
, qui signifie « utilisateur de substitution ». Pour obtenir des privilèges root, tapez :
Vous serez invité à saisir le mot de passe de l’utilisateur root, après quoi, vous serez placé dans une session de shell root.
Lorsque vous avez terminé les tâches qui nécessitent des privilèges root, revenez à votre shell normale en tapant :
Utilisation de sudo
pour exécuter des commandes en tant que Root
La dernière méthode d’obtention des privilèges root dont nous allons discuter est avec la commande sudo
.
La commande sudo
vous permet d’exécuter des commandes ponctuelles avec des privilèges root, sans avoir besoin de lancer un nouveau shell. Elle est exécutée comme ceci:
Contrairement à su
, la commande sudo
demandera le mot de passe de l’utilisateur actuel, et non le mot de passe root.
En raison de ses implications en matière de sécurité, l’accès sudo
n’est pas accordé aux utilisateurs par défaut et doit être configuré avant de fonctionner correctement. Consultez nos tutoriels rapides Comment créer un nouvel utilisateur avec sudo pour Ubuntu et CentOS pour apprendre à configurer un utilisateur sudo
-enabled.
Dans la section suivante, nous discuterons de manière plus détaillée de la modification de la configuration sudo
.
Qu’est-ce que Visudo?
La commande sudo
est configurée à travers un fichier situé à /etc/sudoers
.
Attention: Ne jamais éditer ce fichier avec un éditeur de texte normal ! Utilisez toujours la commande visudo
à la place !
Parce que la syntaxe incorrecte dans le fichier /etc/sudoers
peut vous laisser avec un système cassé où il est impossible d’obtenir des privilèges élevés, il est important d’utiliser la commande visudo
pour modifier le fichier.
La commande visudo
ouvre un éditeur de texte comme d’habitude, mais elle valide la syntaxe du fichier lors du sauvegarde. Cela empêche les erreurs de configuration de bloquer les opérations sudo
, qui peuvent être votre seule façon d’obtenir des privilèges root.
Traditionnellement, visudo
ouvre le fichier /etc/sudoers
avec l’éditeur de texte vi
. Ubuntu, cependant, a configuré visudo
pour utiliser l’éditeur de texte nano
à la place.
Si vous souhaitez le changer en vi
, exécutez la commande suivante:
OutputThere are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
Sélectionnez le numéro correspondant à l’option que vous souhaitez faire.
Sur CentOS, vous pouvez changer cette valeur en ajoutant la ligne suivante à votre ~/.bashrc
:
Sourcez le fichier pour mettre en œuvre les changements:
Après avoir configuré visudo
, exécutez la commande pour accéder au fichier /etc/sudoers
:
Comment Modifier le Fichier Sudoers
Vous serez présenté avec le fichier /etc/sudoers
dans votre éditeur de texte sélectionné.
I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers
file has many more lines, some of which we will not discuss in this guide.
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
#includedir /etc/sudoers.d
Jetons un coup d’œil à ce que font ces lignes.
Lignes par défaut
La première ligne, Defaults env_reset
, réinitialise l’environnement de la session pour supprimer toutes les variables d’utilisateur. Il s’agit d’une mesure de sécurité utilisée pour effacer des variables d’environnement potentiellement nocives de la session sudo
.
La deuxième ligne, Defaults mail_badpass
, indique au système d’envoyer des avis de mauvaises tentatives de mot de passe sudo
à l’utilisateur mailto
configuré. Par défaut, c’est le compte root.
La troisième ligne, qui commence par Defaults secure_path=...
, spécifie le PATH
(les endroits dans le système de fichiers que l’OS recherchera pour les applications) qui sera utilisé pour les opérations sudo
. Cela empêche l’utilisation de chemins d’utilisateur qui pourraient être nocifs.
Lignes de privilèges utilisateur
La quatrième ligne, qui dicte les privilèges sudo
de l’utilisateur root, est différente des lignes précédentes. Jetons un coup d’œil à ce que signifient les différents champs :
-
root ALL=(ALL:ALL) ALL
Le premier champ indique le nom d’utilisateur auquel la règle s’appliquera (root). -
root ALL=(ALL:ALL) ALL
Le premier « ALL » indique que cette règle s’applique à tous les hôtes. -
root ALL=(ALL:ALL) ALL
Ce « ALL » indique que l’utilisateur root peut exécuter des commandes en tant qu’utilisateurs. -
root ALL=(ALL:ALL) ALL
Ce « ALL » indique que l’utilisateur root peut exécuter des commandes en tant que toutes les groupes. -
root ALL=(ALL:ALL) ALL
Le dernier « ALL » indique que ces règles s’appliquent à toutes les commandes.
Cela signifie que notre utilisateur root peut exécuter n’importe quelle commande en utilisant sudo
, tant qu’il fournit son mot de passe.
Lignes de privilèges de groupe
Les deux lignes suivantes sont similaires aux lignes de privilèges utilisateur, mais elles spécifient les règles sudo
pour les groupes.
Les noms commençant par un %
indiquent les noms de groupes.
Ici, nous voyons que le groupe admin peut exécuter n’importe quelle commande en tant qu’utilisateur sur n’importe quel hôte. De même, le groupe sudo a les mêmes privilèges, mais peut également s’exécuter en tant que tout groupe.
Ligne inclus /etc/sudoers.d
La dernière ligne peut sembler être un commentaire à première vue:
. . .
#includedir /etc/sudoers.d
Elle fait commence par un #
, ce qui indique généralement un commentaire. Cependant, cette ligne indique en réalité que les fichiers dans le répertoire /etc/sudoers.d
seront source et appliqués également.
Les fichiers dans ce répertoire suivent les mêmes règles que le fichier /etc/sudoers
lui-même. Tout fichier qui ne se termine pas par ~
et qui ne contient pas de .
sera lu et ajouté à la configuration sudo
.
Ceci est principalement destiné aux applications pour modifier les privilèges sudo
lors de l’installation. Placer toutes les règles associées dans un seul fichier dans le répertoire /etc/sudoers.d
peut faciliter la visualisation des privilèges associés à chaque compte et faciliter la réversion des informations d’identification sans avoir à manipuler directement le fichier /etc/sudoers
.
Comme avec le fichier /etc/sudoers
lui-même, vous devez toujours modifier les fichiers dans le répertoire /etc/sudoers.d
avec visudo
. La syntaxe pour modifier ces fichiers serait :
Comment accorder à un utilisateur des privilèges sudo
L’opération la plus courante que les utilisateurs souhaitent réaliser lors de la gestion des permissions sudo
est d’accorder à un nouvel utilisateur un accès général sudo
. C’est utile si vous souhaitez donner un compte un accès administratif complet au système.
La façon la plus simple de le faire sur un système configuré avec un groupe d’administration générique, comme le système Ubuntu dans ce guide, est en fait d’ajouter l’utilisateur concerné à ce groupe.
Par exemple, sur Ubuntu 20.04, le groupe sudo
a tous les privilèges d’administrateur. Nous pouvons accorder à un utilisateur les mêmes privilèges en les ajoutant au groupe de cette manière :
La commande gpasswd
peut également être utilisée :
Ces deux méthodes accomplissent la même chose.
Sur CentOS, c’est généralement le groupe wheel
au lieu du groupe sudo
:
Ou, en utilisant gpasswd
:
Sur CentOS, si l’ajout de l’utilisateur au groupe ne fonctionne pas immédiatement, vous devrez peut-être modifier le fichier /etc/sudoers
pour décommenter le nom du groupe :
. . .
%wheel ALL=(ALL) ALL
. . .
Comment Configurer des Règles Personnalisées
Maintenant que nous nous sommes familiarisés avec la syntaxe générale du fichier, créons quelques nouvelles règles.
Comment Créer des Alias
Le fichier sudoers
peut être organisé plus facilement en regroupant des choses avec différents types d’“alias”.
Par exemple, nous pouvons créer trois groupes différents d’utilisateurs, avec une adhésion superposée :
. . .
User_Alias GROUPONE = abby, brent, carl
User_Alias GROUPTWO = brent, doris, eric,
User_Alias GROUPTHREE = doris, felicia, grant
. . .
Les noms de groupe doivent commencer par une lettre majuscule. Nous pouvons alors autoriser les membres de GROUPTWO
à mettre à jour la base de données apt
en créant une règle comme celle-ci :
. . .
GROUPTWO ALL = /usr/bin/apt-get update
. . .
Si nous ne spécifions pas un utilisateur/groupe à utiliser, comme ci-dessus, sudo
utilise par défaut l’utilisateur root.
Nous pouvons autoriser les membres de GROUPTHREE
à éteindre et redémarrer la machine en créant un “alias de commande” et en l’utilisant dans une règle pour GROUPTHREE
:
. . .
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE ALL = POWER
. . .
Nous créons un alias de commande appelé POWER
qui contient des commandes pour éteindre et redémarrer la machine. Nous permettons ensuite aux membres de GROUPTHREE
d’exécuter ces commandes.
Nous pouvons également créer des alias « Exécuter en tant que », qui peuvent remplacer la partie de la règle qui spécifie l’utilisateur pour exécuter la commande:
. . .
Runas_Alias WEB = www-data, apache
GROUPONE ALL = (WEB) ALL
. . .
Cela permettra à quiconque membre de GROUPONE
d’exécuter des commandes en tant qu’utilisateur www-data
ou apache
.
Gardez à l’esprit que les règles ultérieures annuleront les règles précédentes lorsqu’il y aura un conflit entre les deux.
Comment verrouiller les règles
Il existe de nombreuses façons d’obtenir un contrôle accru sur la manière dont sudo
réagit à un appel.
La commande updatedb
associée au paquet mlocate
est relativement inoffensive sur un système à utilisateur unique. Si nous voulons permettre aux utilisateurs d’exécuter cette commande avec les privilèges root sans avoir à saisir un mot de passe, nous pouvons créer une règle comme celle-ci:
. . .
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb
. . .
NOPASSWD
est une « étiquette » qui signifie qu’aucun mot de passe ne sera demandé. Il existe une commande associée appelée PASSWD
, qui est le comportement par défaut. Une étiquette est pertinente pour le reste de la règle, sauf si elle est annulée par son « étiquette jumelle » plus tard dans la ligne.
Par exemple, nous pouvons avoir une ligne comme celle-ci:
. . .
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .
Un autre tag utile est NOEXEC
, qui peut être utilisé pour empêcher certains comportements dangereux dans certains programmes.
Par exemple, certains programmes, comme less
, peuvent lancer d’autres commandes en tapant ceci à partir de leur interface:
!command_to_run
Cela exécute essentiellement n’importe quelle commande que l’utilisateur lui donne avec les mêmes permissions que less
est en cours d’exécution, ce qui peut être très dangereux.
Pour restreindre cela, nous pourrions utiliser une ligne comme celle-ci:
. . .
username ALL = NOEXEC: /usr/bin/less
. . .
Informations diverses
Il y a encore quelques morceaux d’information qui pourraient être utiles lors de la manipulation de sudo
.
Si vous avez spécifié un utilisateur ou un groupe pour « s’exécuter en tant que » dans le fichier de configuration, vous pouvez exécuter des commandes en tant que ces utilisateurs en utilisant les drapeaux -u
et -g
, respectivement:
Pour plus de commodité, par défaut, sudo
enregistrera vos informations d’identification pendant un certain temps dans un terminal. Cela signifie que vous n’aurez pas à retaper votre mot de passe tant que le compte à rebours n’aura pas expiré.
Pour des raisons de sécurité, si vous souhaitez effacer ce compte à rebours lorsque vous avez terminé d’exécuter des commandes d’administration, vous pouvez exécuter:
Si, d’un autre côté, vous voulez « préparer » la commande sudo
pour ne pas être interrogé plus tard, ou renouveler votre bail sudo
, vous pouvez toujours taper :
Vous serez invité à saisir votre mot de passe, qui sera mis en cache pour les utilisations ultérieures de sudo
jusqu’à ce que le délai de sudo
expire.
Si vous vous demandez simplement quelles sortes de privilèges sont définis pour votre nom d’utilisateur, vous pouvez taper:
Cela vous donnera la liste de toutes les règles dans le fichier /etc/sudoers
qui s’appliquent à votre utilisateur. Cela vous donne une bonne idée de ce que vous serez autorisé ou non à faire avec sudo
en tant qu’utilisateur.
Il y a de nombreuses fois où vous exécuterez une commande et elle échouera parce que vous avez oublié de la préfixer par sudo
. Pour éviter d’avoir à réécrire la commande, vous pouvez profiter d’une fonctionnalité de bash qui signifie « répéter la dernière commande »:
Les deux points d’exclamation répètent la dernière commande. Nous l’avons précédée de sudo
pour changer rapidement la commande non privilégiée en commande privilégiée.
Pour un peu de plaisir, vous pouvez ajouter la ligne suivante dans votre fichier /etc/sudoers
avec visudo
:
. . .
Defaults insults
. . .
Cela fera en sorte que sudo
retourne une insulte amusante lorsqu’un utilisateur saisit un mot de passe incorrect pour sudo
. Nous pouvons utiliser sudo -k
pour effacer le mot de passe sudo
mis en cache précédemment pour l’essayer:
Output[sudo] password for demo: # enter an incorrect password here to see the results
Your mind just hasn't been the same since the electro-shock, has it?
[sudo] password for demo:
My mind is going. I can feel it.
Conclusion
Vous devriez maintenant avoir une compréhension de base de la manière de lire et de modifier le fichier sudoers
, et une idée des différentes méthodes que vous pouvez utiliser pour obtenir des privilèges root.
Rappelez-vous, les privilèges de super-utilisateur ne sont pas accordés aux utilisateurs réguliers pour une raison. Il est essentiel que vous compreniez ce que chaque commande fait lorsque vous l’exécutez avec les privilèges root. Ne prenez pas cette responsabilité à la légère. Apprenez la meilleure façon d’utiliser ces outils pour votre cas d’utilisation et verrouillez toute fonctionnalité inutile.
Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file