bagaimana diperingatkan jika terminal memiliki hak sudo dan juga menunjukkan berapa banyak waktu yang tersisa?

10

Bagaimana cara melihat di terminal bahwa Anda memiliki hak sudo? (jadi mengetahui saya memiliki hak istimewa ini, saya bisa mengetik sudo -k) Akan lebih baik untuk tidak menambahkan terlalu banyak informasi ke terminal juga, hanya semacam peringatan sederhana dan kecil!

WAKTU YANG TERSISA ADALAH MUNGKIN, kan?

Juga, bagaimana cara melihat berapa banyak waktu yang saya miliki dengan hak istimewa di terminal spesifik itu? (jadi saya bisa membiarkannya berakhir daripada mengetik sudo -k). Saya pikir sisa waktu bisa muncul setiap kali saya menekan tombol Enter.

EDIT: Saya meneliti lebih lanjut dan menemukan bahwa /var/lib/sudo/$USER/$nPts(di mana $ nPts adalah terminal pts saat ini pada ps -p $$), timestamp-nya diperbarui setiap kali perintah sudo dikeluarkan, dan itu hanya dapat diakses jika Anda menggunakan perintah sudo, sehingga sisa waktu akan selalu menjadi yang dikonfigurasi ...

PS: Atau untuk itu, saya mencoba alias sudo='sudo -k'tetapi saya tidak suka harus mengetikkan kata sandi untuk setiap perintah ... Dan juga, ini alias sudos='sudo -k'(atau alias ssudo='sudo -k', bagus jika Anda mengetikkan baris yang panjang, cukup tekan Rumah dan ketik 's') berfungsi jika Anda hanya ingin mengeluarkan satu perintah dengan mengetik sudos. Tapi aku masih rindu untuk tahu kapan aku memiliki hak istimewa sudo normal untuk mengetahui bahwa aku harus bertindak ...

Aquarius Power
sumber
2
Mengapa ini dipilih? Meskipun ini bukan posting yang paling jelas, pertanyaan judul sepertinya masih menjadi pertanyaan yang valid bagi saya (dan pertanyaan yang cukup berguna)
DaimyoKirby
dapatkah Anda mengatakan apa yang bisa diklarifikasi? posting awal saya yang belum diedit adalah 3 kali lebih besar dan saya banyak membersihkannya untuk membuatnya lebih ringkas :)
Aquarius Power
Saya pikir ini baru saja terlambat - saya sudah membacanya lagi, dan itu lebih masuk akal.
DaimyoKirby

Jawaban:

5

[Aku masih ingin tahu apakah ada jawaban yang lebih baik.]

Saya menemukan cara yang berfungsi, dan prompt akan disimpan dalam satu baris:

di akhir Anda ~/.bashrctambahkan ini:

function FUNCsudoOn() { 
    if sudo -n uptime 2>/dev/null 1>/dev/null; then 
        echo -ne "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"; 
        #echo #without newline, the terminal seems to bugout with lines that are too big... discomment this if you find any problems...
    fi; 
}
function FUNCpromptCommand () { 
    FUNCsudoOn
}
export PROMPT_COMMAND=FUNCpromptCommand
#export PS1="\`FUNCsudoOn\`$PS1" #this also works, use instead of PROMPT_COMMAND

EDIT: Saya menemukan bahwa sudo -n uptimeakan memperbarui batas waktu sudo, jadi setiap kali Anda menekan tombol Enter, waktu sudo itu akan diperbarui ... Itu membuat mengetahui sisa waktu tidak berguna, karena akan selalu menjadi yang dikonfigurasi, default ke 15 menit .. .

dan untuk menemukan pemformatan warna terbaik sesuai selera Anda, Anda dapat menggunakan ScriptEchoColor dengan --escapedcharsopsi seperti:

echoc --escapedchars "@{nRlyo} SUDO " #that outputs below...
echo -e "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"

