Sudo ohne Passwort ausführen?


293

Inspiriert von dieser Frage ....

Ich bin die einzige Person, die mein System mit 12.04 benutzt.
Jedes Mal, wenn ich einen sudoBefehl erteile; Das System fragt nach dem Benutzerpasswort (was auf seine eigene Weise gut ist).
Ich dachte jedoch nach; ohne das Root- Konto zu aktivieren ; Wie kann ich die sudo-Befehle ausführen, bei denen kein Benutzerpasswort zur Authentifizierung abgefragt wird?

HINWEIS: Ich möchte den Befehl sudo ausführen, ohne mich über ein Kennwort zu authentifizieren. Nur wenn sie über das Terminal ausgeführt werden.
Ich möchte diese zusätzliche Sicherheitsebene nicht von anderen Funktionen entfernen, z. B. wenn Sie das 'Ubuntu Software Center' verwenden oder ein Bash-Skript ausführen, indem Sie die Datei something.sh auf das Terminal ziehen.


2
Sie möchten also nur nach dem Passwort im Terminal gefragt werden und nicht nach anderen Dingen oder umgekehrt ?! In beiden
Fällen

Ich möchte, dass das System nicht nur im Terminal nach dem Passwort fragt ... für andere Zwecke muss das System nach dem Passwort fragen. Diese Anforderung ist nur vorübergehend und muss bei der Konfiguration und Installation neuer Server verwendet werden. Bei Neuinstallationen von Servern dauert die Konfiguration mit sudo-Befehlen in der Regel mehrere Stunden. Alle 15 Minuten wird ein Kennwort ausgegeben. ist Kopfschmerzen. Ich möchte kein Root-Konto verwenden.
Bhavesh Diwan

Sie müssen die Diskussion lesen in: askubuntu.com/questions/135428/…
David6

1
Natürlich können Sie die Zeitüberschreitung verlängern. Wenn Sie häufig neue Server-Setups durchführen, sollten Sie darüber nachdenken, den Prozess zu automatisieren. Sie werden nicht dafür bezahlt, zu tippen, sondern dafür, Probleme zu lösen und zu erledigen.
MauganRa

Antworten:


82

sudo -i Dies ist der richtige Weg, wenn Sie nicht alle 10 Minuten ein Kennwort eingeben möchten, während Sie Änderungen an Ihrem System (oder anderen Systemen) vornehmen, und keine Systemdateien ändern möchten.

Sie werden mit Ihrem sudoBenutzerkennwort zu root weitergeleitet , wenn Sie die Konsole schließen oder eingeben, dass Sie exitwieder zu Ihrem normalen Benutzer zurückkehren.


2
Wird dies zutreffen, dass ich das Passwort nur einmal eingebe ... und bis zu dem Zeitpunkt, an dem ich es nicht beende? wetter 5 std. oder 15 ... Das System fragt nicht nach der Authentifizierung per Passwort, wenn ein sudo-Befehl ausgegeben wird.
Bhavesh Diwan

2
@ Z9iT, bis Sie Folgendes eingeben exitoder das Terminalemulatorfenster schließen.
Bruno Pereira

2
Vielen Dank. Akzeptierte diese Antwort, da sie den Zweck hat, sudo-Befehle ohne Kennwortauthentifizierung für n Stunden auszugeben, bis wir sie nicht beenden. Das Ändern von Systemdateien ist ein Plus.
Bhavesh Diwan

3
Dies beantwortet die Frage nicht wirklich, da Sie zu diesem Zeitpunkt noch das Kennwort eingeben müssen, um root zu werden.
Adam F.,

2
Nicht, wenn Sie eine virtuelle Maschine in einer gesicherten Umgebung ausführen und nur möchten, dass die Aufgabe sofort ausgeführt wird und Sie sich nicht mit Kennwörtern befassen möchten. Diese Antwort beantwortet die Frage nicht, obwohl es sich um eine wohl hilfreiche Information handelt. Ich stimme mit Adam F überein
Jonathan Komar

