Il y a quelques mois, j'ai lu un article très intéressant qui contenait de bonnes informations sur une fonctionnalité Linux sur laquelle je voulais en savoir plus. Je ne vous dirai pas le nom de l'article, de quoi il s'agissait, ni même le site web sur lequel je l'ai lu, mais l'article m'a juste fait frissonner.
La raison pour laquelle j'ai trouvé cet article si digne de grincer des dents est qu'il préface chaque commande avec le sudo
commande. Le problème que j'ai avec cela est que l'article est prétendument destiné aux administrateurs système et que les vrais administrateurs système n'utilisent pas sudo
devant chaque commande qu'ils émettent. Faire cela est une mauvaise utilisation flagrante du sudo
commande. J'ai écrit sur ce type d'utilisation abusive dans mon livre, "The Linux Philosophy for SysAdmins". Ce qui suit est un extrait du chapitre 19 de ce livre.
Dans cet article, nous explorons pourquoi et comment le sudo
l'outil est mal utilisé et comment contourner la configuration qui oblige à utiliser sudo
au lieu de travailler directement en tant que root.
sudo ou pas sudo
Une partie d'être un administrateur système et d'utiliser vos outils préférés consiste à utiliser correctement les outils dont nous disposons et à les rendre disponibles sans aucune restriction. Dans ce cas, je trouve que le sudo
commande est utilisée d'une manière pour laquelle elle n'a jamais été prévue. J'ai une aversion particulière pour la façon dont le sudo
Cette fonctionnalité est utilisée dans certaines distributions, en particulier parce qu'elle est utilisée pour limiter et restreindre l'accès des personnes effectuant le travail d'administration système aux outils dont elles ont besoin pour accomplir leurs tâches.
"[SysAdmins] n'utilisez pas sudo."
– Paul Venezia
Venezia explique dans son article InfoWorld que sudo
est utilisé comme une béquille pour les administrateurs système. Il ne passe pas beaucoup de temps à défendre cette position ou à l'expliquer. Il déclare simplement cela comme un fait. Et je suis d'accord avec lui – pour les administrateurs système. Nous n'avons pas besoin des roues stabilisatrices pour faire notre travail. En fait, ils gênent.
Certaines distributions, comme Ubuntu, utilisent le sudo
commande d'une manière qui vise à rendre l'utilisation des commandes qui nécessitent des privilèges élevés (racine) un peu plus difficile. Dans ces distributions, il n'est pas possible de se connecter directement en tant qu'utilisateur root donc le sudo
La commande est utilisée pour permettre aux utilisateurs non root d'accéder temporairement aux privilèges root. Ceci est censé rendre l'utilisateur un peu plus prudent lors de l'émission de commandes nécessitant des privilèges élevés, telles que l'ajout et la suppression d'utilisateurs, la suppression de fichiers qui ne leur appartiennent pas, l'installation de nouveaux logiciels et, en général, toutes les tâches nécessaires à l'administration. un hôte Linux moderne. Forcer les administrateurs système à utiliser le sudo
La commande en tant que préface à d'autres commandes est censée rendre le travail avec Linux plus sûr.
Utilisation de sudo
la manière dont ces distributions sont utilisées est, à mon avis, une tentative horrible et inefficace de fournir aux administrateurs système novices un faux sentiment de sécurité. Il est complètement inefficace pour fournir n'importe quel niveau de protection. Je peux émettre des commandes tout aussi incorrectes ou dommageables en utilisant sudo
que je peux quand je ne l'utilise pas. Les distributions qui utilisent sudo
pour anesthésier le sentiment de peur que nous puissions émettre une commande incorrecte rend un très mauvais service aux administrateurs système. Il n'y a aucune limite ou restriction imposée par ces distributions sur les commandes que l'on peut utiliser avec le sudo
installation. Il n'y a aucune tentative de limiter les dommages qui pourraient être causés en protégeant réellement le système des utilisateurs et de la possibilité qu'ils puissent faire quelque chose de nuisible - et il ne devrait pas y en avoir.
Alors soyons clairs à ce sujet - ces distributions attendent de l'utilisateur qu'il effectue toutes les tâches d'administration système. Ils bercent les utilisateurs - qui sont en réalité des administrateurs système - en leur faisant croire qu'ils sont en quelque sorte protégés contre les effets d'une mauvaise action, car ils doivent franchir cette étape supplémentaire restrictive pour entrer leur propre mot de passe afin d'exécuter les commandes.
Contourner sudo
Les distributions qui fonctionnent comme cela verrouillent généralement le mot de passe de l'utilisateur root (Ubuntu est l'une de ces distributions). De cette façon, personne ne peut se connecter en tant que root et commencer à travailler sans encombre. Voyons comment cela fonctionne et comment le contourner.
Permettez-moi de préciser la configuration ici afin que vous puissiez la reproduire si vous le souhaitez. À titre d'exemple, j'ai installé Ubuntu 16.04 LTS1 sur une machine virtuelle à l'aide de VirtualBox. Lors de l'installation, j'ai créé un utilisateur non root, étudiant, avec un simple mot de passe pour cette expérience.
Connectez-vous en tant qu'utilisateur étudiant et ouvrez une session de terminal. Regardons l'entrée pour root dans le /etc/shadow file
fichier, où sont stockés les mots de passe cryptés.
student@machine1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
L'autorisation est refusée, nous ne pouvons donc pas consulter le fichier /etc/shadow file
. Ceci est commun à toutes les distributions afin que les utilisateurs non privilégiés ne puissent pas voir et accéder aux mots de passe cryptés. Cet accès permettrait d'utiliser des outils de piratage courants pour casser ces mots de passe, il n'est donc pas sûr de permettre cela.
Essayons maintenant de su –
pour rooter.
student@machine1:~$ su -
Password:
su: Authentication failure
Cette tentative d'utilisation du su
La commande pour élever notre utilisateur au privilège root échoue car le compte root n'a pas de mot de passe et est verrouillé. Utilisons sudo
pour regarder le /etc/shadow file
fichier.
student@machine1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the user password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>
:
) et le deuxième champ est le mot de passe. Notez que le champ de mot de passe pour root est un "bang", connu du reste du monde comme un point d'exclamation (!
). Cela indique que le compte est verrouillé et qu'il ne peut pas être utilisé.
Maintenant, tout ce que nous devons faire pour utiliser le compte root en tant qu'administrateurs système appropriés est de configurer un mot de passe pour le compte root.
student@machine1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@machine1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@machine1:~#
su –
directement à la racine au lieu d'avoir à utiliser sudo
pour chaque commande. Bien sûr, nous pourrions simplement utiliser sudo su –
chaque fois que nous voulons nous connecter en tant que root - mais pourquoi s'embêter ?
S'il vous plaît ne vous méprenez pas. Les distributions comme Ubuntu et leurs parents en amont et en aval sont parfaitement bien et j'en ai utilisé plusieurs au fil des ans. Lorsque j'utilise Ubuntu et les distributions associées, l'une des premières choses que je fais est de définir un mot de passe root afin de pouvoir me connecter directement en tant que root.
Utilisations valides pour sudo
Le sudo
installation a ses utilisations. La véritable intention de sudo
est de permettre à l'utilisateur root de déléguer à un ou deux utilisateurs non root, l'accès à une ou deux commandes privilégiées spécifiques dont ils ont régulièrement besoin. Le raisonnement derrière cela est celui de l'administrateur système paresseux; permettre aux utilisateurs d'accéder à une ou deux commandes nécessitant des privilèges élevés et qu'ils utilisent constamment, plusieurs fois par jour, évite à l'administrateur système de nombreuses demandes des utilisateurs et élimine le temps d'attente que les utilisateurs subiraient autrement. Mais la plupart des utilisateurs non root ne devraient jamais avoir un accès root complet, juste pour les quelques commandes dont ils ont besoin.
J'ai parfois besoin d'utilisateurs non root pour exécuter des programmes nécessitant des privilèges root. Dans des cas comme celui-ci, je configure un ou deux utilisateurs non root et les autorise à exécuter cette seule commande. Le sudo
L'installation conserve également un journal de l'ID utilisateur de chaque utilisateur qui l'utilise. Cela pourrait me permettre de retrouver qui a fait une erreur. C'est tout ce qu'il fait; ce n'est pas un protecteur magique.
Le sudo
facility n'a jamais été destinée à être utilisée comme passerelle pour les commandes émises par un administrateur système. Il ne peut pas vérifier la validité de la commande. Il ne vérifie pas si l'utilisateur fait quelque chose de stupide. Cela ne protège pas le système des utilisateurs qui ont accès à toutes les commandes du système, même si c'est via une passerelle qui les oblige à dire "s'il vous plaît" - Cela n'a jamais été le but recherché.
"Unix ne dit jamais s'il vous plaît."
– Rob Pike
Cette citation sur Unix est tout aussi vraie sur Linux que sur Unix. Nous, les administrateurs système, nous connectons en tant que root lorsque nous devons travailler en tant que root et nous nous déconnectons de nos sessions root lorsque nous avons terminé. Certains jours, nous restons connectés en tant que root toute la journée, mais nous travaillons toujours en tant que root lorsque nous en avons besoin. Nous n'utilisons jamais sudo
car cela nous oblige à taper plus que nécessaire pour exécuter les commandes dont nous avons besoin pour faire notre travail. Ni Unix ni Linux ne nous demandent si nous voulons vraiment faire quelque chose, c'est-à-dire qu'ils ne disent pas "Veuillez vérifier que vous voulez faire ceci."
Oui, je n'aime pas la façon dont certaines distributions utilisent le sudo
commande. La prochaine fois, j'explorerai des cas d'utilisation valides pour sudo
et comment le configurer pour ces cas.
[ Vous voulez tester vos compétences d'administrateur système ? Faites une évaluation des compétences aujourd'hui. ]