GNU/Linux >> Tutoriels Linux >  >> Linux

Ce que vous ne saviez probablement pas sur sudo

Tout le monde connaît sudo , à droite? Cet outil est installé par défaut sur la plupart des systèmes Linux et est disponible pour la plupart des variantes BSD et Unix commerciales. Pourtant, après avoir parlé à des centaines de sudo utilisateurs, la réponse la plus courante que j'ai reçue était que sudo est un outil pour se compliquer la vie.

Il y a un utilisateur root et il y a le su commande, alors pourquoi avoir encore un autre outil ? Pour beaucoup, sudo n'était qu'un préfixe pour les commandes administratives. Seuls quelques-uns ont mentionné que lorsque vous avez plusieurs administrateurs pour le même système, vous pouvez utiliser sudo logs pour voir qui a fait quoi.

Alors, qu'est-ce que sudo ? ? Selon le sudo site Web :

"Sudo permet à un administrateur système de déléguer l'autorité en donnant à certains utilisateurs la possibilité d'exécuter certaines commandes en tant que root ou un autre utilisateur tout en fournissant une piste d'audit des commandes et de leurs arguments."

Par défaut, sudo est livré avec une configuration simple, une seule règle permettant à un utilisateur ou à un groupe d'utilisateurs de faire pratiquement n'importe quoi (plus d'informations sur le fichier de configuration plus loin dans cet article) :

%wheel ALL=(ALL) ALL

Dans cet exemple, les paramètres signifient ce qui suit :

  • Le premier paramètre définit les membres du groupe.
  • Le deuxième paramètre définit le ou les hôtes sur lesquels les membres du groupe peuvent exécuter des commandes.
  • Le troisième paramètre définit les noms d'utilisateur sous lesquels la commande peut être exécutée.
  • Le dernier paramètre définit les applications qui peuvent être exécutées.

Ainsi, dans cet exemple, les membres de la roue groupe peut exécuter toutes les applications en tant que tous les utilisateurs sur tous les hôtes. Même cette règle vraiment permissive est utile car elle génère des journaux de qui a fait quoi sur votre machine.

Alias

En savoir plus sur les administrateurs système

  • Activer le blog Sysadmin
  • L'entreprise automatisée :un guide pour gérer l'informatique avec l'automatisation
  • Livre électronique :Automatisation Ansible pour les administrateurs système
  • Témoignages du terrain :guide de l'administrateur système sur l'automatisation informatique
  • eBook :Un guide de Kubernetes pour les SRE et les administrateurs système
  • Derniers articles sur l'administrateur système

Bien sûr, une fois que vous et votre meilleur ami ne serez plus seuls à administrer une boîte partagée, vous commencerez à affiner les autorisations. Vous pouvez remplacer les éléments de la configuration ci-dessus par des listes :une liste d'utilisateurs, une liste de commandes, etc. Très probablement, vous copierez et collerez certaines de ces listes dans votre configuration.

C'est dans cette situation que les alias peuvent s'avérer utiles. Le maintien de la même liste à plusieurs endroits est sujet aux erreurs. Vous définissez un alias une fois, puis vous pouvez l'utiliser plusieurs fois. Par conséquent, lorsque vous perdez confiance en l'un de vos administrateurs, vous pouvez le supprimer de l'alias et vous avez terminé. Avec plusieurs listes au lieu d'alias, il est facile d'oublier de supprimer l'utilisateur de l'une des listes avec des privilèges élevés.

Activer les fonctionnalités pour un certain groupe d'utilisateurs

Le sudo La commande est livrée avec un vaste ensemble de valeurs par défaut. Pourtant, il existe des situations où vous souhaitez remplacer certains d'entre eux. C'est lorsque vous utilisez les Paramètres par défaut déclaration dans la configuration. Habituellement, ces valeurs par défaut sont appliquées à chaque utilisateur, mais vous pouvez limiter le paramètre à un sous-ensemble d'utilisateurs en fonction de l'hôte, du nom d'utilisateur, etc. Voici un exemple dont ma génération d'administrateurs système adore entendre parler :les insultes. Voici quelques messages amusants lorsque quelqu'un tape mal un mot de passe :

czanik@linux-mewy:~> sudo ls
[sudo] password for root:
Hold it up to the light --- not a brain in sight!
[sudo] password for root:
My pet ferret can type better than you!
[sudo] password for root:
sudo: 3 incorrect password attempts
czanik@linux-mewy:~>

Parce que tout le monde n'est pas fan de l'humour des administrateurs système, ces insultes sont désactivées par défaut. L'exemple suivant montre comment activer ce paramètre uniquement pour vos administrateurs système chevronnés, qui sont membres de la roue groupe :

Defaults !insults
Defaults:%wheel insults

Je n'ai pas assez de doigts pour compter combien de personnes m'ont remercié d'avoir ramené ces messages.

Vérification du résumé

Il y a, bien sûr, des fonctionnalités plus sérieuses dans sudo aussi bien. L'un d'eux est la vérification du résumé. Vous pouvez inclure le résumé des candidatures dans votre configuration : 

peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd

Dans ce cas, sudo vérifie et compare le résumé de l'application à celui stocké dans la configuration avant d'exécuter l'application. S'ils ne correspondent pas, sudo refuse d'exécuter l'application. Bien qu'il soit difficile de conserver ces informations dans votre configuration (il n'existe aucun outil automatisé à cette fin), ces résumés peuvent vous fournir une couche de protection supplémentaire.