574

Sie können konfigurieren sudo, niemals nach Ihrem Passwort zu fragen.

Öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

sudo visudo

Fügen Sie am Ende der Datei die folgende Zeile hinzu:

$USER ALL=(ALL) NOPASSWD: ALL

Wo $USERist dein Benutzername auf deinem System? Speichern und schließen Sie die sudoers-Datei (wenn Sie Ihren Standard-Terminal-Editor nicht geändert haben (Sie werden wissen, ob dies der Fall ist), drücken Sie zum Beenden ctl + x nanound Sie werden zum Speichern aufgefordert).

Ab Ubuntu 19.04 sollte die Datei nun ungefähr so ​​aussehen

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Danach können Sie sudo <whatever you want>ein Terminal-Fenster eingeben, ohne nach dem Kennwort gefragt zu werden.

Dies gilt nur für die Verwendung des sudoBefehls im Terminal. Sie werden weiterhin zur Eingabe Ihres Kennworts aufgefordert, wenn Sie (beispielsweise) versuchen, ein Paket aus dem Software Center zu installieren

GUI Passwortabfrage


15
Es wird empfohlen, es zu verwenden, sudo visudoanstatt es direkt zu bearbeiten. Auch das Ändern der Berechtigungen der Sudoer kann Sie ausschließen. vimVerwenden Sie :wq!beim Bearbeiten mit , um schreibgeschützte Dateien zu erstellen und den Editor zu beenden. Auf diese Weise sind Berechtigungen 644 nicht erforderlich.
Lekensteyn

8
Dies ist ein ernstes Sicherheitsrisiko. Jeder, der ein Konto mit sudo-Rechten übernimmt, kann die Kontrolle über das gesamte System übernehmen und weiteren Zugriff auf diesen Computer sperren, was ernsthaft nicht empfohlen wird.
Bruno Pereira

6
@ wil93 Sie haben den Punkt verfehlt: Ein Skript, das nach etwas sudo install crapwarefragt, fragt in diesem Fall nicht nach einem Passwort und kann alles durcheinander bringen, und Sie müssen sich nicht physisch neben einem Computer befinden, um Skripte zu verteilen, als ich sie das letzte Mal überprüft habe. Dies ist nur ein Beispiel.
Bruno Pereira

12
@BrunoPereira Wenn Sie nicht vertrauenswürdige Skripte ausführen möchten , ist dies das Sicherheitsrisiko (selbst wenn sudo nach einem Kennwort fragt, kann ein böswilliges Skript immer rm -rf ~einige Dinge durcheinander bringen). Insgesamt würde ich das einfache Entfernen der Passwortabfrage von sudo nicht als "ernstes Sicherheitsrisiko" bezeichnen.
Wil93

5
Stimmen Sie mit @ wil93 überein. Wenn Sie ein nicht vertrauenswürdiges Skript ausführen, ist die Eingabe eines Kennworts nur eine Chance, den Vorgang abzubrechen, obwohl ich bezweifle, dass dies für die meisten Menschen nutzlos ist. Der Punkt ist, dass Sie wissen, woher das Skript stammt und was es tut.
Tschad

36

Root-Sudo-Timeouts sind die einfachste und sicherste Möglichkeit, dies zu tun. Ich werde alle Beispiele darlegen, aber seien Sie gewarnt, es ist sehr riskant, wie Sie dies tun, obwohl dieser Weg viel sicherer ist:

sudo visudo

Dadurch wird ein Editor geöffnet und auf die sudoers-Datei verwiesen. Ubuntu verwendet standardmäßig nano, andere Systeme verwenden Vi. Sie sind jetzt ein Superuser, der eine der wichtigsten Dateien auf Ihrem System bearbeitet. Kein Stress!

(Vi spezifische Anweisungen mit (vi!) . Ignorieren Sie diese, wenn Sie Nano verwenden.)

Verwenden Sie die Pfeiltasten, um zum Ende der DefaultsZeile zu gelangen.

