GNU/Linux >> Tutoriels Linux >  >> Linux

5 nouvelles fonctionnalités sudo que les administrateurs système doivent connaître en 2022

Lorsque vous souhaitez accorder un accès administratif à certains de vos utilisateurs tout en contrôlant et en vérifiant ce qu'ils font sur vos systèmes, vous utilisez sudo . Cependant, même avec sudo , il y a pas mal de problèmes invisibles - pensez simplement à donner l'accès au shell. sudo récent publie des fonctionnalités supplémentaires qui vous permettent de voir ces problèmes et même de les contrôler. Par exemple, vous pouvez activer des messages de journal plus détaillés et plus faciles à traiter et consigner chaque commande exécutée dans une session shell.

Certaines de ces fonctionnalités sont inédites. Certains d'entre eux s'appuient sur des fonctionnalités introduites dans la version 1.9.0 ou même antérieure. Par exemple, sudo pourrait enregistrer tout ce qui s'est passé sur un terminal, même dans la version 1.8. Cependant, le système stockait ces enregistrements localement et ils étaient faciles à supprimer, en particulier ceux où les enregistrements étaient les plus utiles :les sessions Shell. La version 1.9.0 a ajouté une collecte d'enregistrements de session centrale, de sorte que les enregistrements ne peuvent pas être supprimés par l'utilisateur local, et les versions récentes ont ajouté des relais, rendant la collecte encore plus robuste.

Si vous ne connaissez que les bases de sudo ou utilisé uniquement la version 1.8 auparavant, je vous recommande de lire mon article précédent.

1. Journalisation au format JSON

