Warum funktioniert die NOPASSWD-Option von sudoers nicht?

75

Ich habe eine NOPASSWD-Zeile in / etc / sudoers (bearbeitet mit visudo)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

Die Ausgabe ist jedoch,

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

Diese Art von Befehlen funktioniert auf einem OpenSuSE-Rechner, jedoch nicht unter Ubuntu 11.10. Was mache ich falsch?

Hinweis : Ich kann keine relevanten Systemprotokollmeldungen finden, z tail -f /var/log/syslog. B. über .

bearbeiten

Hier ist / etc / sudoers.

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
gatoatigrado
quelle
2
Können Sie das Ganze zeigen sudoers, ist die Reihenfolge der Regeln nicht unerheblich.
Enzotib

Antworten:

117

Sie sollten diese Zeile nach der Zeile mit der Regel für die sudoGruppe einfügen, da in der sudoersManpage Folgendes angegeben ist:

   When multiple entries match for a user, they are applied in order.
   Where there are multiple matches, the last match is used (which is not
   necessarily the most specific match).
Enzotib
quelle
5
als zusätzliche Note, dies auch in mehreren Gruppen gilt für den Benutzer: zB Benutzer in der Gruppe Admin und Gruppen sudo , wenn die Regel für sudo nach ist Admin dann die Regel für sudo die Regel für überschreibt Admin für den Benutzer in beiden Gruppen.
Populus
2
Vielen Dank! Ich habe meine Zeile am Ende von hinzugefügt /etc/sudoersund es funktioniert jetzt. Vollständige Erklärung hier für Leute, die interessiert sind: techglimpse.com/ubuntu-sudoers-nopasswd-option-not-working
elimisteve
4

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.

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

Geben Sie Ihre Zeilenberechtigung ein: gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

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 "lexikalische Sortierung", die die Shell verwendet, 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
Ich stimme dem zu. Ein Teil der Logik beim Bearbeiten der Datei / etc / sudoers schien nicht intuitiv zu sein. Ich konnte% wheel ALL = (ALL) NOPASSWD: ALL nicht so verwenden, wie es in sudoers geschrieben wurde, bis ich einen Beitrag las, in dem jemand das #includedir sagte /etc/sudoers.d musste vor den anderen Zeilen wie% SUDO und% WHEEL stehen. Als ich das # include-Verzeichnis über die anderen Gruppenberechtigungen setzte, begannen sie zu arbeiten. Also habe ich Dateien für jede Gruppe in /etc/sudoers.d/ in der gleichen Reihenfolge wie in der sudoers-Datei erstellt, aber root ALL = (ALL) ALL musste immer noch sudoers unterhalb der Zeile #includedir sein. Seltsam.
AveryFreeman
Eigentlich denke ich, dass das Includedir am Ende der Sudoer bleiben sollte. Was Sie wahrscheinlich gesehen haben, ist eine der anderen Dateien in Ihrer sudoers.d, die Ihre Änderung rückgängig gemacht hat. Möglicherweise befindet sich in Ihrer Hauptdatei auch eine Zeile weiter unten, die die Radgruppe einschränkt. Denken Sie daran, dass Sudoer dort verarbeitet werden, wo die letzte Regel, die auf einen Befehl oder eine Gruppe angewendet wird, gewonnen wird. Dies hilft, wenn ein allgemeiner ANY-Befehl am Ende steht und kein NOPASSWD hat, überschreibt er Ihre vorherigen Ausnahmen. Aus diesem Grund sollten Sie Ihre Regeln in separaten Dateien haben, damit sie später verarbeitet werden.
dragon788
Ich glaube nicht, es war eine brandneue Installation von Arch. Ich habe nur versucht, diese eine Zeile zu kommentieren. Aber das ist auf jeden Fall eine gute Sache, danke.
AveryFreeman
Einige Systeme verwenden kein Wheel und verwenden stattdessen eine Gruppe namens sudo oder adm oder admin. Ich kann mich nicht an das Arch-Verhalten erinnern, aber Sie können rennen idund sehen, zu welchen Gruppen Sie gehören.
dragon788
Bogen benutzt Rad.
AveryFreeman
4

Ich bin auch nur darauf gestoßen.

Meine Situation ist, dass ich ein Remote-System einrichte, das kopflos ausgeführt wird. Ich habe die vollständige Festplattenverschlüsselung aktiviert (andernfalls kann ein Angreifer mit physischem Zugriff alles tun, was er oder sie möchte). Ich möchte mich nur mit dem Pub-Schlüssel authentifizieren (ich werde das Passwort deaktivieren, damit das Schema "Etwas haben, etwas wissen" ein Passwort ist geschütztes Schlüsselpaar - Root Login ist natürlich komplett deaktiviert)

Das Ubuntu-Installationsprogramm fordert Sie auf, einen Benutzer ohne Rootberechtigung anzugeben, der der Gruppe hinzugefügt wird sudo. Ich habe mich dann manuell der sudoersDatei hinzugefügt mit sudo visudo:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