(vi!) Drücken Sie die A-Taste (Großbuchstabe "a"), um sich am Ende der aktuellen Zeile zu bewegen und in den Bearbeitungsmodus zu wechseln (nach dem letzten Zeichen in der Zeile anhängen).

Geben Sie nun Folgendes ein:

,timestamp_timeout=X

Dabei steht X für das Ablaufen des Zeitlimits in Minuten. Wenn Sie 0 angeben, werden Sie immer nach dem Passwort gefragt. Wenn Sie einen negativen Wert angeben, läuft das Timeout nie ab. Eg Defaults env_reset,timestamp_timeout=5.

(vi!) Drücken Sie die Escape-Taste, um zum Befehlsmodus zurückzukehren. Wenn Sie mit der Bearbeitung zufrieden sind, geben Sie Folgendes ein, :w Enterum die Datei zu schreiben und :q Entervi zu beenden. Wenn Sie einen Fehler gemacht haben, ist es möglicherweise am einfachsten, den Vorgang von Anfang an zu wiederholen, den Vorgang ohne Speichern zu beenden (drücken, Escapeum in den Befehlsmodus zu wechseln) und dann Folgendes einzugeben: q! Enter.

Hit Ctrl+ X, dann Y, dann EnterIhre Datei und beendet nano zu speichern.

Vielleicht möchten Sie die Handbuchseiten sudoers und vi lesen, um weitere Informationen zu erhalten.

man sudoers
man vi

Timeout-Wert zurücksetzen mit:

sudo -k

Mit diesen Anweisungen entfernen Sie die Aufforderung zur Eingabe eines Kennworts, wenn Sie den Befehl sudo verwenden. Der Befehl sudo muss jedoch weiterhin für den Root-Zugriff verwendet werden.

Bearbeiten Sie die sudoers-Datei

Öffnen Sie ein Terminalfenster. Tippen Sie ein sudo visudo. Fügen Sie die folgende Zeile zum ENDE der Datei hinzu (falls dies nicht am Ende der Fall ist, kann dies durch spätere Einträge aufgehoben werden):

<username> ALL=NOPASSWD: ALL

Ersetzen Sie <username>durch Ihren Benutzernamen (ohne den <>). Dies setzt voraus, dass Ubuntu eine Gruppe mit demselben Namen wie Ihr Benutzername erstellt hat, was typisch ist. Sie können alternativ die Gruppenbenutzer oder jede andere Gruppe verwenden, in der Sie sich befinden. Stellen Sie einfach sicher, dass Sie sich in dieser Gruppe befinden. Dies kann unter System -> Administration -> Benutzer und Gruppen überprüft werden.

Beispiel:

michael ALL=NOPASSWD: ALL

Geben Sie zum Beenden ^ X ( Ctrl+ X) ein. Daraufhin wird eine Option zum Speichern der Datei angezeigt. Geben Sie zum Speichern Y ein.

Melden Sie sich ab und dann wieder an. Auf diese Weise können Sie den Befehl sudo jetzt ausführen, ohne zur Eingabe eines Kennworts aufgefordert zu werden.

Das Root-Konto

Aktivieren des Root-Kontos

Das Aktivieren des Root-Kontos ist selten erforderlich. Fast alles, was Sie als Administrator eines Ubuntu-Systems tun müssen, kann über sudo oder gksudo erfolgen. Wenn Sie wirklich eine dauerhafte Root-Anmeldung benötigen, ist die beste Alternative, eine Root-Anmeldeshell mit dem folgenden Befehl zu simulieren:

sudo -i

Wenn Sie jedoch Root-Anmeldungen aktivieren müssen , können Sie dies folgendermaßen tun:

sudo passwd root

Deaktivieren Sie Ihr Root-Konto erneut

Wenn Sie aus irgendeinem Grund Ihr Root-Konto aktiviert haben und es wieder deaktivieren möchten, verwenden Sie den folgenden Befehl im Terminal:

