GNU/Linux >> LINUX-Kenntnisse >  >> Linux

5 neue sudo-Funktionen, die Systemadministratoren im Jahr 2022 kennen müssen

Wenn Sie einigen Ihrer Benutzer administrativen Zugriff gewähren und gleichzeitig kontrollieren und überprüfen möchten, was sie auf Ihren Systemen tun, verwenden Sie sudo . Allerdings auch mit sudo , gibt es einige ungesehene Probleme – denken Sie nur daran, Shell-Zugriff zu gewähren. Letztes sudo veröffentlicht zusätzliche Funktionen, mit denen Sie diese Probleme sehen und sogar kontrollieren können. Beispielsweise können Sie detailliertere und einfacher zu verarbeitende Protokollmeldungen aktivieren und jeden in einer Shell-Sitzung ausgeführten Befehl protokollieren.

Einige dieser Funktionen sind brandneu. Einige von ihnen bauen auf Funktionen auf, die in Version 1.9.0 oder sogar früher eingeführt wurden. Beispiel:sudo konnte alles aufzeichnen, was auf einem Terminal passierte, sogar in Version 1.8. Das System speicherte diese Aufzeichnungen jedoch lokal und sie waren leicht zu löschen, insbesondere diejenigen, bei denen die Aufzeichnungen am nützlichsten waren:Shell-Sitzungen. Version 1.9.0 hat eine zentrale Sitzungsaufzeichnungssammlung hinzugefügt, sodass Aufzeichnungen nicht vom lokalen Benutzer gelöscht werden können, und neuere Versionen haben Relais hinzugefügt, wodurch die Sammlung noch robuster wird.

Wenn Sie nur die Grundlagen von sudo kennen oder zuvor nur Version 1.8 verwendet habe, empfehle ich die Lektüre meines vorherigen Artikels.

1. Protokollierung im JSON-Format

Die erste neue Funktion, die ich vorstellen möchte, ist die Protokollierung im JSON-Format. Ich bin ein Protokollierungsfanatiker (ich habe angefangen, am syslog-ng zu arbeiten Projekt vor zwölf Jahren), und diese Funktion ist die erste, die seit meinem Opensource.com-Artikel eingeführt wurde. Wenn aktiviert, sudo protokolliert viel mehr Informationen und ist einfacher zu analysieren.

Herkömmliches syslog Nachrichten per sudo sind kurz und enthalten nur das Minimum an notwendigen Informationen. Dies liegt an Beschränkungen durch das alte syslog Implementierungen:Nachrichten über 1k Größe wurden verworfen oder abgeschnitten:

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

Neueres syslog Implementierungen können viel größere Nachrichtengrößen verarbeiten. syslog-ng akzeptiert standardmäßig Protokollnachrichten bis zu einer Größe von 64 KB (aber natürlich kann es je nach aktueller Konfiguration kleiner oder größer sein).

Dasselbe Ereignis enthält viel mehr Informationen, wenn es im JSON-Format protokolliert wird. Mehr bedeutet nicht schwieriger zu handhaben:JSON-formatierte Nachrichten lassen sich von vielen Protokollverwaltungssoftwareanwendungen einfacher analysieren. Hier ist ein Beispiel:

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"]}}}

Sie können Protokollnachrichten im JSON-Format in den sudoers aktivieren Datei:

Defaults log_format=json

Weitere Informationen zum Arbeiten mit Protokollnachrichten im JSON-Format finden Sie in sudo aus meinem syslog-ng-Blog.

2. Protokolle zentral mit sudo_logsrvd

sammeln

Ein weiteres protokollierungsbezogenes Feature in 1.9.4 ist das Sammeln aller sudo Log-Meldungen (einschließlich Fehler) mit sudo_logsrvd . Bisher hat das System nur erfolgreiche Sitzungen protokolliert, wenn sudo_logsrvd tatsächlich eine Aufnahme gemacht. Die Protokollierung erfolgt weiterhin über syslog standardmäßig am Ende.

