In Linux und anderen Unix-ähnlichen Betriebssystemen kann nur der Root-Benutzer alle Befehle ausführen und bestimmte kritische Operationen am System durchführen, wie z. B. Pakete installieren und aktualisieren, Pakete entfernen, Benutzer und Gruppen erstellen, wichtige Systemkonfigurationsdateien ändern und so weiter.
Ein Systemadministrator, der die Rolle des Root-Benutzers übernimmt, kann jedoch anderen normalen Systembenutzern mit Hilfe des sudo-Befehls und einiger Konfigurationen gestatten, einige Befehle auszuführen sowie eine Reihe wichtiger Systemoperationen durchzuführen, einschließlich der oben genannten.
Alternativ kann der Systemadministrator das Root-Benutzerpasswort teilen (was keine empfohlene Methode ist), sodass normale Systembenutzer über den su-Befehl Zugriff auf das Root-Benutzerkonto haben.
Sudo ermöglicht einem berechtigten Benutzer die Ausführung eines Befehls als Root (oder eines anderen Benutzers), wie in der Sicherheitsrichtlinie angegeben:
- Es liest und analysiert /etc/sudoers, sucht den aufrufenden Benutzer und seine Berechtigungen,
- dann fordert es den aufrufenden Benutzer zur Eingabe eines Passworts auf (normalerweise das Passwort des Benutzers, kann jedoch auch das Passwort des Zielbenutzers sein. Oder es kann mit dem NOPASSWD-Tag übersprungen werden),
- nachdem das geschehen ist, erstellt sudo einen Kindprozess, in dem es setuid() aufruft, um zum Zielbenutzer zu wechseln
- dann führt es eine Shell oder den als Argumente angegebenen Befehl im obigen Kindprozess aus.
Unten sind zehn /etc/sudoers Dateikonfigurationen zur Änderung des Verhaltens des sudo Befehls unter Verwendung von Defaults Einträgen.
$ sudo cat /etc/sudoers
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults logfile="/var/log/sudo.log" Defaults lecture="always" Defaults badpass_message="Password is wrong, please try again" Defaults passwd_tries=5 Defaults insults Defaults log_input,log_output
Arten von Defaults-Einträgen
Defaults parameter, parameter_list #affect all users on any host Defaults@Host_List parameter, parameter_list #affects all users on a specific host Defaults:User_List parameter, parameter_list #affects a specific user Defaults!Cmnd_List parameter, parameter_list #affects a specific command Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user
Für den Umfang dieses Leitfadens werden wir uns auf den ersten Typ von Defaults in den folgenden Formen konzentrieren. Parameter können Flags, Ganzzahlen, Zeichenfolgen oder Listen sein.
Sie sollten beachten, dass Flags implizit boolesch sind und mit dem '!'
Operator deaktiviert werden können, und Listen haben zwei zusätzliche Zuweisungsoperatoren, +=
(zur Liste hinzufügen) und -=
(aus der Liste entfernen).
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. Einen sicheren PATH setzen
Dies ist der Pfad, der für jeden mit sudo ausgeführten Befehl verwendet wird, er hat zwei Bedeutungen:
- Wird verwendet, wenn ein Systemadministrator sudo-Benutzern nicht vertraut, eine sichere PATH-Umgebungsvariable zu haben
- Um „Root-Pfad“ und „Benutzerpfad“ zu trennen, sind nur Benutzer, die durch exempt_group definiert sind, von dieser Einstellung nicht betroffen.
Um ihn zu setzen, fügen Sie die Zeile hinzu:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. Sudo bei TTY-Benutzeranmeldung aktivieren
Um sudo zu ermöglichen, von einer echten tty aufgerufen zu werden, aber nicht über Methoden wie cron oder cgi-bin Skripte, fügen Sie die Zeile hinzu:
Defaults requiretty
3. Sudo-Befehl unter Verwendung eines pty ausführen
A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.
Um ein solches Szenario zu vermeiden, können Sie sudo konfigurieren, um andere Befehle nur von einem Pseudo-pty unter Verwendung des Parameters use_pty
auszuführen, unabhängig davon, ob die I/O-Protokollierung aktiviert ist oder nicht, wie folgt:
Defaults use_pty
4. Ein Sudo-Protokolldatei erstellen
Standardmäßig protokolliert sudo über syslog(3). Um jedoch eine benutzerdefinierte Protokolldatei anzugeben, verwenden Sie den Parameter logfile wie folgt:
Defaults logfile="/var/log/sudo.log"
Um Hostnamen und das vierstellige Jahr in der benutzerdefinierten Protokolldatei zu protokollieren, verwenden Sie die Parameter log_host und log_year wie folgt:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
Hier ist ein Beispiel für eine benutzerdefinierte sudo-Protokolldatei:

