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.