Come posso forzare sudo a chiedere sempre una password dopo il risveglio dalla sospensione?


15

Di 'che eseguo un comando con sudo, quindi se lo uso sudoentro i prossimi 15/5 minuti (non sono sicuro di quanto mi ricordi) non mi chiederà una password. Mi chiederà di nuovo solo se non lo uso da almeno così tanto tempo.

Tuttavia, se sospendo il mio computer, lo riattivo e accedo prima del termine di quel periodo di tempo, posso semplicemente eseguire sudonuovamente un comando e non mi chiederà la mia password perché non l'ho lasciato per un determinato importo di tempo.

Quindi, come posso fare in modo che, non importa da quanto tempo non lo uso sudo, mi chiederà sicuramente una password dopo la sospensione una volta che ho effettuato di nuovo l'accesso, anche se sono ancora in quel periodo in cui il 15/5 minuti di non utilizzo sudonon sono ancora passati?

La cosa più probabile che funzionerà è far sì che esegua un comando per rimuovere tutte le cache di identità per sudol'esecuzione di un determinato comando che viene eseguito al risveglio.

Sto eseguendo Ubuntu GNOME 15.10 con GNOME 3.18.


1
bella domanda, ma perché sei paranoico? perché se la persona diversa da te conosce la tua password di accesso non può essere fermata dall'usosudo
Edward Torvalds

Se esci da quella finestra del terminale, dovrai digitare nuovamente la password quando apri una nuova finestra del terminale, indipendentemente dalla velocità con cui la fai. Se stai eseguendo qualcosa in una finestra di terminale, aggiungi `; exit` e la finestra si chiuderà al termine del comando.
Marc

@Marc: lo so, ma non è sempre conveniente uscire, né farti sudochiedere manualmente la prossima volta. Una soluzione automatica sarebbe preferita.

@edwardtorvalds: Beh, potrei accedere di nuovo, e poi andare via (non che lo faccio molto spesso), e quindi quando qualcuno arriva sarebbe male se potessero semplicemente usare sudo. So che suona un po 'strano per il mio computer, ma avrei potuto fare un po' di manutenzione su un altro computer Ubuntu, e quindi quando riconnetto l'utente, potrebbe essere scomodo chiudere Terminal, ma non lo faccio vogliono che abbiano sudodiritti.

1
Aggiunta "; exit` (sette tasti) mi sembra abbastanza facile. Che tipo di manutenzione ti allontani, perché non riesco a pensare a molto, avrei avuto una possibilità di sospendere nel mezzo.
Marc

Risposte:


19

Da 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.

Quindi, ciò che vuoi è che il tuo utente venga eseguito sudo -Kogni volta che il sistema viene sospeso.

Ubuntu 15.04+ (systemd)

Questo può essere fatto su Ubuntu 15.04+ inserendo uno script in /lib/systemd/system-sleep/.

  1. Esegui sudo nano /lib/systemd/system-sleep/disable_sudo_user(sostituisci usercon il nome utente del tuo utente per comodità);
  2. Incolla nel seguente script (sostituisci usercon il nome utente del tuo utente):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERe CTRL+ X;

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


Per abilitare questo anche per l'ibernazione / hybrid-sleep, utilizzare invece questo script:

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

Versioni precedenti di Ubuntu (Upstart)

Questo può essere fatto su precedenti versioni di Ubuntu inserendo uno script /etc/pm/sleep.d/.

  1. Esegui sudo nano /etc/pm/sleep.d/disable_sudo_user(sostituisci usercon il nome utente del tuo utente per comodità);
  2. Incolla nel seguente script (sostituisci usercon il nome utente del tuo utente):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERe CTRL+ X;

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


Per abilitare questo anche per l'ibernazione, utilizzare invece questo script:

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

2
Sarebbe stato più divertente se lo avessi usato sudo -u user sudo -k. : D
muru,

@muru Pensò lo stesso ma per qualche motivo sembrava un po 'sciocco: D
kos

Siamo spiacenti, non ho scritto alcun codice shell per un po ', cosa fa esattamente questo pre/*)? :)

@ParanoidPanda Se n'è andato, vedi l'aggiornamento. Vedi qui (Descrizione, secondo paragrafo): systemd-suspend.servicechiama gli script /lib/systemd/system-sleep/passando due argomenti; $1è preper eventi pre-sonno o postper eventi post-sonno ed $2è suspend, hybernateoppure hybrid-sleep; pre/*era destinato a catturare tutte le combinazioni di pre/e qualsiasi di suspend, hybernateo hybrid-sleep, ma poiché hai chiesto esplicitamente la sospensione, l'ho cambiata in pre/suspend.
kos

1
Vale la pena notare che è possibile farlo anche con Ubuntu più vecchio, è solo il meccanismo che è diverso, cioè usando gli /etc/pm/sleep.dscript.
Hobbs

3

Solo se sei così paranoico! Puoi usare l' -Kopzione di 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.

per esempio,

sudo -K <command>

Oppure potresti semplicemente lasciare il tuo computer in una scatola di metallo protetta da robot :)


Hmm ... Non esattamente come voglio però, non c'è modo di automatizzare questo? Perché questo suggerisce che sicuramente so che sto per sospendere, cosa succede se un comando è in esecuzione sudoe devo andare da qualche parte, quindi sospendo la macchina, quindi quando torno e non sospendo la macchina, dovrò aspettare per il comando o il tempo di finire prima che io possa farlo chiedermi nuovamente una password la prossima volta? Sarebbe molto più utile per molte ragioni (incluso il fatto che quando lo eseguo con una GUI su un runlevel diverso non richiede una password dopo la sospensione) per l'automazione.

Inoltre, penso che tu intenda -Ke non -k.

Bene, potrebbe essere più utile comunque.

1

Ancora un altro metodo

Digita "sudo visudo"

Vai alla riga che dice: "Predefiniti env_reset"

e cambia in:

'Predefiniti env_reset, timestamp_timeout = 0

Quindi salva il file.

Impostando il timeout su 0, il sistema richiederà sempre la password.


Anche se questo fa (tecnicamente parlando) compiere ciò che il PO sta chiedendo, è eccessivo per la maggior parte delle situazioni. Detto questo, se sei davvero paranoico (o vuoi semplicemente un passo in più per la pausa e la contemplazione ogni volta che fai qualcosa di potenzialmente pericoloso), questa potrebbe essere una valida alternativa.
un CVn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.