Jak mogę zmusić sudo, aby zawsze budziło hasło po przebudzeniu?


15

Powiedzmy, że wykonuję polecenie sudo, a jeśli użyjęsudo w ciągu następnych 15/5 minut (nie jestem pewien, jak długo to pamięta), nie poprosi mnie o hasło. Ponownie wyświetli monit, jeśli nie użyję go przynajmniej tak długo.

Jeśli jednak zawieszę komputer, obudzę go i zaloguj się przed upływem tego czasu, mogę po prostu sudoponownie wykonać polecenie i nie poprosi mnie o hasło, ponieważ nie pozwoliłem na podanie określonej kwoty czasu.

Jak mogę to zrobić, aby bez względu na to, jak długo nie korzystałem sudo, po zalogowaniu ponownie na pewno poprosi mnie o hasło, nawet jeśli nadal jestem w tym przedziale czasowym, w którym 15/5 minut nieużywania sudojeszcze nie minęło?

Najbardziej prawdopodobne, że zadziała to, aby wykonał polecenie usunięcia wszystkich pamięci podręcznych tożsamości sudopo wykonaniu określonego polecenia, które jest wykonywane po wybudzeniu.

Używam Ubuntu GNOME 15.10 z GNOME 3.18.


1
dobre pytanie, ale dlaczego jesteś paranoikiem? ponieważ jeśli osoba inna niż ty zna twoje hasło logowania nie może przestać go używaćsudo
Edward Torvalds

Jeśli po prostu wyjdziesz z tego okna terminala, będziesz musiał ponownie wpisać hasło podczas otwierania nowego okna terminala, bez względu na to, jak szybko to zrobisz. Jeśli uruchamiasz coś w oknie terminala, dołącz `; exit`, a okno zostanie zamknięte po zakończeniu wykonywania polecenia.
Marc

@Marc: Wiem, ale nie zawsze wygodnie jest wyjść lub ręcznie sudopoprosić cię następnym razem. Preferowane byłoby rozwiązanie automatyczne.

@edwardtorvalds: Cóż, mógłbym zalogować się ponownie, a potem odejść (nie to, że robię to bardzo często), a kiedy ktoś przyjdzie, byłoby źle, gdyby mógł po prostu skorzystać sudo. Wiem, że to brzmi trochę dziwnie dla mojego komputera, ale mogłem wykonywać pewne prace konserwacyjne na innym komputerze Ubuntu, a następnie, gdy ponownie loguję użytkownika, zamknięcie terminalu może być niewygodne, ale nie chcę, żeby mieli sudoprawa.

1
Dołączanie `; exit` (siedem naciśnięć klawiszy) wydaje mi się dość łatwe. Z jakich rodzajów obsługi rezygnujesz, ponieważ nie mogę myśleć o wiele, zaryzykowałbym zawieszenie w środku.
Marc

Odpowiedzi:


19

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

Więc chcesz, aby użytkownik uruchamiał się za sudo -Kkażdym razem, gdy system zawiesza się.

Ubuntu 15.04+ (systemd)

Można to zrobić na Ubuntu 15.04+, umieszczając skrypt w /lib/systemd/system-sleep/.

  1. Uruchom sudo nano /lib/systemd/system-sleep/disable_sudo_user( userdla wygody zastąp nazwę użytkownika);
  2. Wklej następujący skrypt (zamień userna nazwę użytkownika):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Trafienia CTRL+ O, ENTERi CTRL+ X;

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


Aby włączyć to również dla hibernacji / trybu uśpienia hybrydowego, użyj tego skryptu:

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

Poprzednie wersje Ubuntu (Upstart)

Można to zrobić w poprzednich wersjach Ubuntu, umieszczając skrypt w /etc/pm/sleep.d/.

  1. Uruchom sudo nano /etc/pm/sleep.d/disable_sudo_user( userdla wygody zastąp nazwę użytkownika);
  2. Wklej następujący skrypt (zamień userna nazwę użytkownika):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Trafienia CTRL+ O, ENTERi CTRL+ X;

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


Aby włączyć to również w hibernacji, użyj tego skryptu:

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

2
Byłoby zabawniej, gdybyś użył sudo -u user sudo -k. : D
muru

@muru Myślałem tak samo, ale z jakiegoś powodu wyglądało to trochę głupio: D
kos

Niestety, od jakiegoś czasu nie napisałem żadnego kodu powłoki, co to dokładnie robi pre/*)? :)

@ParanoidPanda Nie ma, zobacz aktualizację. Zobacz tutaj (Opis, drugi akapit): systemd-suspend.servicewywołuje skrypty /lib/systemd/system-sleep/przekazując dwa argumenty; $1jest to albo preprzed snem, albo postpo $2nim i to albo suspend, hybernatealbo hybrid-sleep; pre/*miał łapać wszystkie kombinacje pre/i dowolne suspend, hybernatelub hybrid-sleep, ale ponieważ wyraźnie poprosiłeś o zawieszenie, zmieniłem to na pre/suspend.
Kos

1
Warto zauważyć, że możesz to zrobić również w starszym Ubuntu, to tylko inny mechanizm, tj. Użycie /etc/pm/sleep.dskryptów.
hobbs

3

Tylko jeśli jesteś takim paranoikiem! Możesz użyć -Kopcji 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.

na przykład,

sudo -K <command>

Lub możesz po prostu zostawić komputer w metalowym pudełku pilnowanym przez roboty :)


Hmm ... Nie do końca tak, jak chcę, czy nie ma sposobu, aby to zautomatyzować? Ponieważ to sugeruje, że zdecydowanie wiem, że mam zamiar zawiesić, co jeśli polecenie jest uruchomione sudoi muszę gdzieś iść, więc zawieszam maszynę, a kiedy wrócę i cofnę maszynę, będę musiał poczekać na polecenie lub czas na zakończenie, zanim będę mógł poprosić mnie o hasło następnym razem? Byłoby o wiele bardziej przydatne z wielu powodów (w tym z faktu, że kiedy uruchamiam go z GUI na innym poziomie pracy, nie pyta o hasło po zawieszeniu), aby było zautomatyzowane.

Myślę też, że masz na myśli -Ki nie -k.

Cóż, i tak może być bardziej przydatne.

1

Jeszcze inna metoda

Wpisz „sudo visudo”

Przejdź do wiersza: „Defaults env_reset”

i zmień na:

'Domyślnie env_reset, timestamp_timeout = 0

Następnie zapisz plik.

Ustawiając limit czasu na 0, system będzie monitował o hasło za każdym razem.


Chociaż to robi (technicznie rzecz biorąc) wykonać co OP prosi, to overkill dla większości sytuacji. To powiedziawszy, jeśli naprawdę jesteś paranoikiem (lub po prostu chcesz zrobić dodatkowy krok do pauzy i kontemplacji za każdym razem, gdy robisz coś potencjalnie niebezpiecznego), może to być realna alternatywa.
CVn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.