La première nouvelle fonctionnalité que je souhaite introduire est la journalisation au format JSON. Je suis un fanatique de la journalisation (j'ai commencé à travailler sur le syslog-ng projet il y a douze ans), et cette fonctionnalité est la première introduite depuis mon article sur Opensource.com. Lorsqu'il est activé, sudo enregistre beaucoup plus d'informations et le fait d'une manière plus facile à analyser.

syslog traditionnel messages par sudo sont courts et ne contiennent que le minimum d'informations nécessaires. Cela est dû aux contraintes de l'ancien syslog implémentations : les messages de plus de 1 k de taille ont été supprimés ou tronqués :

Jan 28 13:56:27 localhost.localdomain sudo[10419]: czanik : TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

syslog plus récent les implémentations peuvent gérer des tailles de message beaucoup plus importantes. syslog-ng accepte les messages de journal jusqu'à 64 Ko par défaut (mais bien sûr, il peut être plus petit ou plus grand, selon la configuration réelle).

Le même événement contient beaucoup plus d'informations s'il est enregistré au format JSON. Plus ne signifie pas plus difficile à gérer :les messages au format JSON sont plus faciles à analyser par de nombreuses applications logicielles de gestion des journaux. Voici un exemple :

Jan 28 13:58:20 localhost.localdomain sudo[10518]: @cee:{"sudo":{"accept":{"uuid":"616bc9efcf-b239-469d-60ee-deb5af8ce6","server_time":{"seconds":1643374700,"nanoseconds":222446715,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submit_time":{"seconds":1643374700,"nanoseconds":209935349,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submituser":"czanik","command":"/bin/bash","runuser":"root","runcwd":"/home/czanik","ttyname":"/dev/pts/0","submithost":"localhost.localdomain","submitcwd":"/home/czanik","runuid":0,"columns":118,"lines":60,"runargv":["/bin/bash"],"runenv":["LANG=en_US.UTF-8","HOSTNAME=localhost.localdomain","SHELL=/bin/bash","TERM=xterm-256color","PATH=/home/czanik/.local/bin:/home/czanik/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin","MAIL=/var/mail/root","LOGNAME=root","USER=root","HOME=/root","SUDO_COMMAND=/bin/bash","SUDO_USER=czanik","SUDO_UID=1000","SUDO_GID=1000"]}}}

Vous pouvez activer les messages de journal au format JSON dans les sudoers fichier :

Defaults log_format=json

Vous pouvez en savoir plus sur l'utilisation des messages de journal au format JSON à partir de sudo depuis mon blog syslog-ng.

2. Collecte centralisée des journaux à l'aide de sudo_logsrvd

Une autre fonctionnalité liée à la journalisation dans 1.9.4 collecte tous les sudo consigner les messages (y compris les échecs) à l'aide de sudo_logsrvd . Auparavant, le système n'enregistrait les sessions réussies que lorsque sudo_logsrvd effectivement fait un enregistrement. La journalisation se fait toujours via syslog par défaut à la fin.

Pourquoi est-ce important? Tout d'abord, vous pouvez collecter tout ce qui concerne sudo en un seul endroit :les enregistrements de session et tous les messages de journal correspondants. Deuxièmement, il peut également garantir une journalisation correcte de tous les sudo -événements liés, comme sudo peut refuser d'exécuter des commandes si sudo_logsrvd est inaccessible.

Vous pouvez activer la journalisation vers sudo_logsrvd avec le paramètre suivant dans les sudoers fichier (bien sûr, remplacez l'adresse IP):

Defaults log_servers=172.16.167.150

Si vous voulez des messages de journal au format JSON, vous avez besoin du paramètre suivant dans le [eventlog] section du sudo_logsrvd configuration :

log_format = json

Sinon, sudo_logsrvd utilise le traditionnel sudo format de journal avec une simple modification :il inclut également des informations sur l'hôte d'où provient le journal :

Nov 18 12:40:16 centos8splunk.localdomain sudo[21028]:   czanik : 3 incorrect password attempts ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Nov 18 12:40:23 centos8splunk.localdomain sudo[21028]:   czanik : HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; TSID=00000A ; COMMAND=/bin/bash
Nov 18 12:40:30 centos8splunk.localdomain sudo[21028]:   czanik : command rejected by I/O plugin ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

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

3. Relais

Quand ils ont initialement introduit sudo_logsrvd (version 1.9.0) pour la collecte centrale des enregistrements de session, les clients ne pouvaient envoyer que des enregistrements directement. La version 1.9.7 a introduit le concept de relais. Avec les relais, au lieu d'envoyer des enregistrements directement, vous pouvez envoyer des enregistrements à plusieurs niveaux d'hôtes intermédiaires, qui structurent votre réseau.

Pourquoi est-ce important? Tout d'abord, les relais permettent de collecter les enregistrements de session même si l'hébergeur central est indisponible en raison de problèmes de réseau ou de maintenance. Par défaut, sudo refuse de s'exécuter lorsqu'il ne peut pas envoyer d'enregistrements, afin que les relais puissent s'assurer que vous pouvez utiliser sudo 24 heures sur 24.

Deuxièmement, cela vous permet également d'avoir des contrôles plus stricts sur votre réseau :au lieu d'ouvrir le pare-feu pour tous les hôtes au sudo_logsrvd central , il vous suffit d'autoriser le passage de votre relais.

Enfin, il vous permet de collecter des enregistrements de session à partir de réseaux sans accès direct à Internet, comme les réseaux privés AWS, où vous pouvez installer sudo_logsrvd en mode relais sur l'hôte passerelle.

Lorsque vous utilisez des relais, configurer le sudo clients et le sudo_logsrvd central reste le même. Sur l'hôte relais, ajoutez la ligne suivante au [relay] section de sudo_logsrvd.conf :

relay_host = 172.16.167.161

Si la connexion réseau vers le serveur central est connue pour être problématique, vous pouvez configurer le relais pour stocker les enregistrements avant de les retransmettre :

store_first = true

4. Sous-commandes de journalisation

Avez-vous déjà voulu savoir ce qui se passe dans une session shell démarrée via sudo ? Oui, les enregistrements de session sont là, mais regarder des heures d'enregistrements juste pour voir quelques commandes exécutées est ennuyeux et une énorme perte de temps. Heureusement, la version 1.9.8 a introduit des sous-commandes de journalisation. Il suffit maintenant de vérifier régulièrement les messages de votre journal et de ne regarder les enregistrements que lorsqu'un événement suspect se produit.

Vous n'avez même pas besoin d'une règle pour autoriser l'accès au shell à accéder au shell, juste l'accès à un éditeur. La plupart des éditeurs peuvent exécuter des commandes externes. Mon éditeur préféré est JOE, et c'est ce que vous pouvez voir quand je le lance via sudo :

Aug 30 13:03:00 czplaptop sudo[10150]:   czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe

Rien d'intéressant, juste un éditeur, même si je crée un shell et supprime quelques fichiers et partitions de ce shell. Voyons maintenant ce qui se passe lorsque vous activez les sous-commandes de journalisation :

Aug 30 13:13:14 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/sh -c /bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/readlink /proc/10889/exe
[...]
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/sed -r s@/*:|([^\\]):@\1\n@g;H;x;s@/\n@\n@
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/tty
Aug 30 13:13:42 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/id
Aug 30 13:13:56 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/ls -A -N --color=none -T 0 /usr/share/syslog-ng/include/scl/

J'ai omis des dizaines de lignes pour économiser de l'espace, mais vous pouvez toujours voir que j'ai démarré un shell, et les commandes exécutées par bash_profile sont également disponibles dans les logs.

Vous pouvez activer les sous-commandes de journalisation dans les sudoers fichier en utilisant le paramètre suivant :

Defaults log_subcmds

Dans le traditionnel sudo logs, vous pouvez voir à partir du sudo ID de processus indiquant que ces journaux proviennent du même sudo session. Si vous activez la journalisation au format JSON, comme indiqué précédemment, sudo enregistre beaucoup plus d'informations dans les journaux, ce qui facilite leur analyse.

5. Intercepter les sous-commandes

Les sous-commandes de journalisation suppriment la plupart des problèmes cachés de sudo , mais il y a des situations où vous ne voulez pas seulement regarder ce qui se passe mais aussi contrôler le flux des événements. Par exemple, vous devez accorder un accès shell à un utilisateur, mais vous souhaitez toujours l'empêcher d'exécuter une commande spécifique. L'interception est idéale dans de tels cas. Il existe, bien sûr, certaines limitations, comme vous ne pouvez pas limiter les commandes intégrées des shells.

Disons le who la commande est dangereuse. Vous pouvez activer l'interception en deux étapes :la première l'active, la seconde la configure. Dans ce cas, mon utilisateur n'est pas autorisé à exécuter who :

Defaults intercept
czanik ALL = (ALL) ALL, !/usr/bin/who

Voici ce qui se passe lorsque je démarre une session root shell via sudo et essayez d'exécuter who :

$ sudo -s
# who
Sorry, user czanik is not allowed to execute '/usr/bin/who' as root on czplaptop.
bash: /usr/bin/who: Permission denied

Vous pouvez facilement désactiver complètement les shells en cours d'exécution :

Defaults intercept
Cmnd_Alias SHELLS=/usr/bin/bash, /usr/bin/sh, /usr/bin/csh
czanik ALL = (ALL) ALL, !SHELLS

Cependant, cela signifie également que vous ne pouvez pas démarrer de sessions shell via sudo . Non seulement cela, mais vous ne pouvez pas non plus exécuter de commandes externes à partir d'éditeurs. C'est ce qui se passe lorsque j'essaie de démarrer le ls commande depuis vi :

$ sudo vi /etc/issue
Sorry, user czanik is not allowed to execute '/bin/bash -c /bin/ls' as root on czplaptop.
Cannot execute shell /bin/bash
Press ENTER or type command to continue

Quelle est la prochaine ?

J'espère que la lecture de mon article vous donnera envie d'essayer vous-même ces nouvelles fonctionnalités. Vous pouvez installer le dernier sudo sur de nombreuses distributions Linux et variantes UNIX à partir de votre gestionnaire de packages, ou utilisez un programme d'installation binaire disponible sur le site Web Sudo.

Cet article vous donne juste un aperçu des nouvelles possibilités. Si vous souhaitez en savoir plus sur ces fonctionnalités, visitez le site Web, qui héberge des pages de manuel, ainsi que le blog Sudo.


Linux
  1. Nouvelles fonctionnalités dans Fedora 26

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

  3. 6 options pour tcpdump que vous devez connaître

  4. Meilleures pratiques de test d'intrusion que vous devez connaître

  5. sudo -i mais conserve le répertoire de travail actuel

9 nouvelles fonctionnalités dans Ubuntu 18.10 Cosmic Cuttlefish

Compression de fichiers Linux :tout ce que vous devez savoir

Ce que vous devez savoir sur IPv6

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

Lancement du noyau Linux 5.0, nouvelles fonctionnalités et améliorations !