Stellen Sie sich dieses Szenario vor. Sie verwalten einen Linux-Server, auf den mehrere Benutzer zugreifen. Alle Benutzer haben sudo
Rechte. Sie möchten bestimmte Linux-Befehle mit verschiedenen Benutzern testen. Wie würdest du das machen? Melden Sie sich als ein Benutzer an und testen Sie die Befehle und melden Sie sich dann ab und wieder als ein anderer Benutzer an und testen Sie die Befehle? Ja, es ist eine Möglichkeit, es zu tun. Es gibt jedoch eine einfache Möglichkeit, Befehle als anderer Benutzer über sudo in Linux auszuführen. Lesen Sie weiter, um es herauszufinden.
Für diese Anleitung habe ich zwei Benutzerkonten erstellt, nämlich "senthil" und "kumar" in meiner AlmaLinux 8 Testmaschine. Ich werde "senthil" als aktuellen Benutzer und "kumar" als Zielbenutzer verwenden.
Ich möchte, dass der Benutzer „senthil“ jeden Befehl als Benutzer „kumar“ auf allen Hosts ausführen kann, ohne sich tatsächlich als „kumar“ anzumelden. Verstanden? Lassen Sie mich Ihnen ein Beispiel zeigen.
Führen Sie Befehle als ein anderer Benutzer über Sudo aus
Ich bin derzeit als Benutzer "senthil" angemeldet. Lassen Sie mich Ihnen den aktuell angemeldeten Benutzer mit whoami
anzeigen Befehl.
$ whoami senthil
Jetzt werde ich ein einfaches "echo
ausführen " Befehl mit sudo
als Zielbenutzer "kumar", während Sie als "senthil" angemeldet sind:
$ sudo -u kumar bash -c 'echo "My Username is $USER, and my user ID is $UID"'
Sie werden aufgefordert, das Passwort des aktuellen Benutzers einzugeben (in diesem Fall „senthil“). Einmal authentifiziert, das echo
Der Befehl wird als Benutzer „kumar“ ausgeführt und zeigt den Benutzernamen und die Benutzer-ID von „kumar“ an.
Beispielausgabe:
[sudo] password for senthil: My Username is kumar, and my user ID is 1001
Was wir gerade getan haben, ist, dass wir das "echo
" Befehl als Benutzer "kumar", während wir uns als "senthil" angemeldet haben. Deshalb sehen Sie den Benutzernamen und die Benutzer-ID von kumar, aber nicht die von senthil.
Lassen Sie uns mit id
überprüfen, ob die uid des Benutzers "kumar" korrekt ist Befehl.
$ id kumar uid=1001(kumar) gid=1001(kumar) groups=1001(kumar),10(wheel)
Ja, die UID von kumar ist in beiden Ausgaben korrekt.
Hier das -u
Flag wird verwendet, um den angegebenen Befehl als ein anderer Benutzer auszuführen (d. h. in diesem Fall kumar) und bash -c
wird verwendet, um den Namen des Befehls anzugeben. Sie sollten den Befehl in einfachen Anführungszeichen erwähnen.
Wenn Sie bash -c
nicht verwenden Option, das echo
Der Befehl gibt den Benutzernamen und die UID des aktuellen Benutzers anstelle des Zielbenutzers zurück.
$ sudo -u kumar echo "My Username is $USER, and my user ID is $UID"
My Username is senthil, and my user ID is 1000
Ebenso können Sie alle Befehle als anderer Benutzer ausführen.
Bitte beachten Sie, dass ich in unserem vorherigen Beispielbefehl sudo
nicht eingegeben habe Kennwort für den Zielbenutzer. Wieso den? Denn das echo
Der Befehl erfordert kein sudo
Passwort.
Wenn Sie einen Befehl ausführen, der sudo
erfordert Berechtigung als anderer Benutzer müssen Sie das Passwort eingeben. Hier ist ein weiteres Beispiel.
$ sudo -u kumar bash -c 'sudo dnf --refresh update'
Beispielausgabe:
[sudo] password for senthil: [sudo] password for kumar: AlmaLinux 8 - BaseOS 344 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 388 B/s | 4.7 kB 00:12 AlmaLinux 8 - Extras 316 B/s | 3.9 kB 00:12 Dependencies resolved. Nothing to do. Complete!
Haben Sie bemerkt, dass ich sudo
eingegeben habe Passwort für beide Benutzer? Ja. Denn wir führen "sudo dnf update
“, was erhöhte Rechte erfordert. Deshalb muss der sudo
eingegeben werden Kennwort für den Zielbenutzer. Für normale Befehle z.B. ls
, uname
usw. müssen wir das Passwort des Zielbenutzers nicht eingeben.
Nicht nur Linux-Befehle, Sie können diese Methode auch zum Ausführen von Skripten anwenden. Angenommen, Sie möchten ein Sicherungsskript ausführen, das in $HOME
gespeichert ist Verzeichnis eines anderen Benutzers. Sie können das Skript einfach vom aktuellen Benutzer als anderer Benutzer ausführen, indem Sie diesen Befehl verwenden:
$ sudo -u kumar bash -c '~/backup_script_name'
Befehle ohne Sudo-Passwort ausführen
Manchmal befinden Sie sich möglicherweise in einer Situation, in der Sie das sudo-Passwort nicht für alle Befehle eingeben möchten. In solchen Fällen können Sie die Passwortabfrage für bestimmte Befehle überspringen, indem Sie NOPASSWD
hinzufügen Option in /etc/sudoers
Datei.
Angenommen, Sie möchten einem bestimmten Benutzer erlauben, dnf auszuführen Befehl ohne sudo-Passwort. Suchen Sie dazu zunächst den Pfad des dnf
Befehl mit which
oder whereis
Befehle.
$ which dnf /usr/bin/dnf
$ whereis dnf dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz
Wie Sie sehen können, ist der ausführbare Pfad von dnf
Befehl ist /usr/bin/dnf
.
Bearbeiten Sie nun /etc/sudoers
Dateien mit dem Befehl:
$ sudo visudo
Vorsicht: Bitte beachten Sie, dass Sie die sudoers
nicht manuell bearbeiten sollten Datei mit einem beliebigen Texteditor. Verwenden Sie immer visudo
Befehl, um die sudoers
sicher zu bearbeiten Datei.
Fügen Sie am Ende der Datei die folgende Zeile hinzu, damit der Benutzer namens "kumar" dnf
ausführen kann Befehle ohne sudo-Passwort.
kumar ALL=NOPASSWD:/usr/bin/dnf
Speichern Sie die Datei und beenden Sie sie.
Von nun an kann der Benutzer "kumar" dnf
ausführen Befehle ohne sudo
Passwort.
[[email protected] ~]$ sudo -u kumar bash -c 'sudo dnf --refresh update' [sudo] password for senthil: AlmaLinux 8 - BaseOS 358 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 324 B/s | 4.7 kB 00:14 AlmaLinux 8 - Extras 302 B/s | 3.9 kB 00:13 Dependencies resolved. Nothing to do. Complete!
Sehen? Wir müssen sudo
nicht eingeben Passwort für "kumar".
Um dieses Verhalten aufzuheben, entfernen Sie einfach die obige Zeile.
Haftungsausschluss: Sie sollten bei der Anwendung dieser Methode sehr vorsichtig sein. Diese Methode kann sowohl für produktive als auch für destruktive Zwecke verwendet werden. Sagen Sie zum Beispiel, wenn Sie Benutzern erlauben, 'rm'
auszuführen Befehl ohne sudo
Passwort, könnten sie versehentlich oder absichtlich wichtige Dateien löschen. Tun Sie dies nur, wenn es wirklich notwendig ist.
Schlussfolgerung
In diesem kurzen Tutorial haben wir besprochen, wie Sie Benutzern erlauben können, Befehle als ein anderer Benutzer über sudo in Linux auszuführen. Wir haben auch gelernt, wie man die sudo-Passwortabfrage für bestimmte Benutzer deaktiviert, wenn man bestimmte Befehle ausführt, indem man sudoers
modifiziert Datei.
Wie ich bereits gewarnt habe, müssen Sie vorsichtig sein, wenn Sie diese Methode auf einem Produktionssystem testen. Sie können einem Benutzer unwissentlich erlauben, einen schädlichen Befehl auszuführen (z. B. rm
) ohne das sudo-Passwort eingeben zu müssen. Sie sollten beim Testen dieser Art von Linux-Tipps immer vorsichtig sein.
Verwandte Lektüre:
- Befehle auf Remote-Linux-Systemen über SSH ausführen
- So führen Sie bestimmte Befehle ohne Sudo-Passwort in Linux aus