Wie führe ich den Befehl sudo ohne Passwort aus?

235

Wie hat der ubuntuBenutzer auf den AWS-Images für Ubuntu Server 12.04 sudofür alle Befehle kein Passwort , wenn keine Konfiguration dafür vorhanden ist /etc/sudoers?

Ich verwende Ubuntu Server 12.04 auf Amazon. Ich möchte einen neuen Benutzer hinzufügen, der das gleiche Verhalten wie der Standardbenutzer von Ubuntu aufweist. Speziell möchte ich sudofür diesen neuen Benutzer passwortfrei .

Also habe ich einen neuen Benutzer hinzugefügt und bin zum Bearbeiten /etc/sudoersgegangen (natürlich mit Visudo). Nach dem Lesen dieser Datei hatte der Standardbenutzer den Eindruck, dass er kein ubuntuPasswort mehr hat, sudoweil er Mitglied der adminGruppe ist. Also habe ich meinen neuen Benutzer hinzugefügt. Welches hat nicht funktioniert. Dann habe ich versucht, die NOPASSWDDirektive hinzuzufügen sudoers. Was auch nicht geklappt hat.

Jedenfalls bin ich jetzt nur neugierig. Wie funktioniert das ubuntubekommen Benutzer passwordless Privilegien , wenn sie in nicht definiert sind /etc/sudoers. Was ist der Mechanismus, der dies ermöglicht?

Aychedee
quelle
Siehe auch: sudo ohne Passwort ausführen?
Eliah Kagan

Antworten:

332

Okay, ich habe die Antwort gefunden, daher kann ich sie der Vollständigkeit halber hier einfügen. Am Ende /etc/sudoersist, was ich dachte, nur ein Kommentar:

#includedir /etc/sudoers.d

Dies schließt jedoch tatsächlich den Inhalt dieses Verzeichnisses ein. Darin befindet sich die Datei /etc/sudoers.d/90-cloudimg-ubuntu. Welches hat den erwarteten Inhalt

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Hier befindet sich also die Sudo-Konfiguration für den Standard-Ubuntu-Benutzer.

Sie sollten diese Datei mit visudo bearbeiten. Mit dem folgenden Befehl können Sie die richtige Datei mit visudo bearbeiten.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

Und füge eine Zeile hinzu wie:

aychedee ALL=(ALL) NOPASSWD:ALL

Am Ende.