Enregistrement de session

L'enregistrement de session est également une fonctionnalité moins connue de sudo . Après ma démo, de nombreuses personnes quittent mon discours avec des plans pour l'implémenter sur leur infrastructure. Pourquoi? Parce qu'avec l'enregistrement de session, vous voyez non seulement le nom de la commande, mais aussi tout ce qui s'est passé dans le terminal. Vous pouvez voir ce que font vos administrateurs même s'ils ont un accès au shell et les journaux ne montrent que bash est lancé.

Il y a une limitation, actuellement. Les enregistrements sont stockés localement, donc avec suffisamment d'autorisations, les utilisateurs peuvent supprimer leurs traces. Restez à l'affût des fonctionnalités à venir.

Plugins

À partir de la version 1.8, sudo remplacé par une architecture modulaire basée sur des plugins. Avec la plupart des fonctionnalités implémentées sous forme de plugins, vous pouvez facilement remplacer ou étendre les fonctionnalités de sudo en écrivant le vôtre. Il existe à la fois des plugins open source et commerciaux déjà disponibles pour sudo .

Dans mon discours, j'ai démontré le sudo_pair plugin, qui est disponible sur GitHub. Ce plugin est développé en Rust, ce qui signifie qu'il n'est pas si facile à compiler, et il est encore plus difficile de diffuser les résultats. D'autre part, le plugin fournit des fonctionnalités intéressantes, nécessitant qu'un deuxième administrateur approuve (ou refuse) l'exécution des commandes via sudo . Non seulement cela, mais les sessions peuvent être suivies à l'écran et interrompues en cas d'activité suspecte.

Dans une démo que j'ai faite lors d'une récente conférence à la conférence All Things Open, j'ai eu le tristement célèbre :

czanik@linux-mewy:~> sudo  rm -fr /

commande affichée à l'écran. Tout le monde retenait son souffle pour voir si mon ordinateur portable avait été détruit, mais il a survécu.

Journaux

Comme je l'ai déjà mentionné au début, la journalisation et les alertes sont une partie importante de sudo . Si vous ne vérifiez pas votre sudo se connecte régulièrement, il n'y a pas grand intérêt à utiliser sudo . Cet outil alerte par e-mail sur les événements spécifiés dans la configuration et enregistre tous les événements dans syslog . Les journaux de débogage peuvent être activés et utilisés pour déboguer des règles ou signaler des bogues.

Alertes

Les alertes par e-mail sont un peu démodées maintenant, mais si vous utilisez syslog-ng pour collecter vos messages de journal, votre sudo les messages du journal sont automatiquement analysés. Vous pouvez facilement créer des alertes personnalisées et les envoyer vers une grande variété de destinations, notamment Slack, Telegram, Splunk ou Elasticsearch. Vous pouvez en savoir plus sur cette fonctionnalité sur mon blog sur syslong-ng.com.

Configuration

Nous avons beaucoup parlé de sudo fonctionnalités et même vu quelques lignes de configuration. Maintenant, regardons de plus près comment sudo est configuré. La configuration elle-même est disponible dans /etc/sudoers , qui est un simple fichier texte. Néanmoins, il n'est pas recommandé de modifier ce fichier directement. Utilisez plutôt visudo , car cet outil vérifie également la syntaxe. Si vous n'aimez pas vi , vous pouvez changer l'éditeur à utiliser en pointant sur EDITOR variable d'environnement selon votre option préférée.