sudo passwd -dl root

Systemweite Gruppen-Sudo

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Melden Sie sich ab und dann wieder an.

Setzen Sie das Sudo-Timeout zurück

Sie können sicherstellen, dass sudo beim nächsten Mal nach dem Kennwort fragt, indem Sie Folgendes ausführen:

sudo -k

Ich habe dies gepostet, bevor ich es hinzufügte, für eine systemweite Vorgehensweise und für andere, lesen Sie hier:
user209328 30.10.13

Dies war eine verspätete Antwort, ist jedoch die umfassendste in Bezug auf die verfügbaren Optionen.
4.

1
Hmm, unter Ubuntu 18.04 MATE funktioniert dies perfekt, während ich unter Ubuntu 18.04 GNOME Falten mit dem Problem "Benutzername ist nicht in der sudoers-Datei ..." bekam. Das ist der Grund, warum so viele Leute Linux einfach hassen - weil es selten "kausal" ist: D Nur für den Fall, dass Sie auf dasselbe stoßen
Peter

Mit der Umgebungsvariablen EDITOR kann der verwendete Editor festgelegt werden, um z. B. in Nano sudo env EDITOR=/bin/nano visudozuverlässig zu bearbeiten sudoers. (Update-Alternativen können auch zum Einstellen des Editors verwendet werden)
Gert van den Berg

29

Die bevorzugte Möglichkeit, Einzel- (oder Gruppen-) Berechtigungen zu erteilen, ist das Hinzufügen von Dateien unter /etc/sudoers.d

Dies trennt lokale Änderungen von der Standardrichtlinie und spart Zeit, falls sich die Datei des Distributions-Sudoers ändert.

Verwenden Sie, um den aktuell angemeldeten Benutzer zu einem Sudoer zu machen und ihn sudonicht zur Eingabe eines Kennworts aufzufordern

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

Dadurch wird eine Datei mit dem Namen erstellt /etc/sudoers.d/$USER(wobei $USERder Benutzername des Benutzers ist, unter dem Sie angemeldet waren, als Sie diesen Befehl ausgeführt haben), um zu verdeutlichen, welchen Benutzern die Berechtigung erteilt wurde.

Wenn Sie dies für einen anderen Benutzer tun möchten, ersetzen Sie einfach beide Instanzen von $USERdurch einen anderen Benutzernamen im obigen Befehl.

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

Ebenso kann eine Datei zum Verwalten mehrerer Anweisungen verwendet werden:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Siehe /etc/sudoers.d/READMEund man sudoersfür weitere Informationen.


Der Echo-Befehl ist fehlgeschlagen, obwohl ich root bin. Aber ich habe die Datei hinzugefügt und sie direkt bearbeitet und dies funktionierte auf dem neuesten Ubuntu (während das Hinzufügen des Benutzers zu den Sudoern direkt nicht funktionierte!)
scape

1
Der richtige Weg ist, es mit dem teeBefehl zu tun .
woto

1
Dies ist ein besserer Weg, der funktioniert sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'sudo chmod 440 /etc/sudoers.d/$(logname)
:,

In der sudo ... >fileShell wird die Umleitung in der ursprünglichen Shell ausgeführt, sodass sie nur in der Root-Shell funktionieren kann.
Konstantin Pelepelin

Die Tee-Methode, ohne Erlaubnis Fragen:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip

7

Netter Einzeiler zum Entfernen von Sudo-Eingabeaufforderungen für den aktuellen Benutzer

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

2
Ich denke man könnte einfach machen :, braucht ja echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudonur (und wird in der Standardkonfiguration gar nicht benötigt, IIRC). visudosudoenv
muru

Hier könnte so viel schief gehen (natürlich alle Benutzerfehler), dass es meiner bescheidenen Meinung nach vorzuziehen ist, die sudoer-Datei direkt zu bearbeiten ( sudo visudo), während das Ergebnis getestet wird (wobei der Editor noch geöffnet ist). für jene neuen Benutzer, die versucht sein könnten, diesen "Einzeiler" zu versuchen.
Michael

