Wie kann ich sudo zwingen, nach dem Aufwachen aus dem Suspend immer nach einem Passwort zu fragen?

15

Angenommensudo , ich führe einen Befehl mit aus . Wenn ich ihn dann sudoinnerhalb der nächsten 15 bis 5 Minuten verwende (nicht sicher, wie lange er sich an mich erinnert), werde ich nicht zur Eingabe eines Passworts aufgefordert. Es wird mich nur wieder auffordern, wenn ich es mindestens so lange nicht benutzt habe.

Wenn ich jedoch meinen Computer anhalte, ihn aufwecke und mich vor Ablauf dieses Zeitraums anmelde, kann ich einfach einen sudoBefehl erneut ausführen und werde nicht nach meinem Kennwort gefragt, da ich es nicht für den bestimmten Betrag zugelassen habe von Zeit.

Also, wie kann ich es so machen, dass, egal wie lange ich es nicht benutzt habe sudo, es mich definitiv nach dem Suspend zur Eingabe eines Passworts auffordert, sobald ich mich wieder eingeloggt habe, auch wenn ich mich noch innerhalb dieses Zeitrahmens befinde, in dem sich das befindet 15/5 Minuten der Nichtbenutzung sudosind noch nicht vergangen?

Am wahrscheinlichsten ist es, einen Befehl zum Entfernen aller Identitätscaches auszuführen, sudowenn ein bestimmter Befehl ausgeführt wird, der beim Aufwecken ausgeführt wird.

Ich verwende Ubuntu GNOME 15.10 mit GNOME 3.18.


quelle
1
Gute Frage, aber warum bist du paranoid? denn wenn die andere Person als Sie weiß, dass Ihr Login-Passwort nicht gesperrt werden kannsudo
Edward Torvalds
Wenn Sie dieses Terminalfenster nur verlassen, müssen Sie Ihr Kennwort erneut eingeben, wenn Sie ein neues Terminalfenster öffnen, unabhängig davon, wie schnell Sie dies tun. Wenn Sie etwas in einem Terminalfenster ausführen, fügen Sie `; exit` und das Fenster wird geschlossen, wenn der Befehl abgeschlossen ist.
Marc
@Marc: Ich weiß, aber es ist nicht immer bequem zu beenden oder sudoSie beim nächsten Mal manuell zu fragen. Eine automatische Lösung wäre vorzuziehen.
@edwardtorvalds: Nun, ich könnte mich wieder einloggen und dann gehen (nicht, dass ich das sehr oft mache), und wenn dann jemand kommt, wäre es schlecht, wenn er es nur benutzen könnte sudo. Ich weiß, dass das für meinen eigenen Computer etwas seltsam klingt, aber ich hätte Wartungsarbeiten an einem anderen Ubuntu-Computer durchführen können. Wenn ich den Benutzer dann wieder anmelde, ist es möglicherweise unpraktisch, Terminal zu schließen, aber nicht Ich möchte, dass sie sudoRechte haben.
1
Anhängen `; exit` (sieben Tastatureingaben) scheint mir ziemlich einfach zu sein. Von welcher Art von Wartung gehen Sie weg, weil mir nicht viel einfällt, was ich beim Suspendieren in der Mitte von wagen würde?
Marc

Antworten:

19

Von man sudo:

     -K, --remove-timestamp
                 Similar to the -k option, except that it removes the user's
                 cached credentials entirely and may not be used in conjunc‐
                 tion with a command or other option.  This option does not
                 require a password.  Not all security policies support cre‐
                 dential caching.

Sie möchten also, dass Ihr Benutzer sudo -Kjedes Mal ausgeführt wird, wenn das System angehalten wird.

Ubuntu 15.04+ (systemd)

Dies kann unter Ubuntu 15.04+ durch Einfügen eines Skripts erfolgen /lib/systemd/system-sleep/.

  1. Ausführen sudo nano /lib/systemd/system-sleep/disable_sudo_user( userzur Vereinfachung durch den Benutzernamen Ihres Benutzers ersetzen );
  2. Fügen Sie das folgende Skript ein (ersetzen Sie es userdurch den Benutzernamen Ihres Benutzers):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERund CTRL+ X;

  2. Run sudo chmod o+x /lib/systemd/system-sleep/disable_sudo_user;


Verwenden Sie stattdessen dieses Skript, um dies auch für den Ruhezustand / Hybrid-Schlafmodus zu aktivieren:

#!/bin/sh
case $1 in
    pre)
        su user -c 'sudo -K'
        ;;
