Saya baru-baru ini menonaktifkan sudo
kemampuan cache otentikasi sehingga sekarang meminta saya untuk kata sandi setiap waktu.
Dan meskipun ini bagus untuk keamanan, itu telah menyebabkan satu masalah kecil yang belum dapat saya temukan solusinya, saya tidak dapat menjalankan perintah yang sejalan dengan:
sudo <command> &
Di masa lalu saya akan menjalankan sudo
perintah sebelum itu, itu akan men-cache kata sandi saya dan memungkinkan saya untuk menjalankan sudo
perintah tanpa cepat selama beberapa menit berikutnya, dan dengan demikian itu akan memungkinkan saya untuk menjalankan perintah.
Tetapi ketika saya menjalankannya sekarang karena tidak ada caching di tangan sebelumnya dan karena memulai thread baru segera dan sudo
bahkan tidak meminta saya untuk kata sandi, saya tidak dapat menjalankannya dengan cara ini.
Jadi kecuali saya menjalankan sudo -i
sebelumnya saya tidak dapat menjalankan perintah dalam format ini yang menjadi agak mengganggu.
Jadi saya bertanya-tanya apakah ada cara untuk mengatasi ini dan masih menjalankan program dan perintah dengan cara ini?
Saya menjalankan Ubuntu GNOME 15.10 dengan GNOME 3.18, dan secara khusus program yang ingin saya jalankan dengan cara ini adalah etherape
jika itu membuat perbedaan, tetapi saya ingin solusi untuk bekerja untuk semua program dan perintah.
&
tidak benar-benar dapat ditelusuri, saya mengubahnya menjadi… sudo command in the background
.Jawaban:
Alih-alih berjalan
sudo
di latar belakang, mintasudo
untuk menjalankan perintah di latar belakang. Dariman sudo
:Sebagai contoh:
Cara lain adalah dengan menggunakan shell untuk menjalankan perintah:
Opsi lain akan menentukan program grafis untuk mendapatkan kata sandi, dan tetap mengirim
sudo
ke latar belakang:Program Askpass biasanya digunakan untuk SSH. Salah satunya disediakan oleh
ssh-askpass-gnome
paket, yang diinstal secara default, setidaknya di Ubuntu 15.10.sumber
Jika Anda bersedia untuk mengatur
timestamp_timeout
setidaknya sesuatu seperti0.02
(1,2 detik, saya akan mengatakan seaman0
) di/etc/sudoers
(diperlukan dalam kasus Anda, tetapi dengan pengaturan default atau dengantimestamp_timeout
diatur ke apa pun kecuali0
satu dapat melakukan hal berikut) , Anda dapat mengatur alias seperti ini~/.bashrc
, yang tidak mengharuskan Anda untuk mengingat sesuatu sebelum menjalankan perintah dan yang memungkinkan Anda untuk tetap mengontrol proses .:Kuncinya di sini adalah titik koma, yang akan membuat Bash mengurai
sudo -v
pertama dan secara terpisah, mengautentikasi pengguna, dan membatasi bagian latar belakang potensial untuk[ $? ] && sudo
perintah, yang akan memeriksa apakahsudo -v
berhasil dan berjalansudo
lagi (berpotensi melatar belakanginya) jika itu terjadi.sumber
sudo -v
memperpanjang caching kredensial bahkan jika caching dinonaktifkan? Dan, IIRC <untuk alias berkembang, ruang harus di akhir perintah, bukan di awal.timestamp_timeout
mengatur untuk0
. Dan ya, saya benar-benar kacau dengan hal ekspansi alias, sebenarnya alias tidak boleh berkembang. Terima kasih.alias sudo='sudo -v && sudo'
sama baiknya?;
Bash membuat parsesudo -v
pertama dan terpisah; menggunakan&&
Bash akan menguraikan keduanya sebagai satu perintah dan latar belakang keduanya dengan segera.Kamu tidak bisa The
&
mengirimkan perintah ke latar belakang segera. Artinya, subkulit dibuat di latar belakang dan perintah dijalankan di sana. Ketika perintah itu mengeluarkan prompt, seperti halnyasudo
, prompt ditampilkan di latar belakang dan Anda tidak pernah melihatnya.Satu-satunya cara untuk melakukannya adalah mengembalikan perintah ke latar depan, memberikan kata sandi dan mengirimkannya kembali ke latar belakang. Sebagai contoh:
Sekarang, masukkan kata sandi Anda, tekan Enterdan kemudian tekan CtrlZuntuk mengirimnya kembali ke latar belakang dan
bg
mengatakannya untuk terus berjalan.Pendekatan yang lebih sederhana adalah dengan tidak pernah menggunakan
&
dan, sebagai gantinya, mengirim pekerjaan ke latar belakang secara manual dengan CtrlZdanbg
setelah meluncurkannya.Terakhir, Anda mungkin ingin mempertimbangkan untuk menyetel batas waktu kata sandi sudo menjadi sekitar 1 atau 2 detik. Itu masih akan memberi Anda keamanan yang cukup (kecuali jika Anda mencoba menjaga terhadap Flash) dan memungkinkan Anda untuk menjalankan perintah seperti itu seperti yang diharapkan.
sumber
man sudoers
nilai mengatakantimestamp_timeout
harus menentukan menit dengan bagian fraksional yang mungkin (yang omong-omong membuatsudo
kesalahan jika saya mencoba untuk menentukan satu, tidak yakin mengapa).2.5
berfungsi dengan baik di sini (Arch,sudo
versi 1.8.15).