HINWEIS: Wenn Sie nopasswd auf Ihrem Laptop verwenden, müssen Sie Ihren Computer immer sperren, wenn Sie weggehen. Andernfalls kann ein gelegentlicher Angreifer viel gefährden, während Sie aufstehen, um Sahne in Ihren Kaffee zu füllen

Ich musste mich immer noch mit einem Passwort authentifizieren.

Die Antwort von enzotib ist der Schlüssel zu dem, was los ist. Das Gruppen-Sudo wird in sudoers nach der Eingabe meines Benutzernamens angezeigt.

Anstatt meinen Eintrag unter die sudo-Zeile zu verschieben, entfernte ich einfach die zuvor hinzugefügte Zeile und fügte NOPASSWDsie dann dem Eintrag für hinzu%sudo

Das scheint zu funktionieren. Verwenden Sie nopasswd wieder nur, wenn Sie es wirklich brauchen (in meinem Fall war es genau das, was ich brauchte, für die meisten Benutzer, die ein Passwort für sudo-Aktivitäten benötigen, am besten)

Zusätzliche WARNUNG: Bearbeiten Sie Sudoer immer mit visudo. (sudo visudo) Wenn Sie ein anderes geöffnetes Fenster auf den Root-Benutzer umschalten, können Sie außerdem alle Fehler beheben, die Sie beim Ändern der sudoers-Datei möglicherweise gemacht haben.

Jorfus
quelle
Es ist nie eine gute Idee, NOPASSWD für alle Befehle zu aktivieren. Dies bedeutet, dass jeder, der auf Ihr System zugreift und einen Benutzer in die sudo-Gruppe einbindet, in der Lage ist, SEHR schnell ALLES SCHLECHTES an Ihrem System zu tun. Ich kann dies problemlos mit nur wenigen Minuten Zugriff über eine Live-CD tun oder indem ich Ihren Benutzer dazu bringe sudo, einen Cmd mit Ihren eigenen Berechtigungen auszuführen, um zusätzlich zum Ausführen des angeforderten Befehls einen weiteren Benutzer zur sudo-Gruppe hinzuzufügen.
dragon788
2
Machen Sie keine pauschalen Aussagen wie diese. Auf einem kopflosen System ist es nicht wünschenswert, überhaupt ein Anmeldekennwort festzulegen (stattdessen auf Basis von Schlüsselpaaren). Ich habe die vollständige Festplattenverschlüsselung aktiviert, also viel Glück mit dieser Live-CD. (was es Ihnen übrigens erlauben würde, alle möglichen lustigen Dinge auf einem unverschlüsselten System zu tun, unabhängig von der sudoers-Datei). Außerdem können Sie an keinen der Speicherorte in meinem PATH schreiben und ich gebe Ihnen zunächst keine Shell es sei denn, ich vertraue darauf, dass Sie nicht versuchen, das System zu untergraben. Ihre Sicherheitsbedenken sind nicht ungültig, sie sind einfach veraltet und nicht so universell einsetzbar, wie Sie es implizieren.
Jorfus
Für diejenigen, die wie Sie kein tiefes Sicherheitsverständnis haben, ist diese Art von Empfehlung wahrscheinlich besser als die Alternative, aber ich stimme zu, dass sie nicht ideal ist.
Dragon788
@ dragon788 Richtig, vielleicht können wir beide unsere Antworten bearbeiten, um Benutzern aller Ebenen dabei zu helfen, einen Schritt in Richtung einer besseren Sicherheit zu machen. Ich werde eine Warnung hinzufügen, um die vollständige Festplattenverschlüsselung zu aktivieren, um eine Gefährdung zu verhindern, wenn ein Angreifer physischen Zugriff hat, und eine Notiz, dass sudo nopasswd zu einer schnellen Gefährdung führen kann, wenn ein Laptopbenutzer vergisst, seinen Computer öffentlich zu sperren. (Obwohl ich vorschlagen würde, eine Fünf-Minuten-Sperre und eine Bildschirmsperre
einzurichten,
Ausgezeichnetes Update, meine Antwort enthält keine wichtigen Empfehlungen außer diesen Kommentaren. Und ironischerweise habe ich bei der Arbeit, bei der ich die vollständige Festplattenverschlüsselung verwende, NOPASSWD aktiviert, weil ich ein sehr sicheres Passwort habe, das mir die Eingabe erschwert wiederholt, und ich benutze xautolock, um meine Maschine nach einer kurzen Leerlaufzeit zu sperren.
Dragon788
0

Löschen Sie auf dem Remote-System die Verschlüsselung, aber lassen Sie alles einem Root-Benutzer wie in der Gruppe "Administratoren" gehören - das ist nicht 0!
Sie können #sudo -g Administrators diejenigen ändern , die vollen Zugriff benötigen - nicht in der sudo Datei, sondern im .loginProfil. Jedes Standardskript kann jetzt als "root" auf die Fernbedienung zugreifen und Sie können die zu schützenden Dateien schützen.
Eine andere handliche "Gruppe" ist "Sandbox" mit einem Login-Verzeichnis im Browser-Cache und kann dieses frei lesen und sonst nichts. Verwenden Sie das erste Zeichen in Großbuchstaben.

Knut H
quelle