5. Protokollieren von Sudo-Befehlseingabe/-ausgabe
Die Parameter log_input und log_output ermöglichen es sudo, einen Befehl in einem Pseudo-TTY auszuführen und alle Benutzereingaben sowie alle Ausgaben, die an den Bildschirm gesendet werden, zu protokollieren.
Das Standard-I/O-Protokollverzeichnis ist /var/log/sudo-io, und wenn es eine Sitzungssequenznummer gibt, wird sie in diesem Verzeichnis gespeichert. Sie können ein benutzerdefiniertes Verzeichnis über den Parameter iolog_dir angeben.
Defaults log_input, log_output
Es werden einige Escape-Sequenzen unterstützt, wie z.B. %{seq}
, die sich zu einer monoton steigenden Basis-36-Sequenznummer ausdehnt, wie z.B. 000001, wobei jeweils zwei Ziffern verwendet werden, um ein neues Verzeichnis zu bilden, z.B. 00/00/01 wie im folgenden Beispiel:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

Sie können die restlichen Dateien in diesem Verzeichnis mit dem cat-Befehl anzeigen.
6. Vortrag für Sudo-Benutzer
Um Sudo-Benutzer über die Verwendung von Passwörtern im System zu belehren, verwenden Sie den Parameter lecture wie unten beschrieben.
Es hat 3 mögliche Werte:
- always – immer einen Benutzer belehren.
- einmal – nur dem Benutzer das erste Mal erklären, wenn er den sudo-Befehl ausführt (dies wird verwendet, wenn kein Wert angegeben ist)
- niemals – dem Benutzer niemals erklären.
Defaults lecture="always"
Zusätzlich können Sie eine benutzerdefinierte Erklärungsdatei mit dem lecture_file-Parameter festlegen, geben Sie die entsprechende Nachricht in der Datei ein:
Defaults lecture_file="/path/to/file"

7. Zeigen Sie eine benutzerdefinierte Nachricht an, wenn Sie das falsche sudo-Passwort eingeben
Wenn ein Benutzer ein falsches Passwort eingibt, wird eine bestimmte Nachricht auf der Befehlszeile angezeigt. Die Standardnachricht lautet „Entschuldigung, versuchen Sie es erneut„, Sie können die Nachricht mit dem badpass_message-Parameter wie folgt ändern:
Defaults badpass_message="Password is wrong, please try again"
8. Erhöhen Sie das sudo-Passwort-Versuchslimit
Der Parameter passwd_tries wird verwendet, um die Anzahl der Versuche festzulegen, die ein Benutzer hat, um ein Passwort einzugeben.
Der Standardwert beträgt 3:
Defaults passwd_tries=5

Um ein Passwort-Timeout (Standardwert sind 5 Minuten) mit dem passwd_timeout-Parameter festzulegen, fügen Sie die folgende Zeile hinzu:
Defaults passwd_timeout=2
9. Lassen Sie Sudo Sie beleidigen, wenn Sie das falsche Passwort eingeben
Falls ein Benutzer ein falsches Passwort eingibt, zeigt sudo Beleidigungen auf dem Terminal mit dem Beleidigungsparameter an. Dies schaltet automatisch den badpass_message-Parameter aus.
Defaults insults

Weitere Informationen: Lassen Sie Sudo Sie beleidigen, wenn Sie das falsche Passwort eingeben
10. Erfahren Sie mehr über Sudo-Konfigurationen
Du kannst weitere nützliche sudo-Befehlskonfigurationen durch Lesen von: Unterschied zwischen su und sudo und wie man sudo in Linux konfiguriert erfahren.
Das war’s! Du kannst anderen Linux-Benutzern dort draußen über den Kommentarbereich weitere nützliche sudo-Befehlskonfigurationen oder Tricks und Tipps mit Linux mitteilen.
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/