Danke für die Rückmeldung! Ich habe nur schnell versucht, das Entfernen von sudo password prompt in meinen flüchtigen Test-VMs per Skript zu überprüfen. Fühlen Sie sich frei, Verbesserungen vorzuschlagen :)
Eric Landry

Sie müssen die sudo chmod 440 /etc/sudoers.d/$(logname)Dateiberechtigungen noch korrigieren, wie in der README-Datei in diesem Verzeichnis angegeben.
Paradroid

6

Natürlich wird nicht empfohlen, was Sie tun möchten. Nach einer Weile wird das Betreten sudojedoch so automatisch, dass seine Nützlichkeit abnimmt.

Ein anderer Ansatz ist, die sudoers-Datei so zu belassen wie sie ist, und gleichzeitig etwas Kompliziertes mit Ihren zig hundert Servern zu tun sudo bash. Dadurch erhalten Sie eine Shell, die als root authentifiziert wird, bis Sie sie beenden.


12
sudo -soder sudo -isind wahrscheinlich beide bessere Ideen als sudo bash, weil sie sicherstellen, dass die Umwelt gesund und die Dinge sind.
Darael

2
"sane and things" ist im Allgemeinen nicht das Gebiet der "besseren Ideen". Könnte jemand eine technische Erklärung geben, warum sudo -s oder sudo -i besser ist als sudo bash? (Bearbeiten: Hier ist eine relevante Frage askubuntu.com/questions/376199/… )
Nuzzolilo

2
Für eine Reihe von sudoBefehlen (insbesondere für sudo pip ...) ist die sudo -HEinstellung HOME erforderlich , damit der Befehl ordnungsgemäß ausgeführt werden kann. In anderen Fällen kann sudo -E(env erhalten) erforderlich sein. Laufen wird sudo bashwahrscheinlich in den meisten Fällen funktionieren, aber nicht in allen. Wenn dies nicht der Fall ist, ist nicht klar, warum.
Michael

1
sudo su ist die traditionelle Methode, um die Rollen zu wechseln und ein Sys-Administrator zu werden.
user1656671

3

Vom Super User kommt eine gute Antwort:

Verwenden Sie den -S-Schalter, der das Passwort von STDIN liest:

echo <password> | sudo -S <command>

Ersetzen Sie <password>durch Ihr Passwort.


2
Dies wird nicht empfohlen, da das Kennwort in der Shell-Verlaufsdatei im Klartyp verbleibt. Wenden Sie stattdessen eine der anderen Lösungen an.
HappyCactus

1
@HappyCactus kannst du einmal ein Leerzeichen davor platzieren, echodamit es nicht in der Geschichte erscheint?
WinEunuuchs2Unix

Ja, damit wird vermieden, dass das Klartextkennwort in der Verlaufsdatei angezeigt wird. Aber erinnerst du dich immer daran, es hinzuzufügen? :-)
HappyCactus

@HappyCactus Ich neige dazu, aus Versehen einen führenden Platz hinzuzufügen und mich dann zu ärgern, wenn die Geschichte nicht abrufbar ist :) Trotzdem hat der Superuser 129 positive Stimmen, daher denke ich, dass es eine gute Antwort ist, hier zu bleiben. Die Leute werden unsere Kommentare lesen und die Risiken und Schritte zur Risikoaversion kennen.
WinEunuuchs2Unix

Ich bin völlig einverstanden. Einen schönen Tag noch!
HappyCactus

2

Einzeiler

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'


2

Dies ist eine einzeilige Lösung, die auch die Dateiberechtigungen ändert, wie in den /etc/sudoer.d/READMEfolgenden Abschnitten angegeben :

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)

0
  • Erweiterung der @ upteryx-Idee.

  • So habe ich den Benutzer ohne Root-Kennwort in ein kurzlebiges Docker-Image für die Verwendung in einer CICD-Pipeline implementiert:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.