Bei der Arbeit mit Linux stellen wir fest, dass der Zugriff auf einige Dateien oder die Durchführung sensibler Vorgänge erfordern, dass Benutzer über erhöhte Berechtigungen verfügen. Der sudo-Befehl erhöht vorübergehend Benutzerrechte, die es einem Benutzer ermöglichen, vertrauliche Befehle auszuführen oder ohne Einschränkungen auf Dateien zuzugreifen.
Die Syntax des sudo-Befehls lautet wie folgt:
$ sudo --help
Wir diskutieren vier Möglichkeiten, wie wir sudo-Befehle ausführen können ohne jedes Mal ein Passwort eingeben zu müssen. Die ersten beiden beinhalten die Bearbeitung der sudoers und sudoers.d Dateien, während die letzten beiden die Ausführung von Befehlen beinhalten, um Benutzerrechte auf root zu erhöhen.
1. Bearbeiten der /etc/sudoers-Datei
Lassen Sie uns zunächst versuchen, einen Befehl mit sudo auszuführen und prüfen Sie, ob wir eine Passwortabfrage erhalten:
$ sudo systemctl start mariadb
Sudo-Befehle ohne Passwort ausführen
Wenn wir Benutzer Alice wollen um alle sudo auszuführen Befehle, ohne dass ein sudo erforderlich ist Passwort für beliebige/alle Hosts bearbeiten wir die sudoers-Datei.
$ sudo visudo
und verwenden Sie das NOPASSWD Direktive wie gezeigt:
alice ALL=(ALL) NOPASSWD: ALL
Bestimmte Sudo-Befehle ohne Passwort ausführen
Um Benutzer Alice zuzulassen Um einen einzelnen spezifischen sudo-Befehl auszuführen, ohne ein Passwort einzugeben, müssen Sie die folgende Zeile in der sudoers-Datei verwenden.
alice ALL=(ALL) NOPASSWD: /bin/systemctl start mariadb
Versuchen Sie nun, ein paar Befehle auszuführen und sehen Sie…
$ sudo systemctl start mariadb $ sudo systemctl status mariadb $ cat /etc/sudoers
Von der obigen Terminalsitzung aus haben wir die MariaDB gestartet service Aufgrund der Änderungen, die wir an der sudoers-Datei vorgenommen haben, haben wir keine Passwortabfrage. Beachten Sie auch, dass wir für die nachfolgenden Befehle eine Passwortabfrage haben.
Sudo-Befehle auf einem bestimmten Host ohne Passwort ausführen
Damit der Benutzer die Befehle auf einem bestimmten Host als root ausführen kann , anstatt ALL zu verwenden wir schreiben:
alice linuxshelltips1=(root) NOPASSWD: /bin/systemctl start mariadb
Das Obige erlaubt Alice um den aufgelisteten Befehl auf einem Host mit dem Namen linuxshelltips1 auszuführen ohne Passworteingabe.
Damit drei Befehle mit sudo ausgeführt werden können Privilegien für einen Host linuxshelltips1 und keine Passwortabfrage haben, listen wir sie wie folgt auf:
alice linuxshelltips1=(ALL) NOPASSWD: /bin/systemctl start mariadb, /bin/systemctl status mariadb, /bin/cat /etc/sudoers
Hier erlauben wir den Benutzer Alice um die mariadb zu starten und den Status zu prüfen ohne Eingabe eines Passworts auf einem Host mit dem Hostnamen linuxshelltips1 . Der Benutzer kann auch /etc/sudoers verketten Datei ohne Eingabe eines Passworts.
Alle drei Befehle werden ohne Passwort ausgeführt. Wenn wir jedoch versuchen, den mariadb-Dienst zu stoppen, werden wir nach einem Passwort gefragt, da wir es nicht in der sudoers-Datei angegeben haben.
Sudo-Befehle ohne Passwort für Gruppenbenutzer ausführen
Wir können auch zulassen, dass sudo-Befehle ohne Eingabe eines Passworts für eine Gruppe von Benutzern ausgeführt werden, sagen wir Gruppe1 an welchen Benutzer Alice gehört.
%group1 ALL=(ALL) NOPASSWD: ALL
Wir können auch Benutzer, Gruppen und Befehle kombinieren. Wenn wir beispielsweise möchten, dass nur ein bestimmter Benutzer oder eine bestimmte Gruppe bestimmte Befehle ausführt, fügen wir die folgende Zeile in die sudoers-Datei ein:
alice,%group2 ALL=(ALL) NOPASSWD: /bin/systemctl, /bin/cat, /bin/kill
Alice und alle Benutzer, die zu Gruppe2 gehören kann alle systemctl-, cat- und kill-Befehle mit sudo ausführen und hat keine Passwortabfrage.
Wir können auch bestimmten Benutzern (alice, bob) erlauben, bestimmte Befehle (systemctl, cat, kill) auszuführen, indem wir sie wie folgt auflisten:
bob,alice, ALL=(ALL) NOPASSWD: /bin/systemctl, /bin/cat, /bin/kill
Nach dem Speichern der Datei alice und Bob kann systemctl-, cat- und kill-Befehle auf allen Hosts ausführen, ohne nach einem Passwort gefragt zu werden.
Beachten Sie, wie wir Befehle in /bin/ auflisten Verzeichnis, wie; bin/systemctl oder /bin/cat. Stattdessen könnten wir das gesamte Verzeichnis einschließen und mit einem ‘/’
enden Charakter. Das würde bedeuten, dass der Benutzer jeden Befehl in /bin ausführen kann Verzeichnis. Dies gilt jedoch nicht für Befehle in Unterverzeichnissen von /bin Verzeichnis.
Zum Beispiel, um Alice zuzulassen um alle Befehle in /bin/ auszuführen Verzeichnis schreiben wir:
alice ALL=(ALL) NOPASSWD: /bin/
Alice kann jetzt alle Befehle auf allen Hosts ausführen, die sudo-Berechtigungen erfordern, die sich in /bin/ befinden Verzeichnis, ohne dass ein Passwort erforderlich ist.
2. Bearbeiten der Datei /etc/sudoers.d
Alternativ ist es sicherer, Änderungen an /etc/sudoers.d vorzunehmen anstelle der sudoers-Datei. Dadurch wird die Verwaltung von sudo-Berechtigungen überschaubarer und die sudoers-Datei bleibt unberührt.
Beachten Sie, dass alles, was wir im vorherigen Abschnitt besprochen haben, hier anwendbar ist, der einzige Unterschied besteht darin, dass wir mit sudoers.d arbeiten werden Datei aus Sicherheitsgründen.
Lassen Sie uns zum Beispiel eine Datei für alice erstellen ihr erlaubt, sudo-Befehle auf einem bestimmten Host auszuführen, ohne ein Passwort einzugeben.
$ sudo nano /etc/sudoers.d/alice
Nachdem die Datei geöffnet ist, fügen wir die folgende Zeile ein:
alice linxshelltips=(root) NOPASSWD: /bin/
Der Benutzer kann nun alle sudo-Befehle in /bin/ ausführen ohne Passworteingabe auf dem Host mit dem Hostnamen linuxshelltips .
Wir könnten auch sudo-Befehle spezifizieren, die von einer Gruppe von Benutzern wie folgt ausgeführt werden können:
$ sudo nano /etc/sudoers.d/groups
Wir fügen die folgende Zeile ein, um alle Mitglieder der Gruppe1 zuzulassen um alle sudo-Befehle auf allen Hosts auszuführen, ohne ein Passwort einzugeben.
%group1 ALL=(ALL) NOPASSWD: ALL
Durch die Verwaltung von sudo-Berechtigungen auf diese Weise können wir sie einfach verwalten, ohne uns Sorgen machen zu müssen, dass etwas kaputt geht.
3. Sudoers-Datei reparieren
Beachten Sie, wie wir visudo verwenden um die sudoers-Dateien zu bearbeiten? Dies ist die Konvention, weil wir vermeiden wollen, das System zu brechen. Wenn wir visudo ausführen Es überprüft die Datei, um sicherzustellen, dass wir nichts vermasselt haben, zum Beispiel in Bezug auf die Syntax.
Wenn wir stattdessen einen einfachen Texteditor verwendet und Fehler gemacht haben, hindert uns dies daran, die Datei erneut zu bearbeiten, da wir sudo-Berechtigungen benötigen, um die Datei zu bearbeiten.
Mit visudo verhindert auch mehrere Bearbeitungen an der sudoers-Datei gleichzeitig, das heißt, wenn ein anderer Benutzer die Datei bearbeitet, dürfen andere Benutzer die Datei nicht bearbeiten.
Angenommen, die sudoers-Datei ist durcheinander und wir sind ausgesperrt. Wir verwenden die pkexec Befehl, der eine Alternative zum sudo-Befehl ist.
$ pkexec visudo
Nachdem wir Zugriff auf die sudoers-Datei haben, können wir den Fehler beheben. Zum Beispiel, um die Datei /etc/sudoers.d/alice zu reparieren Datei schreiben wir:
$ pkexec visudo /etc/sudoers.d/alice
4. Verwenden des Befehls „sudo -s“
Um diese Befehle auszuführen, ohne jedes Mal ein Passwort einzugeben, führen wir den Befehl aus:
$ sudo -s
Wenn wir das Passwort einmal eingeben, müssen wir es für alle nachfolgenden sudo-Befehle in dieser Terminalsitzung nicht erneut eingeben.
Wenn wir jetzt versuchen, einen sudo-Befehl auszuführen, werden wir nicht zur Eingabe eines Passworts aufgefordert:
$ sudo systemctl start mariadb.service
Wir verlassen diesen Modus, indem wir exit ausgeben Befehl:
$ exit
5. Verwenden des Befehls „sudo su“
Eine andere Möglichkeit, sudo-Befehle auszuführen, ohne zur Eingabe eines Passworts aufgefordert zu werden, ist die Ausführung des sudo su-Befehls um der Root-Benutzer zu werden. Nachdem dieser Befehl ausgeführt wurde und wir das Passwort einmal eingegeben haben, müssen wir für alle nachfolgenden sudo-Befehle kein Passwort eingeben, damit sie ausgeführt werden.
$ sudo su
Jetzt haben wir Root-Privilegien, sodass alle nachfolgenden sudo-Befehle, die wir ausführen, keine Eingabe eines Passworts erfordern.
Um sudo-Befehle ohne Passwort auszuführen, verwenden wir im Allgemeinen die folgende Syntax beim Bearbeiten von sudoers.d Datei:
user_list host_list=effective_user_list tag_list command_list
Wo,
- Benutzerliste können bestimmte Benutzer, Gruppen, Aliase sein.
- host_list sind die Hostnamen von Hosts, auf denen ein Benutzer sudo-Befehle ohne Passwort ausführen kann.
- effektive_Benutzerliste gibt die Liste der Benutzer an, die als aktueller Benutzer oder als Alias des aktuellen Benutzers ausgeführt werden.
- tag_liste gibt Tags wie NOPASSWD an .
- Befehlsliste gibt eine Liste von sudo-Befehlen an, die der Benutzer oder die Gruppe ausführen kann, ohne ein Passwort zu benötigen.
Das Ausführen von sudo-Befehlen ohne Aufforderung zur Eingabe des Passworts gilt als Sicherheitsrisiko. Eine Passwortabfrage gibt uns nicht nur die Möglichkeit, einen Befehl zu bestätigen, bevor er ausgeführt wird, sondern verhindert auch, dass unbefugte Benutzer Aktionen ausführen, die über ihre Berechtigungen hinausgehen.
Zum Beispiel der ‘sudo rm -rf /’
Befehl löscht das gesamte Dateisystem. Dieser Befehl ist irreversibel und daher ist es ratsam, eine Passwortabfrage zu haben, da dies uns die Möglichkeit gibt, diese Aktion zu bewerten.