hanya untuk menghentikan penghapusan berkedip \E[5mseperti di\E[0m\E[93m\E[41m\E[1m SUDO \E[0m

Aquarius Power
sumber
4

Terminal Anda tidak "memiliki hak sudo", kecuali jika Anda melakukan sesuatu yang konyol seperti sudo bash JANGAN LAKUKAN INI!

Yang harus Anda lakukan untuk "memiliki hak sudo normal" adalah menahan diri dari mengetik sudodi depan perintah.

/usr/bin/idadalah cara yang baik untuk melihat apa yang sudodilakukannya. Sebagai contoh:

id -a        # returns my UID info
sudo id -a   # returns root's info
id -a        # me again
sudo id -a   # root again

The sudohalaman manual mengatakan "Kebijakan sudoers cache mandat untuk 15 menit, kecuali ditimpa dalam sudoers (5)". Artinya, secara default, jika Anda mengeluarkan sudoperintah (dan memasukkan kata sandi), lalu tunggu 14,9 menit sebelum mengeluarkan sudoperintah kedua , Anda tidak perlu memasukkan kata sandi lagi. Jika Anda menunggu 15,1 menit, Anda harus memasukkan kembali kata sandi. sudo -kcukup kedaluwarsa timer 15 menit dengan segera. Satu-satunya kegunaan yang bisa saya lihat sudo -kadalah jika Anda akan menghasilkan terminal yang tidak dikunci untuk seseorang yang tidak Anda percayai UID 0.

waltinator
sumber
Anda mengatakan "jangan mengetik sudodi depan perintah". Tetapi jika saya ingin memeriksa aturan firewall saya dengan iptables -Litu tidak akan berfungsi kecuali saya mengetik sudo iptables -L. Maksud saya adalah, bagaimana kita bisa benar-benar menghindari penggunaan sudo?
Aquarius Power
Juga, tentang sisa waktu, saya ingin tahu berapa banyak waktu yang tersisa setiap kali saya menekan tombol Enter pada terminal. Tentang sudo -k, saya khawatir tentang cracker yang mencoba mengakses mesin saya dari jarak jauh (saya tidak benar-benar tahu apakah mereka bisa melakukannya ...), atau kalau-kalau saya membiarkan mesin saya terbuka tanpa menguncinya selama beberapa saat ... yah, intinya adalah: Saya ingin melakukannya dengan cara ini! Saya tidak peduli harus mengetik sudo -kdan kata sandi saya lagi nanti sebanyak yang saya butuhkan, saya merasa baik ketika saya melakukannya dengan cara ini! :)
Aquarius Power
"Hindari menggunakan sudo"? Sudo adalah solusi untuk mendistribusikan kata sandi root, membuat binari setuid, atau menggunakan /bin/su. Anda yakin ingin membuangnya? "Mengakses mesin saya dari jarak jauh ..." dan, saya kira, mengambil alih /proc/YourPID/fd/{0,1,2}. Tidak. Jika mesin Anda diakses dari jarak jauh, Si Jahat memiliki cara yang lebih mudah untuk UID 0. Anda harus meningkatkan Linux-foo Anda sebelum tingkat kekhawatiran ini.
waltinator
Maaf untuk kata-kata kasar, sepertinya Anda harus alias k=/usr/bin/sudo -k, ganti sudoperintah dengan fungsi alias atau bash yang membungkus panggilan /usr/bin/sudodengan /usr/bin/touch $HOME/tmp/$$/sudotime, dan akhirnya, tambahkan sesuatu untuk mencetak $ {{waktu (sekarang) - waktu ($ HOME / tmp / $ $ / sudotime))) di prompt Bash Anda. Bukan hal sepele, tetapi jika itu akan membuat Anda merasa baik, lakukanlah.
waltinator
itu menarik, saya juga akan mencatat ketika upaya itu terjadi, atau bahkan lebih baik, mematikan komunikasi jaringan apa pun, keren! tetapi bahkan jika saya bersembunyi sudodengan alias ke sembarang kata, mereka masih bisa mengetik dan /usr/bin/sudobukan sudodan itu akan tetap bekerja seperti sudo :(. Pokoknya saya suka ide itu .. Saya bertanya-tanya apakah saya mengubah yang sebenarnya /usr/bin/sudoitu akan merusak sesuatu selain semua skrip saya yang menggunakannya .. bahkan jika saya melakukannya, mereka bisa, dengan membaca skrip itu, tebak apa yang menjadi sudo ..
Aquarius Power