Avant de commencer à modifier le sudo configuration, assurez-vous que vous connaissez le mot de passe root. (Oui, même sur Ubuntu, où root n'a pas de mot de passe par défaut.) Tandis que visudo vérifie la syntaxe, il est facile de créer une configuration syntaxiquement correcte qui vous exclut de votre système.

Lorsque vous avez un mot de passe root à portée de main en cas d'urgence, vous pouvez commencer à modifier votre configuration. En ce qui concerne les sudoers fichier, il y a une chose importante à retenir :ce fichier est lu de haut en bas, et le dernier paramètre l'emporte. Ce que cela signifie pour vous, c'est que vous devez commencer par les paramètres génériques et placer les exceptions à la fin, sinon les exceptions sont remplacées par les paramètres génériques.

Vous pouvez trouver un simple sudoers fichier ci-dessous, basé sur celui de CentOS, et ajoutez quelques lignes dont nous avons parlé précédemment :

Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
Defaults:%wheel insults
Defaults !insults
Defaults log_output

Ce fichier commence par changer un certain nombre de valeurs par défaut. Viennent ensuite les règles habituelles par défaut :la racine utilisateur et membres de la roue groupe ont des autorisations complètes sur la machine. Ensuite, nous activons les insultes pour la roue groupe, mais désactivez-les pour tout le monde. La dernière ligne permet l'enregistrement de la session.

La configuration ci-dessus est syntaxiquement correcte, mais pouvez-vous repérer l'erreur logique ? Oui, il y en a un :les insultes sont désactivées pour tout le monde puisque le dernier paramètre générique remplace le paramètre précédent, plus spécifique. Une fois que vous avez inversé les deux lignes, la configuration fonctionne comme prévu :membres de la roue groupe reçoit des messages amusants, mais les autres utilisateurs ne les reçoivent pas.

Gestion des configurations

Une fois que vous devez maintenir les sudoers fichier sur plusieurs machines, vous souhaiterez probablement gérer votre configuration de manière centralisée. Il existe ici deux grandes possibilités open source. Les deux ont leurs avantages et leurs inconvénients.

Vous pouvez utiliser l'une des applications de gestion de configuration que vous utilisez également pour configurer le reste de votre infrastructure. Red Hat Ansible, Puppet et Chef ont tous des modules pour configurer sudo . Le problème avec cette approche est que la mise à jour des configurations est loin d'être en temps réel. De plus, les utilisateurs peuvent toujours modifier les sudoers déposer localement et modifier les paramètres.

Le sudo l'outil peut également stocker sa configuration dans LDAP. Dans ce cas, les modifications de configuration sont en temps réel et les utilisateurs ne peuvent pas jouer avec les sudoers dossier. D'autre part, cette méthode a aussi des limites. Par exemple, vous ne pouvez pas utiliser d'alias ou utiliser sudo lorsque le serveur LDAP est indisponible.

Nouvelles fonctionnalités

Il y a une nouvelle version de sudo Juste au coin de la rue. La version 1.9 comprendra de nombreuses nouvelles fonctionnalités intéressantes. Voici les fonctionnalités prévues les plus importantes :

  • Un service d'enregistrement pour collecter les enregistrements de session de manière centralisée, qui offre de nombreux avantages par rapport au stockage local :
    • Il est plus pratique de rechercher à un seul endroit.
    • Les enregistrements sont disponibles même si la machine de l'expéditeur est en panne.
    • Les enregistrements ne peuvent pas être supprimés par quelqu'un qui souhaite supprimer ses pistes.
  • L'audit le plugin n'ajoute pas de nouvelles fonctionnalités aux sudoers , mais fournit à la place une API permettant aux plugins d'accéder facilement à tout type de sudo journaux. Ce plugin permet de créer des journaux personnalisés à partir de sudo événements utilisant des plugins.
  • L'approbation le plugin permet les approbations de session sans utiliser de plugins tiers.
  • Et mon préféré :la prise en charge de Python pour les plug-ins, qui vous permet d'étendre facilement sudo utiliser du code Python au lieu de coder nativement en C.

Conclusion

J'espère que cet article vous a prouvé que sudo est bien plus qu'un simple préfixe. Il existe des tonnes de possibilités pour affiner les autorisations sur votre système. Vous pouvez non seulement affiner les autorisations, mais également améliorer la sécurité en vérifiant les résumés. Les enregistrements de session vous permettent de vérifier ce qui se passe sur vos systèmes. Vous pouvez également étendre les fonctionnalités de sudo en utilisant des plugins, soit en utilisant quelque chose de déjà disponible, soit en écrivant le vôtre. Enfin, étant donné la liste des fonctionnalités à venir, vous pouvez voir que même si sudo a des décennies, c'est un projet vivant qui évolue constamment.

Si vous voulez en savoir plus sur sudo , voici quelques ressources :

  • Le sudo site Web

  • Le sudo blogue

  • Suivez-nous sur Twitter


Linux
  1. 30 choses que vous ne saviez pas sur le noyau Linux

  2. Qu'est-ce que l'hébergement VPS ? Tout ce que vous devez savoir sur les serveurs privés virtuels

  3. Ce que les administrateurs système doivent savoir sur l'utilisation de Bash

  4. Qu'est-ce qu'un VPN ? Tout ce que vous devez savoir sur les VPN

  5. Ce qu'il faut savoir sur Debi a Volume Linux Server

Tout ce que vous devez savoir sur le serveur Linux Ubuntu

Tout ce que vous devez savoir sur le serveur Linux OpenSSH

Tout ce que vous devez savoir sur le système d'exploitation Linux Zorin

Tout ce que vous devez savoir sur le système d'exploitation Peppermint Linux

Tout ce que vous devez savoir sur la distribution Linux Mint

Tout ce que vous devez savoir sur les inodes sous Linux