Warum ist das wichtig? Zunächst einmal können Sie alles sammeln, was mit sudo zu tun hat an einem Ort:Sowohl die Sitzungsaufzeichnungen als auch alle entsprechenden Protokollmeldungen. Zweitens kann es auch eine ordnungsgemäße Protokollierung aller sudo garantieren -bezogene Ereignisse, als sudo kann die Ausführung von Befehlen verweigern, wenn sudo_logsrvd ist unzugänglich.

Sie können die Protokollierung auf sudo_logsrvd aktivieren mit folgender Einstellung in den sudoers Datei (ersetzen Sie natürlich die IP-Adresse):

Defaults log_servers=172.16.167.150

Wenn Sie Protokollmeldungen im JSON-Format wünschen, benötigen Sie die folgende Einstellung im [eventlog] Abschnitt des sudo_logsrvd Konfiguration:

log_format = json

Andernfalls sudo_logsrvd verwendet das traditionelle sudo log-Format mit einer einfachen Modifikation:Es enthält auch Informationen über den Host, von dem das Log stammt:

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

Mehr über Systemadministratoren

  • Sysadmin-Blog aktivieren
  • Das automatisierte Unternehmen:ein Leitfaden zur IT-Verwaltung mit Automatisierung
  • eBook:Ansible-Automatisierung für SysAdmins
  • Geschichten aus der Praxis:Ein Leitfaden für Systemadministratoren zur IT-Automatisierung
  • eBook:Ein Leitfaden zu Kubernetes für SREs und Systemadministratoren
  • Neueste Sysadmin-Artikel

3. Relais

Als sie ursprünglich sudo_logsrvd eingeführt haben (Version 1.9.0) für die zentrale Sammlung von Sitzungsaufzeichnungen konnten Clients Aufzeichnungen nur direkt senden. Version 1.9.7 führte das Konzept von Relais ein. Anstatt Aufzeichnungen direkt zu senden, können Sie mit Relais Aufzeichnungen an mehrere Ebenen von Zwischenhosts senden, die Ihr Netzwerk strukturieren.

Warum ist das wichtig? Erstens ermöglichen Relays das Sammeln von Sitzungsaufzeichnungen, selbst wenn der zentrale Host aufgrund von Netzwerkproblemen oder Wartungsarbeiten nicht verfügbar ist. Standardmäßig sudo verweigert die Ausführung, wenn es keine Aufzeichnungen senden kann, sodass Relays sicherstellen können, dass Sie sudo verwenden können rund um die Uhr.

Zweitens ermöglicht es Ihnen auch strengere Kontrollen in Ihrem Netzwerk:Anstatt die Firewall für alle Hosts zum zentralen sudo_logsrvd zu öffnen , müssen Sie nur Ihr Relay durchlassen.

Schließlich ermöglicht es Ihnen, Sitzungsaufzeichnungen von Netzwerken ohne direkten Internetzugang zu sammeln, wie z. B. privaten AWS-Netzwerken, in denen Sie sudo_logsrvd installieren können im Relay-Modus auf dem Gateway-Host.

Wenn Sie Relais verwenden, konfigurieren Sie sudo Clients und dem zentralen sudo_logsrvd Bleibt das selbe. Fügen Sie auf dem Relay-Host die folgende Zeile zu [relay] hinzu Abschnitt von sudo_logsrvd.conf :

relay_host = 172.16.167.161

Wenn bekannt ist, dass die Netzwerkverbindung zum zentralen Server problematisch ist, können Sie das Relais so konfigurieren, dass Aufzeichnungen gespeichert werden, bevor sie weitergeleitet werden:

store_first = true

4. Unterbefehle protokollieren

Wollten Sie schon immer wissen, was in einer Shell-Sitzung passiert, die mit sudo gestartet wurde ? Ja, Sitzungsaufzeichnungen sind vorhanden, aber stundenlange Aufzeichnungen anzusehen, nur um zu sehen, wie ein paar Befehle ausgeführt werden, ist langweilig und eine riesige Zeitverschwendung. Glücklicherweise wurden mit Version 1.9.8 Unterbefehle für die Protokollierung eingeführt. Jetzt reicht es aus, Ihre Log-Meldungen regelmäßig zu überprüfen und Aufzeichnungen nur dann anzusehen, wenn etwas Verdächtiges passiert.