esac

Frühere Ubuntu-Versionen (Upstart)

Dies kann in früheren Ubuntu-Versionen durch Einfügen eines Skripts erfolgen /etc/pm/sleep.d/.

  1. Ausführen sudo nano /etc/pm/sleep.d/disable_sudo_user( userzur Vereinfachung durch den Benutzernamen Ihres Benutzers ersetzen );
  2. Fügen Sie das folgende Skript ein (ersetzen Sie es userdurch den Benutzernamen Ihres Benutzers):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERund CTRL+ X;

  2. Run sudo chmod o+x /etc/pm/sleep.d/disable_sudo_user;


Um dies auch für den Ruhezustand zu aktivieren, verwenden Sie stattdessen dieses Skript:

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac
kos
quelle
2
Es wäre lustiger gewesen, wenn Sie verwendet hätten sudo -u user sudo -k. : D
muru
@muru Dachte das gleiche, aber aus irgendeinem Grund sah es ein bisschen albern aus: D
kos
Entschuldigung, habe eine Weile keinen Shell-Code geschrieben. Was genau macht das pre/*)? :)
@ParanoidPanda Es ist weg, siehe das Update. Siehe hier (Beschreibung, zweiter Absatz): systemd-suspend.serviceRuft die Skripte auf, /lib/systemd/system-sleep/indem zwei Argumente übergeben werden. $1es ist entweder prefür Pre-Schlaf Ereignisse oder postfür die Post-Schlaf Ereignisse und $2es ist entweder suspend, hybernateoder hybrid-sleep; pre/*sollte alle Kombinationen von pre/und von fangen suspend, hybernateoder hybrid-sleep, aber da Sie explizit nach Suspendierung fragten, änderte ich es zu pre/suspend.
Kos
1
Bemerkenswert ist, dass Sie dies auch in älteren Ubuntu-Versionen tun können. Es ist nur der Mechanismus, der sich unterscheidet, dh die Verwendung von /etc/pm/sleep.dSkripten.
Hobbs
3

Nur wenn du so paranoid bist! Sie können die -KOption von verwenden sudo.

-K, --reset-timestamp
       When used without a command, invalidates the user's cached credentials.  
       In other words, the next time sudo is run a password will be required.  
       This option does not require a password and was added to allow a user to revoke
       sudo permissions from a .logout file.

       When used in conjunction with a command or an option that may require a 
       password, this option will cause sudo to ignore the user's cached credentials.  
       As a result, sudo will prompt for a password (if one is required by the 
       security policy) and will not update the user's cached credentials.

       Not all security policies support credential caching.

beispielsweise,

sudo -K <command>

Oder Sie könnten Ihren Computer einfach in einer Metallbox lassen, die von Robotern bewacht wird :)

Edward Torvalds
quelle
Hmm ... Nicht ganz so, wie ich es will, gibt es keine Möglichkeit, dies zu automatisieren? Da dies darauf hindeutet, dass ich definitiv weiß, dass ich im Begriff bin, anzuhalten. Was ist, wenn ein Befehl ausgeführt wird sudound ich irgendwohin gehen muss, damit ich die Maschine anhalten kann? für den Befehl oder die Zeit bis zum Abschluss, bevor ich mich das nächste Mal erneut nach einem Passwort erkundigen kann? Es wäre aus vielen Gründen sehr viel nützlicher (einschließlich der Tatsache, dass wenn ich es mit einer GUI auf einem anderen Runlevel starte, es nach dem Suspend nicht nach einem Passwort fragt), damit es automatisiert wird.
Auch ich denke du meinst -Kund nicht -k.
Nun, es könnte sowieso nützlicher sein.
1

Noch eine andere Methode

Typ "sudo visudo"

Gehen Sie zu der Zeile, in der steht: 'Defaults env_reset'

und wechseln zu:

'Standard env_reset, timestamp_timeout = 0

Speichern Sie dann die Datei.

Wenn Sie das Zeitlimit auf 0 setzen, werden Sie jedes Mal zur Eingabe des Kennworts aufgefordert.

Edgar Naser
quelle
Während dies tut (technisch gesehen) erreichen , was die OP ist zu fragen, es ist viel des Guten für die meisten Situationen. Das heißt, wenn Sie wirklich paranoid sind (oder jedes Mal, wenn Sie etwas potenziell Gefährliches tun, einen zusätzlichen Schritt zum Innehalten und Nachdenken wünschen), könnte dies eine praktikable Alternative sein.
ein CVn