Suatu hari saya sedang melakukan beberapa tugas pemeliharaan di server web saya. Saya sedang terburu-buru dan mengantuk, jadi saya melakukan semuanya menggunakan sudo
perintah.
Dan kemudian, saya tidak sengaja menekan Ctrl+ V, mengirimkan perintah ini ke server web saya:
sudo rm -rf /*
Bagi mereka yang bertanya-tanya apa yang dilakukan perintah di atas: Ini menghapus seluruh server web saya
Untungnya, saya punya cadangan dan sayangnya, saya harus menghabiskan dua jam lagi untuk memperbaiki kesalahan yang luar biasa ini. Tapi sejak itu, saya bertanya-tanya:
Apakah ada cara untuk selalu menerapkan kata sandi sudo untuk perintah tertentu?
Jika server meminta saya kata sandi, saya akan menyelamatkan diri dari banyak masalah. Tidak, karena saya menjalankan sekitar 5 sudo
perintah sebelum kesalahan besar ini.
Jadi, adakah cara untuk melakukannya? Saya hanya perlu kata sandi dengan rm
perintah untuk selalu ditegakkan. Perintah lain yang saya gunakan biasanya nano
atau cp
yang keduanya (sampai batas tertentu) dapat dikembalikan.
sumber
/*
diperluas sebelum diteruskan ke perintah rm. Jadi perintah tidak melihat argumen tunggal, tetapi daftar argumen (/bin /boot /cdrom /dev /etc /home
...)rm
perintah memiliki kata sandi. Mereka hanya inginsudo
meminta satu setiap kali perintah rm digunakan. Solusi untuk pertanyaan yang Anda tautkan akan menjadi sedikit mengganggu ketika perintah pertama Andasudo rm
. Karena akan meminta dua kata sandi, satu untuksudo
satu kata sandirm
.Jawaban:
Anda dapat mengatur
timestamp_timeout
untuk0
untuk perintah tertentu dalam/etc/sudoers
. Buat filevisudo -f /etc/sudoers.d/pduck
dengan konten berikut:Sekarang pengguna
pduck
selalu dimintai kata sandi saat menjalankansudo rm
(tidak peduli apa pun parameter tambahan yang diberikan) meskipun pengguna adalah anggotasudo
grup dansudo
mengingat kata sandinya untuk perintah lain.Kelemahannya adalah Anda tidak dapat dengan mudah menambahkan parameter ke
/bin/rm
baris dalam file untuk lebih lanjut membatasi ini. Ya… Anda bisa, seperti:tetapi kemudian Anda hanya diminta untuk tepat
sudo rm -f
dan tidak (lagi) untuksudo rm -rf
, misalnya.sumber
Salah satu metode akan menggunakan safe-rm . Ini HANYA akan menyarankan penggunaan "rm" dan mencegah versi "rm" tertentu dijalankan. Itu termasuk menghapus sistem root Anda tetapi juga dapat digunakan untuk mencegah penghapusan direktori terkait sistem seperti "/ usr /" atau "/ var /". Dari tautan:
sumber
sudo
memberikan opsi-k, --reset-timestamp
, lihatman sudo
:Anda bisa menulis bungkus sederhana untuk
sudo
pengujianrm -rf /*
dan menjalankansebagai gantinya, misal seperti ini:
Contoh penggunaan
Menguji dengan
echo a
sini.Jika Anda ingin ditanya setiap kali Anda menjalankannya
rm
secara umum, Anda dapat menyesuaikan fungsi di atas sebagai berikut:Jika Anda ingin menggabungkan kedua panggilan perintah umum dan baris perintah tertentu yang saya sarankan gunakan
case
, misalnya:Perhatikan bahwa pendekatan ini tidak akan berfungsi jika Anda menjalankan
sudo
dengan opsi - solusi yang mungkin adalah[[ "$*" =~ " rm " ]]
memeriksa string "rm" yang dikelilingi oleh spasi atau*" rm "*)
dengancase
menangkap baris perintah yang berisi "rm".sumber
[[ "$1" == "rm" ]] && opt="-k";
dan bagaimana/bin/rm
?case
pendekatannya.Jawaban ini tidak membahas
sudo
bagian dari pertanyaan Anda, tetapi di sisi lain itu membahas cara untuk mengurangi bahayarm
pemanggilan yang tidak disengaja bagi setiap pengguna.Anda bisa alias
rm
untukrm -I
yang-f
yang mengabaikan-I
opsi sebelumnya .--one-file-system
adalah kemungkinan perlindungan lain terhadap penghapusan yang tidak diinginkan yang saya gunakan dirm
alias saya .Mempersiapkan
Untuk membuat alias seperti itu gunakan perintah:
Anda dapat memasukkannya ke
~/.bashrc
atau bahkan Anda/etc/bash.bashrc
.Pemakaian
Untuk mengonfirmasi jenis
yes
atau terjemahannya ke lokal Anda atau huruf pertama dari salah satu kata dan tekan Enter. Input lain apa pun termasuk tidak ada yang membatalkan operasi.sumber