Sie brauchen nicht einmal eine Regel, um Shell-Zugriff zu erlauben, um Shell-Zugriff zu haben, sondern nur Zugriff auf einen Editor. Die meisten Editoren können externe Befehle ausführen. Mein Lieblingseditor ist JOE, und das können Sie sehen, wenn ich ihn über sudo starte :

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

Nichts Interessantes, nur ein Editor – selbst wenn ich eine Shell spawne und ein paar Dateien und Partitionen aus dieser Shell lösche. Lassen Sie uns nun sehen, was passiert, wenn Sie Protokollierungsunterbefehle aktivieren:

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/

Ich habe Dutzende von Zeilen weggelassen, um Platz zu sparen, aber Sie können immer noch sehen, dass ich eine Shell gestartet habe und die Befehle von bash_profile ausgeführt wurden sind auch in den Protokollen verfügbar.

Sie können Unterbefehle für die Protokollierung in den sudoers aktivieren Datei mit der folgenden Einstellung:

Defaults log_subcmds

Im traditionellen sudo logs, können Sie über sudo einsehen Prozess-ID, dass diese Protokolle vom selben sudo stammen Sitzung. Wenn Sie die JSON-formatierte Protokollierung aktivieren, wie zuvor gezeigt, sudo protokolliert viel mehr Informationen in den Protokollen, was deren Analyse erleichtert.

5. Unterbefehle abfangen

Das Protokollieren von Unterbefehlen entfernt die meisten versteckten Problembereiche aus sudo , aber es gibt Situationen, in denen man nicht nur zusehen, sondern auch den Ablauf der Ereignisse kontrollieren möchte. Beispielsweise müssen Sie einem Benutzer Shell-Zugriff gewähren, ihn aber trotzdem daran hindern, einen bestimmten Befehl auszuführen. In solchen Fällen ist das Abfangen ideal. Es gibt natürlich einige Einschränkungen, wie Sie die eingebauten Befehle von Shells nicht einschränken können.

Sagen wir mal der who Befehl ist gefährlich. Sie können das Abfangen in zwei Schritten aktivieren:Der erste aktiviert es, der zweite konfiguriert es. In diesem Fall darf mein Benutzer who nicht ausführen :

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

Folgendes passiert, wenn ich eine Root-Shell-Sitzung über sudo starte und versuche who auszuführen :

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

Sie können laufende Shells ganz einfach ganz deaktivieren:

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

Es bedeutet jedoch auch, dass Sie Shell-Sitzungen nicht über sudo starten können . Nicht nur das, Sie können auch keine externen Befehle von Editoren ausführen. Das passiert, wenn ich versuche, ls zu starten Befehl innerhalb von 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

Was kommt als nächstes?

Ich hoffe, dass Sie beim Lesen meines Artikels Lust bekommen, diese neuen Funktionen selbst auszuprobieren. Sie können das neueste sudo installieren auf vielen Linux-Distributionen und UNIX-Varianten von Ihrem Paketmanager oder verwenden Sie ein binäres Installationsprogramm, das auf der Sudo-Website verfügbar ist.

Dieser Artikel gibt Ihnen nur einen Überblick über neue Möglichkeiten. Wenn Sie mehr über diese Funktionen erfahren möchten, besuchen Sie die Website, auf der Handbuchseiten gehostet werden, sowie den Sudo-Blog.


Linux
  1. Neue Funktionen in Fedora 26

  2. Was Systemadministratoren über die Verwendung von Bash wissen müssen

  3. Echte Systemadministratoren verwenden kein Sudo

  4. 6 Optionen für tcpdump, die Sie kennen müssen

  5. sudo -i aber aktuelles Arbeitsverzeichnis beibehalten

9 neue Funktionen in Ubuntu 18.10 Cosmic Cuttlefish

Linux-Dateikomprimierung:Alles, was Sie wissen müssen

Was Sie über IPv6 wissen müssen

Alles, was Sie über Linux Zorin OS wissen müssen

Alles, was Sie über Peppermint Linux OS wissen müssen

Linux Kernel 5.0 veröffentlicht, neue Funktionen und Verbesserungen!