Bagaimana saya bisa memaksa sudo untuk selalu meminta kata sandi setelah bangun dari penundaan?

15

Katakanlah saya menjalankan perintah sudo, maka jika saya menggunakan sudodalam 15/5 menit berikutnya (tidak yakin berapa lama mengingat saya untuk) itu tidak akan meminta saya untuk kata sandi. Itu hanya akan meminta saya lagi jika saya belum menggunakannya setidaknya selama itu.

Namun, jika saya menangguhkan mesin saya, membangunkannya, dan login sebelum periode waktu itu berakhir, saya bisa menjalankan sudoperintah lagi dan itu tidak akan meminta saya untuk kata sandi saya karena saya belum membiarkannya untuk jumlah tertentu waktu.

Jadi bagaimana saya membuatnya sehingga tidak peduli berapa lama saya belum menggunakannya sudo, itu pasti akan meminta saya untuk kata sandi setelah ditangguhkan setelah saya masuk lagi, bahkan jika saya masih dalam kerangka waktu di mana 15/5 menit tidak menggunakan sudobelum berlalu?

Hal yang paling mungkin yang akan berhasil adalah membuatnya menjalankan perintah untuk menghapus semua cache identitas untuk sudoeksekusi perintah tertentu yang dijalankan saat bangun.

Saya menjalankan Ubuntu GNOME 15.10 dengan GNOME 3.18.


sumber
1
pertanyaan yang bagus, tetapi mengapa Anda paranoid? karena jika orang lain selain Anda tahu kata sandi login Anda tidak dapat dihentikan dari penggunaansudo
Edward Torvalds
Jika Anda baru saja keluar dari jendela terminal, Anda harus mengetik ulang kata sandi Anda ketika Anda membuka jendela terminal baru tidak peduli seberapa cepat Anda melakukannya. Jika Anda menjalankan sesuatu di jendela terminal, tambahkan `; keluar` dan jendela akan ditutup ketika perintah selesai.
Marc
@ Markc: Saya tahu, tetapi tidak selalu nyaman untuk keluar, atau membuat secara manual sudobertanya kepada Anda lain kali. Solusi otomatis akan lebih disukai.
@edwardtorvalds: Ya, saya bisa masuk lagi, lalu pergi (bukan karena saya sering melakukannya), dan kemudian ketika seseorang datang, akan buruk jika mereka hanya bisa menggunakan sudo. Saya tahu itu kedengarannya agak aneh untuk komputer saya sendiri, tetapi saya bisa saja melakukan beberapa pekerjaan pemeliharaan pada komputer Ubuntu lain, dan kemudian ketika saya masuk kembali ke pengguna, mungkin tidak nyaman untuk menutup Terminal, tetapi saya tidak melakukannya. ingin mereka memiliki sudohak.
1
Menambahkan `; exit` (tujuh penekanan tombol) tampaknya cukup mudah bagi saya. Perawatan macam apa yang Anda hindari, karena saya tidak bisa berpikir banyak, saya akan mengambil kesempatan untuk menunda di tengah.
Marc

Jawaban:

19

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

Jadi yang Anda inginkan adalah pengguna Anda menjalankan sudo -Ksetiap kali sistem ditangguhkan.

Ubuntu 15.04+ (systemd)

Ini dapat dilakukan di Ubuntu 15.04+ dengan menempatkan skrip di /lib/systemd/system-sleep/.

  1. Jalankan sudo nano /lib/systemd/system-sleep/disable_sudo_user(ganti userdengan nama pengguna pengguna Anda untuk kenyamanan);
  2. Rekatkan dalam skrip berikut (ganti userdengan nama pengguna pengguna Anda):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Tekan CTRL+ O, ENTERdan CTRL+ X;

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


Untuk mengaktifkan ini juga untuk hibernasi / hybrid-sleep, gunakan skrip ini sebagai gantinya:

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

Versi Ubuntu sebelumnya (pemula)

Ini dapat dilakukan pada versi Ubuntu sebelumnya dengan menempatkan skrip di /etc/pm/sleep.d/.

  1. Jalankan sudo nano /etc/pm/sleep.d/disable_sudo_user(ganti userdengan nama pengguna pengguna Anda untuk kenyamanan);
  2. Rekatkan dalam skrip berikut (ganti userdengan nama pengguna pengguna Anda):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Tekan CTRL+ O, ENTERdan CTRL+ X;

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


Untuk mengaktifkan ini juga untuk hibernasi, gunakan skrip ini sebagai gantinya:

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac
kos
sumber
2
Akan lebih lucu jika Anda menggunakan sudo -u user sudo -k. : D
muru
@uru Pemikiran yang sama tetapi untuk beberapa alasan itu tampak agak konyol: D
kos
Maaf, belum menulis kode shell untuk sementara waktu, apa sebenarnya yang pre/*)dilakukan? :)
@ParanoidPanda Sudah tidak ada, lihat pembaruan. Lihat di sini (Deskripsi, paragraf kedua): systemd-suspend.servicememanggil skrip dengan /lib/systemd/system-sleep/memberikan dua argumen; $1baik preuntuk acara sebelum tidur atau postuntuk acara setelah tidur, dan $2itu baik suspend, hybernateatau hybrid-sleep; pre/*dimaksudkan untuk menangkap semua kombinasi pre/dan salah satu dari suspend, hybernateatau hybrid-sleep, tetapi karena Anda secara eksplisit meminta penskorsan saya mengubahnya menjadi pre/suspend.
kos
1
Perlu dicatat bahwa Anda dapat melakukan ini di ubuntu lama juga, itu hanya mekanisme yang berbeda, yaitu menggunakan /etc/pm/sleep.dskrip.
hobbs
3

Hanya jika Anda paranoid itu! Anda dapat menggunakan -Kopsi 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.

sebagai contoh,

sudo -K <command>

Atau Anda bisa meninggalkan komputer Anda di dalam kotak logam yang dijaga oleh robot :)

Edward Torvalds
sumber
Hmm ... Tidak persis seperti yang saya inginkan, apakah tidak ada cara untuk mengotomatisasi ini? Karena ini menunjukkan bahwa saya pasti tahu bahwa saya akan menangguhkan, bagaimana jika sebuah perintah berjalan sudodan saya harus pergi ke suatu tempat, jadi saya menangguhkan mesin, maka ketika saya kembali dan tidak menunda mesin, saya harus menunggu untuk perintah atau waktu untuk menyelesaikannya sebelum saya dapat membuatnya meminta saya kata sandi lain kali? Ini akan jauh lebih berguna karena berbagai alasan (termasuk fakta bahwa ketika saya menjalankannya dengan GUI pada runlevel yang berbeda, ia tidak meminta kata sandi setelah ditangguhkan) agar dapat otomatis.
Juga, saya pikir maksud Anda -Kdan tidak -k.
Yah, mungkin lebih berguna.
1

Namun metode lain

Ketik 'sudo visudo'

Pergi ke baris yang mengatakan: 'Defaults env_reset'

dan ubah ke:

'Defaults env_reset, timestamp_timeout = 0

Kemudian simpan file tersebut.

Dengan mengatur batas waktu ke 0, sistem akan meminta kata sandi Anda setiap waktu.

Edgar Naser
sumber
Sementara ini tidak (secara teknis) mencapai apa yang OP adalah meminta, berlebihan itu untuk kebanyakan situasi. Yang mengatakan, jika Anda benar-benar paranoid (atau hanya ingin langkah ekstra untuk jeda dan kontemplasi setiap kali Anda melakukan sesuatu yang berpotensi berbahaya), ini mungkin menjadi alternatif yang layak.
CVn