Aychedee
quelle
4
Ich bin mir ziemlich sicher, dass ich einen vollständigen Neustart durchführen musste.
Aychedee
2
Für jeden neuen angemeldeten Benutzer werden neue Sudo-Regeln verwendet - Sie müssen sich also mindestens erneut anmelden
bluszcz
32
'sudo service sudo
restart
4
In späteren Versionen (14.04 zum Beispiel) ist die enthaltene Datei /etc/sudoers.d/90-cloud-init-users(so zu bearbeiten .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Es wäre zwar sauberer, zusätzliche Dateien zu erstellen, als die generierten zu bearbeiten. Beachten Sie, dass Dateien , die ein enthält , .oder der Endung ~wird nicht enthalten sein.
Molomby
2
@ Phil_1984_ Höchstwahrscheinlich wurde es als Kommentar hinzugefügt, um die Kompatibilität mit anderen (Standard-?) Versionen von sudo zu ermöglichen, die keine Includes zulassen, aber nicht durch einen seltsamen Kommentar ausgelöst werden. (Standards sind hart! ;-)
Jpaugh
94

Ich stellte fest, dass das einfachste Verfahren, um dieses Verhalten auf mehreren Servern zu replizieren, das Folgende ist:

sudo visudo

Ändern Sie diese Zeile:

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

zu dieser Zeile:

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

Und verschiebe es unter diese Zeile:

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

du solltest jetzt folgendes haben:

# 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"

# Host alias specification

# User alias specification

# Cmnd alias specification

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

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

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

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

#includedir /etc/sudoers.d

dann für jeden Benutzer, der sudo-Zugriff mit einem Passwort benötigt :

sudo adduser <user> sudo

und für jeden Benutzer, der sudo-Zugang OHNE Passwort benötigt :

sudo adduser <user> admin

Führen Sie zum Schluss Folgendes aus:

sudo service sudo restart

Und das ist es!

Bearbeiten: Möglicherweise müssen Sie die Administratorgruppe hinzufügen, da ich glaube, dass sie nicht standardmäßig vorhanden ist.

sudo groupadd admin

Sie können ubuntuder adminGruppe auch den Standard-AWS- Benutzer mit dem folgenden Befehl hinzufügen :

sudo usermod ubuntu -g admin

Hinweis: Wie @hata bereits erwähnt, müssen Sie möglicherweise den admNamen Ihrer Administratorgruppe angeben , je nachdem, welche Ubuntu-Version verwendet wird.

jiminikiz
quelle
3
Hinweis für sich selbst: Es ist eine Konvention, weniger restriktive Berechtigungen in den Stapel zu verschieben. Andernfalls wird die Funktionalität nicht beeinträchtigt.
Poweratom
2
Wie jiminikiz erklärte, musste ich % admin nach % sudo auf meinem Ubuntu GNOME 16.04 LTS platzieren. Außerdem ist die Gruppen-ID des Administrators nicht admin, sondern adm auf meinem Ubuntu. Es war kein Neustart erforderlich.
hata
5

Ich würde meine eigene Datei im Verzeichnis /etc/sudoers.d/ erstellen. Die von Amazon Cloud erstellte Datei wird möglicherweise bei einem Update überschrieben. Nachdem Sie Ihre Datei in /etc/sudoers.d erstellt haben, fügen Sie diesen Eintrag hinzu.

<your user name> ALL=(ALL) NOPASSWD:ALL

Starten Sie das System neu und das wird funktionieren.

WaughWaugh
quelle
2

Kurze Antwort ohne Verwendung eines Editors (auf Bash getestet, sehr riskant auf Remote-Hosts auszuführen).

Konfigurieren Sie sudo so, dass es für den aktuellen Benutzer ohne Kennwort funktioniert:

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

Überprüfen Sie die Bearbeitung mit:

sudo visudo -c

Überprüfen Sie, ob Sie sudo ohne Passwort verwenden können:

sudo cat /etc/sudoers | grep "$USER"

... oder einfach mal probieren mit:

sudo <anything>
user315445
quelle
21
Dies ist ein ziemlich gefährlicher Ratschlag. Kopieren Sie ihn und fügen Sie ihn falsch ein, um sich von Ihrem eigenen Server zu trennen. Daher der Rat, Visudo zu verwenden. Vor dem Speichern auf der Festplatte wird überprüft, ob die Syntax korrekt ist. Also für alle, die dies nutzen wollen. Tun Sie dies nicht auf einem Remote-Server, der Ihnen am Herzen liegt. Vielleicht möchten Sie eine Warnung dazu in Ihre Antwort aufnehmen.
Aychedee
8
Kein Visudo zu benutzen ist eine schreckliche Idee. Vertrau mir, ich weiß.
trognanders
1
IMHO ist ein Copy-Paste sicherer als eine manuelle Bearbeitung. Eine kleine Vereinfachung:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
Artofrain
4
@theartofrain - Normalerweise würde ich zustimmen, aber es visudoist besonders schön , wenn Sie nicht zulassen, dass die sudoers-Datei beschädigt wird, sodass Sie nicht von Ihrem Computer ausgeschlossen werden (oder zumindest sudo).
Jon V
3
@JonV Sie können Administratorrechte auch über verlieren visudo, aber normalerweise nicht aus Versehen, da visudonur Änderungen gespeichert werden, die gemäß der Grammatik für sudoers-Dateien wohlgeformt sind . Die meisten Fehler sind syntaktisch falsch und richten daher keinen Schaden an visudo. Wenn /etc/sudoersoder eine Datei /etc/sudoers.d ist schlecht geformt, sudoweigert sich, die Berechtigungen für jedermann als Sicherheitsmaßnahme zu erhöhen, weshalb die Verwendung nicht visudogefährlich ist. (Obwohl es manchmalpkexec ohne Neustart
behoben werden
0

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
Seth Bergman
quelle