In Linux und anderen Unix-ähnlichen Betriebssystemen nur die root Der Benutzer kann alle Befehle ausführen und bestimmte kritische Vorgänge auf dem System ausführen, wie z. B. Installieren und Aktualisieren, Pakete entfernen, Benutzer und Gruppen erstellen, wichtige Systemkonfigurationsdateien ändern und so weiter.
Ein Systemadministrator, der die Rolle des Root-Benutzers einnimmt, kann jedoch anderen normalen Systembenutzern mit Hilfe des Befehls sudo und einigen Konfigurationen erlauben, einige Befehle auszuführen sowie eine Reihe wichtiger Systemoperationen auszuführen, einschließlich der oben genannten.
Alternativ kann der Systemadministrator das Root-Benutzerpasswort teilen (was keine empfohlene Methode ist), sodass normale Systembenutzer über su Zugriff auf das Root-Benutzerkonto haben Befehl.
sudo erlaubt einem berechtigten Benutzer, einen Befehl als root (oder ein anderer Benutzer) auszuführen, wie in der Sicherheitsrichtlinie angegeben:
- Es liest und parst /etc/sudoers , sucht den aufrufenden Benutzer und seine Berechtigungen,
- fragt dann den aufrufenden Benutzer nach einem Passwort (normalerweise das Passwort des Benutzers, aber es kann auch das Passwort des Zielbenutzers sein. Oder es kann mit dem NOPASSWD-Tag übersprungen werden),
- Danach erstellt sudo einen untergeordneten Prozess, in dem es setuid() aufruft um zum Zielbenutzer zu wechseln
- Als nächstes führt es eine Shell oder den Befehl aus, der oben als Argumente im untergeordneten Prozess angegeben wurde.
Unten sind zehn /etc/sudoers Dateikonfigurationen, um das Verhalten von sudo zu ändern Befehl mit Standards Einträge.
$ sudo cat /etc/sudoers/etc/sudoers-Datei
# # 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 Standardeinträgen
Defaults parameter, parameter_list #affect all users on any host [email protected]_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 beschränken wir uns auf den ersten Typ von Standardeinstellungen in den unten stehenden Formularen. Parameter können Flags, Integer-Werte, Strings oder Listen sein.
Beachten Sie, dass Flags implizit boolesch sind und mit '!'
deaktiviert werden können -Operator und Listen haben zwei zusätzliche Zuweisungsoperatoren, +=
(zur Liste hinzufügen) und -=
(von Liste entfernen).
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. Legen Sie einen sicheren PATH fest
Dies ist der Pfad, der für jeden Befehl verwendet wird, der mit sudo ausgeführt wird, er hat zwei Bedeutungen:
- Wird verwendet, wenn ein Systemadministrator sudo-Benutzern nicht zutraut, eine sichere PATH-Umgebungsvariable zu haben
- Um „Stammpfad“ und „Benutzerpfad“ zu trennen, nur Benutzer, die durch exempt_group definiert sind sind von dieser Einstellung nicht betroffen.
Fügen Sie dazu die Zeile hinzu:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. Sudo bei TTY-Benutzeranmeldesitzung aktivieren
Damit sudo von einem echten tty aufgerufen werden kann aber nicht durch Methoden wie cron oder cgi-bin Skripte, fügen Sie die Zeile hinzu:
Defaults requiretty
3. Sudo-Befehl mit einem pty ausführen
Ein paar Mal können Angreifer ein bösartiges Programm (z. B. einen Virus oder eine Malware) mit sudo ausführen, was wiederum einen Hintergrundprozess forken würde, der auf dem Endgerät des Benutzers verbleibt, selbst wenn die Ausführung des Hauptprogramms abgeschlossen ist.
Um ein solches Szenario zu vermeiden, können Sie sudo so konfigurieren, dass andere Befehle nur von einem psuedo-pty ausgeführt werden mit use_pty
Parameter, ob die E/A-Protokollierung aktiviert ist oder nicht, wie folgt:
Defaults use_pty
4. Erstellen Sie eine Sudo-Protokolldatei
Standardmäßig protokolliert sudo über syslog(3). Um jedoch eine benutzerdefinierte Protokolldatei anzugeben, verwenden Sie den Protokolldateiparameter wie folgt:
Defaults logfile="/var/log/sudo.log"
Um den Hostnamen und das vierstellige Jahr in der benutzerdefinierten Protokolldatei zu protokollieren, verwenden Sie log_host und log_year Parameter jeweils wie folgt:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
Unten sehen Sie ein Beispiel für eine benutzerdefinierte Sudo-Protokolldatei:
5. Eingabe/Ausgabe des Sudo-Befehls protokollieren
Die log_input und log_output Parameter ermöglichen es sudo, einen Befehl in Pseudo-TTY auszuführen und alle Benutzereingaben und alle Ausgaben, die an den Bildschirm gesendet werden, rezeptiv zu protokollieren.
Das standardmäßige E/A-Protokollverzeichnis ist /var/log/sudo-io , und wenn eine Sitzungssequenznummer vorhanden ist, wird sie in diesem Verzeichnis gespeichert. Sie können ein benutzerdefiniertes Verzeichnis über iolog_dir angeben Parameter.
Defaults log_input, log_output
Es werden einige Escape-Sequenzen unterstützt, wie z. B. %{seq}
die zu einer monoton steigenden Basis-36-Sequenznummer erweitert wird, wie z. B. 000001, wobei alle zwei Ziffern verwendet werden, um ein neues Verzeichnis zu bilden, z. 00.00.01 wie im folgenden Beispiel:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log
Sie können den Rest der Dateien in diesem Verzeichnis mit dem cat-Befehl anzeigen.
6. Vortrag Sudo-Benutzer
Verwenden Sie die Vorlesung, um sudo-Benutzer über die Verwendung von Passwörtern auf dem System zu unterrichten Parameter wie unten.
Es hat 3 mögliche Werte:
- immer – immer einen Benutzer belehren.
- einmal – belehre einen Benutzer nur, wenn er zum ersten Mal den sudo-Befehl ausführt (dies wird verwendet, wenn kein Wert angegeben ist)
- niemals – den Benutzer niemals belehren.
Defaults lecture="always"
Zusätzlich können Sie mit lecture_file eine benutzerdefinierte Vorlesungsdatei erstellen Parameter, geben Sie die entsprechende Nachricht in die Datei ein:
Defaults lecture_file="/path/to/file"
7. Benutzerdefinierte Nachricht anzeigen, wenn Sie ein falsches sudo-Passwort eingeben
Wenn ein Benutzer ein falsches Passwort eingibt, wird eine bestimmte Meldung in der Befehlszeile angezeigt. Die Standardnachricht lautet „Entschuldigung, versuchen Sie es erneut “, können Sie die Nachricht mit badpass_message ändern Parameter wie folgt:
Defaults badpass_message="Password is wrong, please try again"
8. Erhöhen Sie das Limit für sudo-Passwortversuche
Der Parameter passwd_tries wird verwendet, um anzugeben, wie oft ein Benutzer versuchen kann, ein Passwort einzugeben.
Der Standardwert ist 3:
Defaults passwd_tries=5
So legen Sie mit passwd_timeout ein Passwort-Timeout fest (standardmäßig 5 Minuten). Parameter, fügen Sie die folgende Zeile hinzu:
Defaults passwd_timeout=2
9. Lassen Sie sich von Sudo beleidigen, wenn Sie ein falsches Passwort eingeben
Falls ein Benutzer ein falsches Passwort eingibt, zeigt sudo Beleidigungen auf dem Terminal mit dem Beleidigungsparameter an. Dadurch wird die badpass_message automatisch deaktiviert Parameter.
Defaults insults
Weiterlesen :Lassen Sie sich von Sudo beleidigen, wenn Sie ein falsches Passwort eingeben
10. Weitere Informationen zu Sudo-Konfigurationen
Darüber hinaus können Sie mehr über sudo erfahren Befehlskonfigurationen durch Lesen:Unterschied zwischen su und sudo und So konfigurieren Sie sudo in Linux.
Das ist es! Über den Kommentarbereich unten können Sie andere nützliche sudo-Befehlskonfigurationen oder Tricks und Tipps mit Linux-Benutzern teilen.