Sudo/Konfiguration: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== Konfiguration == Nach der Installation muss jeder Benutzer, der SuperUser-Rechte erhalten soll, der Gruppe "sudo" hinzugefügt werden <syntaxhighlight lang="bash" highlight="1" line> usermod -G sudo -a BENUTZERNAME </syntaxhighlight> ; Ausführen von sudo ohne Passwort <syntaxhighlight lang="bash" highlight="1" line> visudo </syntaxhighlight> In der sudoers.d Datei in der letzten Zeile folgenden Befehl einfügen <syntaxhighlight lang="bash" highlight…“ |
|||
| (24 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''{{BASEPAGENAME}}''' - Beschreibung | |||
== Beschreibung == | |||
[[/etc/sudoers]] | |||
* Modulare Regeln werden als ''Drop-Ins'' bezeichnet und befinden sich standardmäßig unter: [[/etc/sudoers.d/]] | |||
Die Datei [[sollte]] mit [[visudo]] bearbeitet werden | |||
* [[visudo]] führt vor dem Speichern eine Syntaxprüfung durch | |||
== Konfiguration == | == Konfiguration == | ||
=== Sudoers === | |||
<syntaxhighlight lang="bash" highlight="1" line> | Benutzer, die [[Sudo]] benutzen wollen, müssen Mitglied der Gruppe "sudo" sein | ||
usermod -G sudo -a BENUTZERNAME | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
sudo usermod -G sudo -a BENUTZERNAME | |||
</syntaxhighlight> | </syntaxhighlight> | ||
; Ausführen von sudo ohne Passwort | ; Ausführen von sudo ohne Passwort | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
visudo | sudo visudo | ||
</syntaxhighlight> | </syntaxhighlight> | ||
In der sudoers.d Datei in der letzten Zeile folgenden Befehl einfügen | In der sudoers.d Datei in der letzten Zeile folgenden Befehl einfügen | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
'USER' ALL=(ALL) NOPASSWD:ALL | 'USER' ALL=(ALL) NOPASSWD:ALL | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 19: | Zeile 29: | ||
; Einzelne Befehle auszuschließen | ; Einzelne Befehle auszuschließen | ||
* in der Klammer die Befehle listen, die gewünscht sind, in diesem Fall sind das alle Befehle (ALL) | * in der Klammer die Befehle listen, die gewünscht sind, in diesem Fall sind das alle Befehle (ALL) | ||
; Allgemeiner Grundsatz für die Konfiguration von sudoers | |||
# Öffnen Sie die gewünschte Datei mit ''visudo'' (Haupt- oder Drop-in-Datei). | |||
# Nehmen Sie Änderungen vor und speichern Sie die Datei. | |||
# ''visudo'' überprüft die Syntax. | |||
# Wenn die Überprüfung fehlschlägt, werden die Änderungen nicht übernommen und visudo gibt eine Fehlermeldung aus. | |||
# Überprüfung: ''sudo -l''. Führen Sie einen Testbefehl aus. | |||
; Konfiguration Öffnen | |||
Sie können den Konfigurationseditor mit folgendem Befehl öffnen: | |||
sudo visudo | |||
Unter Debian erfolgt der Start mit nano, da dies standardmäßig in der Systemvariablen editor angegeben ist. | |||
Sie können dies wie folgt überprüfen: | |||
readlink -f /usr/bin/editor | |||
Änderung des Standard-Editors: | |||
sudo update-alternatives --config editor | |||
; Drop-Ins einschalten | |||
* Am Ende von ''/etc/sudoers'' steht normalerweise: | |||
<syntaxhighlight lang="ini"> | |||
@includedir /etc/sudoers.d | |||
</syntaxhighlight> | |||
* Sie können auch eine separate Datei mit der Anweisung @include in die Konfiguration einfügen. | |||
<syntaxhighlight lang="ini"> | |||
@include /usr/local/etc/sudoers.custom | |||
</syntaxhighlight> | |||
;Hinweis | |||
:In älteren Versionen von sudo (<1.9.1) begannen die Anweisungen mit dem Zeichen '''''#''''' statt mit '''''@'''''. Beide Formate werden jedoch unterstützt. | |||
;Bezeichnung der Drop-in-Dateien | |||
Allgemein übliche Bezeichnung der Drop-in-Dateien: | |||
* ''NN-topic'', wobei NN die Dateinummer ist. Die Reihenfolge der Lesbarkeit ist lexikografisch (alphabetisch, von 00 bis 99). | |||
:* Beispiel: | |||
/etc/sudoers.d/ | |||
├── 00-defaults | |||
├── 10-groups | |||
├── 50-nginx | |||
└── 90-local | |||
* Die Dateien haben keine Erweiterung. | |||
=== Regeln (User Specifications) === | |||
Jeder dieser Einträge beschreibt: | |||
* wer (USER) | |||
* auf welchen Hosts (HOSTS) | |||
* was ausführen darf (COMMANDS) | |||
* im Namen von wem (RUNAS) | |||
* mit welchen Modifikatoren (TAGS) | |||
; Schreiben von sudoers-Regeln | |||
Allgemeiner Aufbau einer Zeile: | |||
USER HOSTS = (RUNAS) [TAGS] COMMANDS | |||
* '''USER''' — Für dieses Feld kann einer der folgenden Werte angegeben werden: | |||
:* Benutzer | |||
:* Gruppe (GID-Gruppe) | |||
:* Netgroup (NIS) | |||
:* Alias | |||
* '''HOSTS''' – auf welchen Hosts die Regel gilt (Namen/Masken/IP, Aliase sind möglich). | |||
* '''(RUNAS)''' – in wessen Namen und/oder mit welcher Gruppe ausführen (Standardwert ''root''). | |||
:* Benutzer | |||
:* Mehrere Benutzer: (postgres, mysql) | |||
:* Gruppe (GID-Gruppe) | |||
:* Alias | |||
* '''[TAGS]''' – Modifikatoren | |||
:* '''NOPASSWD:''' – kein Passwort für die aufgeführten Befehle abfragen. | |||
:* '''PASSWD:''' – Passwort für die aufgeführten Befehle abfragen. | |||
:* '''SETENV:''' – Verwaltung der Umgebung zulassen. | |||
:* '''NOEXEC:''' – Unterprozesse innerhalb des Befehls verbieten. | |||
* '''COMMANDS''' – Liste der vollständigen Pfade zu Befehlen (vorzugsweise ohne Wildcards), Aliase sind möglich. | |||
* Beispiele für Regeln mit Erläuterungen: | |||
<syntaxhighlight lang="ini"> | |||
# Die Gruppe devops darf ALLES ausführen, AUSSER Ausschalten/Neustarten | |||
%devops ALL = (ALL) ALL, !/sbin/shutdown, !/sbin/poweroff, !/sbin/reboot | |||
# Der Benutzer dbuser darf die Befehle psql und mysql als postgres bzw. mysql ausführen | |||
dbuser ALL = (postgres, mysql) /usr/bin/psql, /usr/bin/mysql | |||
# apt für den Benutzer dev einschränken | |||
dev ALL = (root) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade | |||
# Der Benutzer webops darf den Status von nginx als root ohne Passwort abfragen | |||
# und einen Neustart mit Passwort durchführen (nur bei exakt passender Befehls-Syntax). | |||
# Das Stoppen des Dienstes ist NICHT erlaubt, da es nicht ausdrücklich aufgeführt ist. | |||
webops ALL = (root) NOPASSWD: /usr/bin/systemctl status nginx, PASSWD: /usr/bin/systemctl restart nginx | |||
# Dem Benutzer extadmin das Recht geben, api auf Hosts web* (deren Hostname mit „web“ beginnt) | |||
# während der Arbeitszeit neu zu starten (09:00–18:00 gemäß den unten gesetzten Grenzen) | |||
extadmin web* = (root) NOTBEFORE=202511010900: NOTAFTER=202511011800: /usr/bin/systemctl restart api | |||
</syntaxhighlight> | |||
=== Defaults === | |||
Mit Defaults können Sie das Sicherheitsprofil und die Verhaltenseinstellungen von sudo festlegen, z. B.: | |||
* Zeitlimit für zuvor eingegebene Passwörter, erneute Passwortabfrage nach ... | |||
* I/O-Protokollierung | |||
* Verwendung eines vordefinierten PATH | |||
* usw. | |||
;Ausführungspriorität: | |||
Defaults haben die folgende Priorität (von oben nach unten): | |||
* Defaults! /Befehl | |||
* Defaults>runas | |||
* Defaults:Benutzer/Gruppe | |||
* Defaults@Host | |||
* Globale Defaults | |||
<syntaxhighlight lang="ini" line> | |||
# Reine Umgebung | |||
Defaults env_reset | |||
# PATH definieren | |||
Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin" | |||
# sudo-Passwort-Cache (Minuten); 0 – immer fragen | |||
Defaults timestamp_timeout=5 | |||
# Pseudo-TTY für I/O-Protokolle | |||
Defaults use_pty | |||
# Authentifizierungsparameter/ | |||
Defaults passwd_tries=3, passwd_timeout=30 | |||
Defaults lecture=once | |||
</syntaxhighlight> | |||
Beispiele für Defaults für bestimmte Entitäten | |||
<syntaxhighlight lang="ini" line> | |||
# Für den Befehl vi: Unterprozesse verbieten und I/O-Protokolle aktivieren | |||
Defaults! /usr/bin/vi noexec, log_input, log_output | |||
# Für den Benutzer alice: Immer nach dem Passwort fragen | |||
Defaults:alice timestamp_timeout=0 | |||
# Für die Gruppe (GID) webops: Proxy-Variablen zulassen | |||
Defaults:%webops env_keep += "http_proxy https_proxy" | |||
# Für den Host (jump-host): TTY und strenge Passwortabfragepolitik | |||
Defaults@backupsrv use_pty, timestamp_timeout=0 | |||
# Für RunAs-Benutzer: Beim Ausführen von Befehlen von postgres wird kein Passwort abgefragt. | |||
Defaults>postgres !authenticate | |||
# Für RunAs-Benutzer: Beim Ausführen von Befehlen von postgres wird kein Passwort abgefragt. | |||
</syntaxhighlight> | |||
=== Aliase === | |||
Einrichten von Aliasen für die spätere Verwendung: | |||
<syntaxhighlight lang="ini"> | |||
User_Alias WEBOPS = alice, bob | |||
Runas_Alias DBUSERS = postgres, mysql | |||
Host_Alias WEBSERVERS = www01, www02 | |||
Cmnd_Alias NGINX_CTL = /bin/systemctl start nginx, /bin/systemctl stop nginx, /bin/systemctl restart nginx, /bin/systemctl status nginx | |||
</syntaxhighlight> | |||
Anwendungsbeispiel: | |||
Beispiel für eine vollständige Zeile: | |||
<syntaxhighlight lang="ini"> | |||
WEBOPS WEBSERVERS = (root) NOPASSWD: NGINX_CTL | |||
</syntaxhighlight> | |||
== Aufruf == | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
</syntaxhighlight> | |||
=== Optionen === | |||
{| class="wikitable sortable options gnu" | |||
|- | |||
! Unix !! GNU !! Parameter !! Beschreibung | |||
|- | |||
| || || || | |||
|- | |||
|} | |||
=== Parameter === | |||
=== Umgebungsvariablen === | |||
=== Exit-Status === | |||
{| class="wikitable options col1center" | |||
|- | |||
! Wert !! Beschreibung | |||
|- | |||
| 0 || Erfolg | |||
|- | |||
| >0 || Fehler | |||
|} | |||
== Anwendung == | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
</syntaxhighlight> | |||
=== Problembehebung === | |||
== Konfiguration == | |||
=== Dateien === | === Dateien === | ||
{| class="wikitable options" | |||
|- | |||
! Datei !! Beschreibung | |||
|- | |||
| || | |||
|- | |||
| || | |||
|} | |||
<noinclude> | |||
== Anhang == | |||
=== Siehe auch === | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}/}} | |||
=== Dokumentation === | |||
; Man-Page | |||
# [https://manpages.debian.org/stable/sudo/sudoers.5.en.html sudoers(5)] | |||
=== Links === | |||
==== Projekt ==== | |||
==== Weblinks ==== | |||
{{DEFAULTSORT:new}} | |||
{{DISPLAYTITLE:new}} | |||
[[Kategorie:/Linux/Befehl]] | |||
[[Kategorie:/etc]] | |||
[[Kategorie:Administrator]] | |||
[[Kategorie:Autorisierung]] | |||
[[Kategorie:Hardening]] | |||
</noinclude> | |||
Aktuelle Version vom 5. November 2025, 14:31 Uhr
Sudo/Konfiguration - Beschreibung
Beschreibung
- Modulare Regeln werden als Drop-Ins bezeichnet und befinden sich standardmäßig unter: /etc/sudoers.d/
Die Datei sollte mit visudo bearbeitet werden
- visudo führt vor dem Speichern eine Syntaxprüfung durch
Konfiguration
Sudoers
Benutzer, die Sudo benutzen wollen, müssen Mitglied der Gruppe "sudo" sein
sudo usermod -G sudo -a BENUTZERNAME
- Ausführen von sudo ohne Passwort
sudo visudo
In der sudoers.d Datei in der letzten Zeile folgenden Befehl einfügen
'USER' ALL=(ALL) NOPASSWD:ALL
- User ist der Name des Users, den das betreffen soll
- Einzelne Befehle auszuschließen
- in der Klammer die Befehle listen, die gewünscht sind, in diesem Fall sind das alle Befehle (ALL)
- Allgemeiner Grundsatz für die Konfiguration von sudoers
- Öffnen Sie die gewünschte Datei mit visudo (Haupt- oder Drop-in-Datei).
- Nehmen Sie Änderungen vor und speichern Sie die Datei.
- visudo überprüft die Syntax.
- Wenn die Überprüfung fehlschlägt, werden die Änderungen nicht übernommen und visudo gibt eine Fehlermeldung aus.
- Überprüfung: sudo -l. Führen Sie einen Testbefehl aus.
- Konfiguration Öffnen
Sie können den Konfigurationseditor mit folgendem Befehl öffnen:
sudo visudo
Unter Debian erfolgt der Start mit nano, da dies standardmäßig in der Systemvariablen editor angegeben ist.
Sie können dies wie folgt überprüfen:
readlink -f /usr/bin/editor
Änderung des Standard-Editors:
sudo update-alternatives --config editor
- Drop-Ins einschalten
- Am Ende von /etc/sudoers steht normalerweise:
@includedir /etc/sudoers.d
- Sie können auch eine separate Datei mit der Anweisung @include in die Konfiguration einfügen.
@include /usr/local/etc/sudoers.custom
- Hinweis
- In älteren Versionen von sudo (<1.9.1) begannen die Anweisungen mit dem Zeichen # statt mit @. Beide Formate werden jedoch unterstützt.
- Bezeichnung der Drop-in-Dateien
Allgemein übliche Bezeichnung der Drop-in-Dateien:
- NN-topic, wobei NN die Dateinummer ist. Die Reihenfolge der Lesbarkeit ist lexikografisch (alphabetisch, von 00 bis 99).
- Beispiel:
/etc/sudoers.d/ ├── 00-defaults ├── 10-groups ├── 50-nginx └── 90-local
- Die Dateien haben keine Erweiterung.
Regeln (User Specifications)
Jeder dieser Einträge beschreibt:
- wer (USER)
- auf welchen Hosts (HOSTS)
- was ausführen darf (COMMANDS)
- im Namen von wem (RUNAS)
- mit welchen Modifikatoren (TAGS)
- Schreiben von sudoers-Regeln
Allgemeiner Aufbau einer Zeile:
USER HOSTS = (RUNAS) [TAGS] COMMANDS
- USER — Für dieses Feld kann einer der folgenden Werte angegeben werden:
- Benutzer
- Gruppe (GID-Gruppe)
- Netgroup (NIS)
- Alias
- HOSTS – auf welchen Hosts die Regel gilt (Namen/Masken/IP, Aliase sind möglich).
- (RUNAS) – in wessen Namen und/oder mit welcher Gruppe ausführen (Standardwert root).
- Benutzer
- Mehrere Benutzer: (postgres, mysql)
- Gruppe (GID-Gruppe)
- Alias
- [TAGS] – Modifikatoren
- NOPASSWD: – kein Passwort für die aufgeführten Befehle abfragen.
- PASSWD: – Passwort für die aufgeführten Befehle abfragen.
- SETENV: – Verwaltung der Umgebung zulassen.
- NOEXEC: – Unterprozesse innerhalb des Befehls verbieten.
- COMMANDS – Liste der vollständigen Pfade zu Befehlen (vorzugsweise ohne Wildcards), Aliase sind möglich.
- Beispiele für Regeln mit Erläuterungen:
# Die Gruppe devops darf ALLES ausführen, AUSSER Ausschalten/Neustarten
%devops ALL = (ALL) ALL, !/sbin/shutdown, !/sbin/poweroff, !/sbin/reboot
# Der Benutzer dbuser darf die Befehle psql und mysql als postgres bzw. mysql ausführen
dbuser ALL = (postgres, mysql) /usr/bin/psql, /usr/bin/mysql
# apt für den Benutzer dev einschränken
dev ALL = (root) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade
# Der Benutzer webops darf den Status von nginx als root ohne Passwort abfragen
# und einen Neustart mit Passwort durchführen (nur bei exakt passender Befehls-Syntax).
# Das Stoppen des Dienstes ist NICHT erlaubt, da es nicht ausdrücklich aufgeführt ist.
webops ALL = (root) NOPASSWD: /usr/bin/systemctl status nginx, PASSWD: /usr/bin/systemctl restart nginx
# Dem Benutzer extadmin das Recht geben, api auf Hosts web* (deren Hostname mit „web“ beginnt)
# während der Arbeitszeit neu zu starten (09:00–18:00 gemäß den unten gesetzten Grenzen)
extadmin web* = (root) NOTBEFORE=202511010900: NOTAFTER=202511011800: /usr/bin/systemctl restart api
Defaults
Mit Defaults können Sie das Sicherheitsprofil und die Verhaltenseinstellungen von sudo festlegen, z. B.:
- Zeitlimit für zuvor eingegebene Passwörter, erneute Passwortabfrage nach ...
- I/O-Protokollierung
- Verwendung eines vordefinierten PATH
- usw.
- Ausführungspriorität
Defaults haben die folgende Priorität (von oben nach unten):
- Defaults! /Befehl
- Defaults>runas
- Defaults:Benutzer/Gruppe
- Defaults@Host
- Globale Defaults
# Reine Umgebung
Defaults env_reset
# PATH definieren
Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin"
# sudo-Passwort-Cache (Minuten); 0 – immer fragen
Defaults timestamp_timeout=5
# Pseudo-TTY für I/O-Protokolle
Defaults use_pty
# Authentifizierungsparameter/
Defaults passwd_tries=3, passwd_timeout=30
Defaults lecture=once
Beispiele für Defaults für bestimmte Entitäten
# Für den Befehl vi: Unterprozesse verbieten und I/O-Protokolle aktivieren
Defaults! /usr/bin/vi noexec, log_input, log_output
# Für den Benutzer alice: Immer nach dem Passwort fragen
Defaults:alice timestamp_timeout=0
# Für die Gruppe (GID) webops: Proxy-Variablen zulassen
Defaults:%webops env_keep += "http_proxy https_proxy"
# Für den Host (jump-host): TTY und strenge Passwortabfragepolitik
Defaults@backupsrv use_pty, timestamp_timeout=0
# Für RunAs-Benutzer: Beim Ausführen von Befehlen von postgres wird kein Passwort abgefragt.
Defaults>postgres !authenticate
# Für RunAs-Benutzer: Beim Ausführen von Befehlen von postgres wird kein Passwort abgefragt.
Aliase
Einrichten von Aliasen für die spätere Verwendung:
User_Alias WEBOPS = alice, bob
Runas_Alias DBUSERS = postgres, mysql
Host_Alias WEBSERVERS = www01, www02
Cmnd_Alias NGINX_CTL = /bin/systemctl start nginx, /bin/systemctl stop nginx, /bin/systemctl restart nginx, /bin/systemctl status nginx
Anwendungsbeispiel:
Beispiel für eine vollständige Zeile:
WEBOPS WEBSERVERS = (root) NOPASSWD: NGINX_CTL
Aufruf
Optionen
| Unix | GNU | Parameter | Beschreibung |
|---|---|---|---|
Parameter
Umgebungsvariablen
Exit-Status
| Wert | Beschreibung |
|---|---|
| 0 | Erfolg |
| >0 | Fehler |
Anwendung
Problembehebung
Konfiguration
Dateien
| Datei | Beschreibung |
|---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page