(Awalnya diposting di Stack Overflow. Mereka menyarankan saya mencoba di sini sebagai gantinya. Berikut posting asli: /programming/3858208/sudo-is-ther-a-command-to-check-if-i-have -sudo-dan-atau-berapa banyak waktu yang tersisa )
Lihat judul. Saya ingin perintah yang memungkinkan saya permintaan sudo. Idealnya itu akan mengembalikan kesuksesan jika saya masih memiliki sudo dan false jika sudo telah kedaluwarsa. Menghabiskan waktu juga mungkin berguna (walaupun jika saya khawatir saya bisa melakukan sudo -v untuk memvalidasi ulang.) Oh dan seharusnya tidak perlu meminta kata sandi.
Hal terdekat yang saya temukan adalah "sudo -n true", tetapi opsi -n hanya hadir pada mesin Centos 5 saya di tempat kerja. -n gagal jika harus meminta kata sandi. Apakah ada cara lain untuk mendapatkan fungsi ini? Asumsikan saya sebenarnya tidak memiliki root pada semua mesin yang bekerja dengan saya, jadi saya tidak dapat menginstal versi baru sudo sesuai dengan keinginan saya.
Untuk apa itu layak saya lakukan ini sehingga saya bisa mendapatkan prompt saya untuk menunjukkan status sudo. Saya suka mengetahui terminal mana yang bisa digunakan secara aktif. Saya juga memiliki prompt yang mengubah warna ketika saya root, tapi saya tidak terlalu sering menggunakan root sehingga itu penggunaan terbatas.
Saya tahu ini adalah pertanyaan yang sangat lama tapi di sini saya lakukan dalam skrip hari ini:
sumber
Perintah di bawah ini akan menunjukkan indikasi berwarna bahwa Anda telah memberikan sudo, jadi Anda ingat untuk melakukan
sudo -k
sebelum pergi dari mesin. Ini berguna juga pada terminal yang tidak berwarna.Karena kita dapat membuat sudo aktif dan tidak aktif pada sesi terminal yang berbeda, saya membuat ini yang dapat Anda letakkan di akhir ~ / .bashrc Anda
Pada tipe terminal
bash
untuk mengujinya. Ini juga akan menambahkan seluruh baris setiap kali Anda menjalankan perintah, yang memiliki informasi waktu perintah terakhir berakhir, sehingga Anda dapat pergi makan siang dan tahu kapan perintah terakhir berakhir :).Anda dapat bermain dengan kode ini sesuai dengan kebutuhan Anda. Ada variabel PS1 juga (itu adalah baris tunggal prompt kecil yang sebenarnya), tapi saya pikir lebih baik untuk tidak mengacaukannya.
PS .: untuk OS-X, cari komentar di bawah ini oleh @nwinkler.
sumber
sudo -n
sepertinya tidak berfungsi di OS X. Lihat pertanyaan saya di sini: superuser.com/questions/902826/…sudo -n
, apakah Anda percaya ada tes lain yang dapat digunakan untuk menentukan apakah pengguna memiliki akses sudo aktif? atau mungkin OS-X memerlukan pembaruan? Saya tidak pernah menggunakan OS-X btw.sudo -n
pada BSD (yang berbasis OS X) memiliki perilaku yang berbeda dari versi GNU. Saya baru saja menambahkan komentar saya untuk membuat orang tahu bahwa versi cek ini tampaknya tidak berfungsi pada OS X. Saya telah menggunakan cek dari jawaban lain (sudo -n uptime 2>&1|grep "load"|wc -l
), dan ini tampaknya berfungsi dengan baik pada OS X. Ini tidak elegan, tapi berhasil.sudo -n
menjadi buggy di sudo -V 1.7.9Untuk menyederhanakan jawaban yang diberikan oleh @ wags007
Namun, jika dalam konfigurasi https://www.sudo.ws/man/1.8.15/sudoers.man.html yang Anda miliki,
defaults mail_badpass
akan ada email yang dikirim untuk setiap tes yang menghasilkan false (akan diminta). Untuk menghindari gangguan seperti itu, ubah bagian file sudoers Anda keAkibatnya surat peringatan keamanan dikirim untuk semua perintah kecuali / bin / true. Ya, seseorang sekarang dapat mencoba dengan paksa memaksakan kata sandi dengan menelepon
sudo true
jumlah yang tidak terbatas tanpa surat peringatan keamanan dikirim.Catatan: Selalu gunakan
visudo
alih-alih editor favorit Anda untuk mengedit file sudoers. Gagal melakukannya Anda berisiko dikunci.sumber
Menurut panduan sudo, sesi sudo ditentukan sesuai dengan file cap waktu (
/usr/lib/sudo/<username>
), jadi Anda mungkin dapat mengetahui berapa banyak waktu yang tersisa dengan memeriksa tanggal / waktu file cap waktu. Namun, dalam sistem saya, file cap waktu sebenarnya adalah sebuah direktori, dan ada tiga file dengan konten samar di dalamnya (dan juga beberapa perangko waktu yang aneh, tetapi/usr/lib/sudo/<username>
tampaknya memiliki cap waktu yang bertepatan dengan waktu saya memberikan sudo kata sandi saya Saya pikir/usr/lib/sudo/<username>/0
memiliki stempel waktusudo
eksekusi terakhir .sumber
Peringatan
Menurut Bugzilla sudo Bug ID = 590 panggilan untuk
sudo -n true 2&>/dev/null ; echo $?
menjadi buggy sekitarsudo -V 1.7.10
Baca Bugzilla [di sini] ( http://bugzilla.sudo.ws/show_bug.cgi?id=590 "Bug ID = 590")
sumber
Setidaknya pada sudo 1.8.21p2, pendekatan ini berfungsi dengan baik:
sumber
Ini mungkin berlebihan berlebihan menurut standar kebanyakan orang, tetapi inilah fungsi (mungkin benar) yang saya gunakan untuk memeriksa apakah
sudo
tidak terkunci (fungsi tidak akan membuang-buang waktu jika pengguna menjalankannyaroot
, karena tidak perlu membuka kuncisudo
):sumber
jawaban sederhana ...
sumber
Bagaimana dengan halaman manual
Daftar perintah Anda yang tersedia:
sudo sendiri tidak memiliki batas waktu atau tanggal ... lihat:
sumber