it-swarm.com.de

Wie vermeide ich, von sudo zur Eingabe eines Passworts aufgefordert zu werden?

Ich weiß, dass ich über den Befehl su root (Superuser) werden kann, aber ich muss ihn nach der Eingabe der Befehle autorisieren. Gibt es eine Möglichkeit, wie ich root werden und (mit Passwort) in einer Zeile autorisieren kann?

79
Vader

Das Einzige, woran ich denken kann, ist:

echo 'password' | Sudo -S command

Das Flag -S bewirkt, dass Sudo das Kennwort aus der Standardeingabe liest. Wie in man Sudo erklärt:

-S, --stdin

Schreiben Sie die Aufforderung zum Standardfehler und lesen Sie das Kennwort von der Standardeingabe, anstatt das Endgerät zu verwenden. Dem Passwort muss ein Zeilenumbruch folgen.

Wenn Sie also ls mit Sudo Berechtigungen ausführen möchten, müssen Sie dies tun

echo 'password' | Sudo -S ls

Beachten Sie, dass dies zu einem Fehler führt, wenn Ihr Zugriffstoken Sudo aktiv ist, wenn Sie Ihr Kennwort nicht eingeben müssen, weil Sie dies bereits kürzlich getan haben. Um dies zu umgehen, können Sie den Zugriffstoken mit -k zurücksetzen:

echo 'password' | Sudo -kS ls

Ich kenne keine Möglichkeit, Sie in eine tatsächliche Root-Shell (wie su oder Sudo -i) zu bringen. Dies könnte jedoch für das, was Sie brauchen, ausreichen.

79
terdon

Führen Sie im Terminal den Befehl visudo aus, um die sudoers -Datei zu bearbeiten:

Sudo visudo

und füge die folgende Zeile der sudoers Liste hinzu

username ALL = NOPASSWD : ALL

Hinweis: Ersetzen Sie den Benutzernamen durch Ihren tatsächlichen Benutzernamen in der obigen Zeile.

83
Din

Die echo 'password' | Sudo -kS ls -Lösung funktioniert, weist jedoch einige Sicherheitsmängel auf, von denen die meisten bereits in den Kommentaren zu Terdons Antwort erwähnt wurden. Daher möchte ich einen anderen Ansatz vorschlagen:

Wenn es sich nur um einen Befehl handelt, den Sie häufig ausführen müssen, z. apt-get upgrade, Sie können Ihr System so konfigurieren, dass Sudo someCommandnicht ein Kennwort erfordert.

Führen Sie dazu visudo aus und geben Sie Folgendes ein:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

Beachten Sie, dass der Benutzer bei Eingabe eines Befehls ohne eines Arguments (z. B. ohne upgrade in diesem Beispiel) das Argument beliebig ausführen kann mit Vorsicht verwenden.

25
Heinzi

Sie können dies auch tun:

Sudo -S <<< "password" command
13
Jahid

Anstatt das Kennwort vollständig zu entfernen, können Sie das Zeitlimit verlängern, sodass Sie es nur einige Male pro Tag eingeben müssen. Führen Sie in einem Terminal Folgendes aus:

Sudo visudo

Fügen Sie am Ende der Datei die folgende Zeile hinzu, um eine Zeitüberschreitung von 30 Minuten festzulegen (ersetzen Sie jsmith durch Ihren Benutzernamen).

Defaults:jsmith timestamp_timeout=30

Sie können eine beliebige Zahl verwenden. -1 bedeutet keine Zeitüberschreitung (wird nur beim ersten Mal abgefragt), und 0 bedeutet eine sofortige Zeitüberschreitung (wird jedes Mal abgefragt, wenn Sie Sudo). Das Standardzeitlimit beträgt 5 Minuten.

8
Shital Shah

Vader, nach Ihrem Kommentar zu Ihrer ursprünglichen Frage möchten Sie zu einer interaktiven Shell wechseln, die mit Superuser-Berechtigungen ausgeführt wird, oder?

Sudo hat ein bestimmtes Argument, um eine Shell anzufordern:

-s [command]
The -s (Shell) option runs the Shell specified by the Shell environment variable if
it is set or the Shell as specified in the password database. If a command is
specified, it is passed to the Shell for execution via the Shell's -c option. If no 
command is specified, an interactive Shell is executed.

Dies vermeidet die bereits erwähnten Sicherheitsmängel und ermöglicht es, mit dem folgenden Befehl "root" zu werden:

Sudo -s

WENN Ich wirklich eine Root-Shell ausführen muss (in den meisten Fällen nicht), dann finde ich es sehr hilfreich, die HOME-Umgebung zu haben Variable der Shell entsprechend gesetzt (um anzuzeigen, dass sie als "root" ausgeführt wird), kann dies mit dem "-H" -Flag erfolgen. Der volle Befehl wäre also

Sudo -s -H

Weitere Informationen finden Sie in Sudos Manpage .

1
he1ix