Das Hinzufügen von NOPASSWD in / etc / sudoers funktioniert nicht

45

Am 14.04 hier. Ich habe SSH in meinen Computer eingefügt und die folgende Zeile hinzugefügt /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

Und dann versuchte ich zu rennen:

sudo mkdir /etc/blah

... und ich werde nach meinem Passwort gefragt. Warum?!?

Ich möchte bei diesem Vorgang nicht nach meinem Passwort gefragt werden. Bitte beachte, dass ich beim Laufen ls -ltr /Folgendes erhalte:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Aber ich denke nicht, dass das wichtig ist, weil ich mich als "Sudoer" etabliert habe, oder?

Was muss ich tun, damit ich sudo mkdir /etc/blahals mein aktueller Benutzer ( myuser) ausgeführt werden kann, ohne nach dem Kennwort gefragt zu werden?

Hier ist meine gesamte /etc/sudoersDatei:

#
# 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
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: 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
Zac
quelle
Könnten Sie Ihre sudoers-Datei posten? Die Richtlinie ist richtig, könnte aber aufgrund des Kontexts nicht funktionieren.
Lety
Danke @Letizia - siehe mein Update, springt irgendetwas bei dir raus?
Zac
Ich denke , ich sollte auch beachten , dass ich habe nicht verwenden , visudojedoch keine manuelle Änderungen an dieser Datei wurden keine Aufträge kopieren-n-Paste, tippte ich alles in , wie sie ist. Aber werden auch visudoandere Dateien bearbeitet? Das könnte es sein ...
Zac
/etc/sudoers.d//etc/sudoers
Checken

Antworten:

68

Es ist die Reihenfolge der Regeln, die dies verursacht hat. Die letzte Regel hat Vorrang.

Um Ihr Problem zu beheben, verschieben Sie einfach Ihre Linien,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

aus der sudoersDatei nach

sudo visudo -f /etc/sudoers.d/myOverrides 

Dies ist eine bessere Vorgehensweise als das Bearbeiten der sudoersDatei mit einem Nur-Text-Editor. Wenn Sie versehentlich Fehler in die Datei einfügen, können Sie möglicherweise nicht mehr ausgeführt werden sudo. Immer verwenden visudo, damit die Syntax überprüft wird und Sie vor Fehlern gewarnt werden!

Ihre Direktive funktioniert nicht, weil sie überschrieben wird von:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Wenn Sie den groupsBefehl ausführen , sollten Sie sehen, dass Ihr Benutzer zu diesen Gruppen gehört.

Lety
quelle
Der Dateiname sollte einer Konvention von nn-somenamezum Beispiel/etc/sudoers.d/20-myoverrides
shimatai
Ja, natürlich, wenn Sie mehr als eine Datei haben, werden diese in sortierter lexikalischer Reihenfolge analysiert. Daher ist es eine gute Praxis, eine Zahl zu verwenden, und es ist einfach, diese Reihenfolge zu kennen.
Lety
21

Befindet sich myuser in der Gruppe sudo , bietet diese Zeilenreihenfolge keinen passwortlosen Zugriff (wie von Florian Diesch angegeben), da die dritte Zeile die erste Zeile überschreibt.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Also einfach die Zeilen in diese Reihenfolge bringen:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

Überprüfen Sie unter myuser account, sudo -lüber welche Berechtigungen myuser verfügt.

Kostyantyn
quelle
10

Stimmen mehrere Einträge für einen Benutzer überein, wird der letzte verwendet. Also, ob fizzbuzzund chadminsind Mitglieder der Gruppen adminoder sudosie werden immer noch nach einem Passwort gefragt.

Fügen Sie die beiden Zeilen am Ende der sudoersDatei nach der #includedirZeile ein.

Florian Diesch
quelle
Tatsächlich ist also eine Kombination aus @Letizia und Ihren Antworten die beste, da dies standardmäßig #includedirder letzte Eintrag ist sudoers.
muru
0

Wenn Sie die Befehle anpassen, über die sudoSie sie ausführen können, sollten Sie diese Änderungen im Idealfall in einer separaten Datei unter vornehmen, /etc/sudoers.d/anstatt die sudoersDatei direkt zu bearbeiten . Sie sollten auch immer verwenden visudo, um die Datei (en) zu bearbeiten. Sie sollten sich nicht gewähren NOPASSWDauf ALLBefehle.

Beispiel: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Geben Sie Ihre Zeilenberechtigung ein: myuser ALL= NOPASSWD: /bin/mkdir

Speichern und visudobeenden Sie dann und Sie werden gewarnt, wenn Sie Syntaxfehler haben.

Sie können ausführen sudo -l, um die Berechtigungen anzuzeigen, die Ihrem Benutzer erteilt wurden. Wenn einer der benutzerspezifischen NOPASSWDBefehle VOR einem %groupyouarein ALL=(ALL) ALLBefehl in der Ausgabe angezeigt wird, werden Sie zur Eingabe Ihres Kennworts aufgefordert.

Wenn Sie feststellen, dass Sie viele dieser sudoers.d-Dateien erstellen, möchten Sie sie möglicherweise nach Benutzer benannt erstellen, damit sie leichter zu visualisieren sind. Beachten Sie, dass die Reihenfolge der DATEINAMEN und der REGELN in der Datei sehr wichtig ist. Die zuletzt geladene Datei gewinnt, unabhängig davon, ob MEHR oder WENIGER als die vorherigen Einträge zulässig ist.

Sie können die Reihenfolge der Dateinamen steuern, indem Sie ein Präfix von 00-99 oder aa / bb / cc verwenden. Beachten Sie jedoch auch, dass Dateien, die kein numerisches Präfix haben, nach den nummerierten Dateien geladen werden Einstellungen. Dies liegt daran, dass abhängig von Ihren Spracheinstellungen die von der Shell verwendete "lexikalische Sortierung" zuerst Zahlen sortiert und dann bei der Sortierung in "aufsteigender" Reihenfolge Groß- und Kleinbuchstaben verschachtelt.

Versuchen Sie es mit printf '%s\n' {{0..99},{A-Z},{a-z}} | sortund, um printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortzu sehen, ob Ihre aktuelle Sprache gedruckt wird AaBbCcusw., oder bestimmen Sie ABCdann abc, welches das beste Präfix für den "letzten" Buchstaben ist.

dragon788
quelle