Baris perintah dan skrip berbahaya. Buat kesalahan ketik kecil dengan rm -rf dan Anda berada di dunia yang terluka. Bingung prod dengan tahap atas nama database saat menjalankan skrip impor dan Anda boned (jika mereka berada di server yang sama, yang tidak baik, tetapi terjadi). Sama untuk mengetahui terlambat bahwa nama server di mana Anda sshed bukan apa yang Anda pikir setelah bersenang-senang beberapa perintah. Anda harus menghormati Hole Hawg .
Saya punya beberapa ritual kecil sebelum menjalankan perintah berisiko - seperti melakukan triple take check dari server yang saya gunakan. Berikut ini adalah artikel menarik tentang keamanan rm .
Ritual, alat, dan trik kecil apa yang membuat Anda tetap aman di baris perintah? Dan maksud saya hal-hal obyektif, seperti "jalankan pertama ls foo *, lihat output dari itu dan gantikan ls dengan rm -rf untuk menghindari menjalankan rm -rf foo * atau sesuatu seperti itu", tidak "pastikan Anda tahu apa perintah akan dilakukan ".
sumber
Jawaban:
Salah satu yang bekerja dengan baik adalah menggunakan warna latar belakang yang berbeda pada shell Anda untuk server prod / staging / test.
sumber
Miliki rencana mundur sebelum Anda mulai.
sumber
Saya memiliki solusi berteknologi rendah untuk beberapa di antaranya.
Saya telah mengembangkan kebiasaan untuk melakukan hal berikut (ketika berencana untuk bekerja sebagai root):
sudo su - root
untuk beralih ke root. Saya melakukan ini sebagai persiapan mental, pengingat bagi saya bahwa saya telah secara mental berjalan ke daerah yang sangat berbahaya dan bahwa saya harus waspada dan waspada setiap saat. Lucu kedengarannya, ritual kecil ini saja telah menyelamatkan saya banyak kesedihan hanya dengan memperkuat bahwa saya tidak bisa gegabah .sudo
sistem saya, bukan karena saya seorang BOFH , tetapi karena tanpa persiapan dan pelatihan, ini seperti memberikan pistol yang dimuat ke monyet. Ini lucu dan menyenangkan pada awalnya, sampai monyet melihat ke bawah laras dan meremas ...Saat menggunakan rm, saya selalu
cd
ke direktori terlebih dahulu, kemudian menggunakan awalan./
untuk memastikan bahwa direktori sudah benar, yaituatau saya menentukan seluruh path file
yang merupakan PITA tapi ... lebih baik aman daripada menyesal.
sumber
Yang ini khusus untuk Windows Powershell.
Sebagai kebijakan kami menambahkan berikut profil mesin.ps1 pada setiap server. Ini memastikan bahwa yang berikut ini benar:
sumber
Saya bisa setuju dengan semua jawaban di atas tetapi saya harus menekankan tip yang sangat, sangat penting ini:
Ketahui kapan harus menghindari multitasking.
sumber
Saya memastikan nama host dari sistem yang saya gunakan ada di bash (atau shell lain) prompt. Jika saya chroot, saya memastikan itu juga ada di sana.
Saya pernah menginstal sistem Gentoo dari dalam distro Linux langsung lain dan secara tidak sengaja menjalankan perintah yang agak merusak (tidak dapat mengingat apa itu ATM - beberapa varian
rm
) di shell yang salah, menyebabkan banyak hal pada sistem live menjadi dihapus, bukan hal-hal dari dalam chroot. Sejak saat itu, saya selalu melakukannyasetiap kali saya bekerja di chroot.
sumber
Ada beberapa hal penting yang harus diperhatikan sebelum membuat perubahan server:
Pastikan saya berada di server yang benar
Waspadai ** berapa banyak orang yang akan terpengaruh oleh tindakan ini * (jika Anda melakukan kesalahan atau tidak)
Sebelum mengetik kunci 'enter', perhatikan kemungkinan untuk membatalkan
Tanyakan pada diri Anda apakah perintah ini berpotensi memutuskan sesi Anda (aturan fw, shutdown yang buruk, dll ...). Pastikan Anda memiliki kegagalan untuk kembali (khususnya jika Anda di luar kantor)
sumber
Jika Anda belum melakukannya alias rm to rm -i
sumber
Aturan 1 - buat cadangan
Aturan 2 - JANGAN PERNAH menambahkan pembungkus "molly guard" ke perintah standar, buat versi Anda sendiri, tentu saja, tetapi jangan mengambil alih namanya, itu hanya akan menggigit Anda saat Anda menggunakan sistem yang tidak Anda atur.
Trik cepat seperti warna yang berbeda untuk root dan pohon direktori (parsial) sangat membantu, tetapi sekali lagi, pastikan Anda dapat bekerja tanpa mereka.
sumber
Ini mungkin tampak kontra-intuitif dan tidak terlalu sulit, tetapi tip keamanan baris perintah terbaik yang saya miliki adalah: Jika alternatif mode GUI tersedia dan praktis, maka GUNAKAN .
Mengapa? Cukup sederhana. GUI-mode biasanya memiliki jaring pengaman built-in, dalam bentuk "peringatan - Anda akan meringkuk freeblefrop, apakah Anda yakin ingin melakukan ini?" Bahkan jika tidak, itu memperlambat Anda, memberi lebih banyak ruang untuk waktu berpikir. Ini memungkinkan Anda memeriksa opsi lebih mudah sebelum berkomitmen, Anda dapat tangkapan layar sebelum dan sesudah menyatakan, melindungi Anda dari kesalahan ketik; semua hal baik, bermanfaat dan bermanfaat.
Dalam kasus klasik "rm -rf" yang ditakuti, apakah Anda pikir lebih mudah untuk secara tidak sengaja mengeluarkannya dari GUI atau CLI?
Pada akhirnya, tidak ada salahnya menggunakan GUI. Itu tidak akan sempurna mencegah bencana besar; sangat mungkin untuk menjadi pemicu-senang dalam GUI seperti halnya dalam CLI; tetapi jika itu menyelamatkan Anda setelah itu terbukti bermanfaat.
sumber
Gunakan akal sehat, dan jangan jalankan perintah yang tidak Anda mengerti. Itu semua saran bagus. Jika Anda ingin menyakiti diri sendiri dengan menuliskan jalur absolut dari semua yang Anda sampaikan kepada rm, atau menjalankan apa pun melalui sudo, jangan ragu. Saya lebih suka su-c kalau begitu. Setidaknya itu tidak men-cache kata sandi. Saya tidak akan merasa nyaman dengan pengguna biasa yang diizinkan menjalankan sesuatu dengan hak akses root tanpa verifikasi kata sandi.
Ada beberapa hal yang dapat Anda letakkan di ~ / .bashrc Anda untuk membuat segalanya lebih aman, seperti:
Memungkinkan Anda memiliki alternatif rm yang aman, ...
Tetapi pada akhirnya, Anda bisa dan akan selalu mengacau. Suatu hari saya memiliki skrip konfigurasikan chown yang tidak berfungsi pada seluruh folder / usr / bin saya, memecahkan beberapa hal. Ya, 'instal' sederhana dari semua jenis perangkat lunak dengan bug di dalamnya, dapat merusak sistem Anda. Anda TIDAK PERNAH aman, apa pun yang Anda lakukan. Yang saya maksudkan adalah, hal yang PALING penting:
Simpan cadangan secara teratur.
sumber
srm
Adalah aman menghapus !Daripada aliasing rm ke rm -i, bukankah lebih baik untuk mengatakan untuk menghapus atau lebih aman (dan gunakan itu sebagai alat penghapusan pilihan Anda). Kemudian ketika Anda menggunakan kotak yang belum memiliki pengaturan ini, tidak ada kerusakan yang terjadi.
sumber
Pastikan Anda tidak pernah menjalankan perintah yang Anda temukan online kecuali Anda sepenuhnya memahami apa yang mereka lakukan.
Sistem Anda mungkin berbeda dari poster, dan itu bisa menyebabkan dunia terluka.
sumber
Yang jelas untuk keamanan baris perintah dari perspektif Unix / Linux adalah penggunaan akun root yang tepat.
Rm -rf sebagai root umumnya lebih berbahaya daripada sebagai pengguna, dan menggunakan hal-hal bawaan seperti sudo daripada masuk sebagai root sangat penting. Whoami sederhana yang bagus biasanya akan membantu untuk skizofrenia atau kepribadian ganda.
Itu dan menambahkan gema ke perintah pengubahan file, terutama jika Anda ingin memastikan bahwa Anda mendapatkan glob atau regex yang cocok dengan benar.
sumber
Memiliki koneksi sekunder ke dalam mesin yang sedang Anda kerjakan dapat berguna jika Anda membunuh sesi utama Anda, atau melakukan sesuatu yang konyol yang menguncinya ... proses yang berat dll.
Dengan begitu Anda masih memiliki akses ke mesin dan dapat membunuh sesi utama Anda.
Sebagian besar komentar di atas merujuk ke rm, tetapi saya telah melakukan beberapa hal bodoh dengan perintah lain juga ...
ifconfig untuk menghapus jaringan - aduh, itu membutuhkan kehadiran fisik untuk memperbaikinya.
Sedangkan untuk scripting saya biasanya bekerja di dua jendela. Yang pertama saya gunakan untuk menulis skrip, yang kedua untuk menguji setiap baris saat saya menulisnya. Berjalan perlahan dan hati-hati saya dapat memastikan bahwa setiap baris berfungsi seperti yang saya harapkan saat saya menulis kode, berhati-hati untuk menjaga variabel yang sama, dll.
Secara pribadi, saya tidak menemukan petunjuk tambahan untuk hal-hal seperti rm -saya sangat membantu. Saya membuat sebagian besar kesalahan saya ketika v. Lelah, stres dll, yang merupakan saat-saat ketika saya hanya akan memukul dan mengabaikan prompt. Praktek yang buruk mungkin.
sumber
Jika Anda menggunakan bash, coba ini:
di
/root/.bashrc
atau serupa Anda. Ini mengeluarkan Anda secara otomatis setelah 10 menit, mengurangi kemungkinan bahwa Anda akan beralih ke terminal root yang secara tidak sengaja Anda biarkan terbuka dan mengetik sesuatu yang bodoh.Ya, saya tahu Anda harus menggunakan sudo untuk menjalankan perintah root - ini hanya jaring pengaman ekstra jika Anda memutuskan untuk memainkannya berisiko suatu hari.
sumber
Alias yang sangat disarankan untuk ada jika Anda pernah menggunakan CLI mysql.
sumber
Alih-alih saya menggunakan gema sehingga saya bisa melihat perintah lengkap setelah shell telah memperluas segalanya. Selain itu, selalu gandakan variabel kutipan yang mewakili file sehingga barang Anda bekerja dengan nama file yang mungkin memiliki tab atau spasi.
sumber
Saya menghindari
*
gumpalan sebagai argumennya sendiri jika memungkinkan. Bahkan jika saya benar-benar bermaksud "menghapus semua yang ada di direktori ini" saya mencoba untuk lebih spesifik, yaitu.rm *.php
. Ini adalah preemptive damage control jika saya tidak sengaja menjalankan perintah yang sama dari sejarah di direktori lain.sumber
Cara terbaik untuk membuat Anda berpikir tentang apa yang Anda lakukan adalah menambahkan sesuatu seperti ini ke bashrc root (cshrc, apa pun):
Dengan begitu, Anda harus melakukan / bin / rm bukan hanya "rm". Karakter ekstra itu mungkin membuat Anda berpikir.
sumber
which $COMMAND
tidak lagi berfungsi.Untuk regex yang kompleks, terutama perintah 'find', letakkan gema di depan dan tangkap di file. Kemudian Anda dapat memeriksa apakah Anda benar-benar menghapus / memindahkan / etc apa yang Anda pikirkan sebelum menjalankan file dengan 'sumber'.
Ini juga berguna untuk secara manual menambahkan tepi case yang tidak diambil regex.
sumber
Sedikit meta untuk beberapa postingan lain: Saya menggunakan langkah-langkah echo / ls yang disarankan pertama kali, untuk memastikan bahwa perintahnya memilih set file yang saya inginkan atau ditafsirkan oleh shell sebagaimana dimaksud.
Tapi kemudian saya menggunakan fitur pengeditan histori perintah dari shell untuk mengambil perintah sebelumnya, dan memodifikasi hanya bagian-bagian yang perlu divariasikan.
Sama sekali tidak membantu untuk mengetik setiap perintah ini secara independen ...
... karena saya tidak sengaja mengetik spasi di baris terakhir, dan menghapus semua file. Saya akan selalu mengambil baris sebelumnya dan cukup menghapus 'gema'.
sumber
pengguna root:
Jangan menjadi root kecuali Anda harus.
Jika vendor mengatakan perlu dijalankan sebagai root, beri tahu mereka bahwa Anda adalah pelanggan dan Anda ingin menjalankannya sebagai non-root.
Berapa banyak paket perangkat lunak yang ingin di-root 'hanya karena lebih mudah'?
kebiasaan:
tidak pernah menggunakan '*' dengan menghapus tanpa melihatnya tiga kali. Yang terbaik adalah membangun kebiasaan menggunakan ls-l TargetPattern , kemudian gunakan 'rm! $'. Ancaman terbesar adalah tidak berada di tempat yang menurut Anda. Saya hampir mengetik 'hostname' sesering 'ls'!
kruk:
prompt standar membantu banyak, seperti halnya alias seperti "alias rm = 'rm -i'", tapi saya sering tidak memiliki kendali penuh atas mesin yang saya gunakan sehingga saya menggunakan skrip pembungkus harapan hanya untuk mengatur jalur Anda , prompt, dan alias dengan '-i'
menemukan masalah:
menggunakan path lengkap membantu, tetapi dalam kasus di mana itu tidak mungkin, cd ke lokasi yang lebih aman dan JUGA menggunakan '&&' untuk memastikan bahwa 'cd' berhasil sebelum Anda menemukan, menghapus, tar, untar, dll:
contoh:
cd /filesystema && tar cf - | ( cd /filesystemb && tar vxf -)
penggunaan '&&' dapat mencegah file tar diekstraksi dengan sendirinya dalam kasus ini (meskipun dalam kasus ini 'rsync' akan lebih baik)
menghapus:
tidak pernah menghapus secara rekursif jika Anda dapat membantu, terutama dalam skrip. temukan dan hapus dengan -type f dan -nama 'pattern' Saya masih hidup karena takut memberi makan 'nothing' to xargs ... tar dan untar untuk memindahkan barang-barang (gunakan rsync sebagai gantinya)
sumber
Jika Anda menggunakan beberapa varian dari sistem operasi, menjadi sangat menyadari perbedaan dalam sintaks; apa yang cukup aman pada satu varian unix sangat berbahaya di varian lain.
Contoh: killall
Linux / FreeBSD / OSX - membunuh semua proses yang cocok dengan parameter yang diteruskan. mis: "killall apache" membunuh semua apache, membiarkan semua proses lainnya sendirian.
Solaris - membunuh semua proses. Tidak benar-benar. Dari halaman manual : killall digunakan oleh shutdown (1M) untuk mematikan semua proses aktif yang tidak terkait langsung dengan prosedur shutdown.
sumber
Dari pada
menggunakan
Ini praktis dengan beberapa file, tetapi tidak dengan, katakanlah, seluruh tarball. Itu sebabnya aliasing
rm
akan menghalangi Anda.sumber
Menjalankan perintah dengan echo terlebih dahulu adalah ide yang bagus, tetapi masih rentan terhadap kesalahan ketik.
Coba gunakan dengan ekspansi seperti! $.
$! Diperluas ke kata terakhir dari perintah terakhir, jadi itu setara dengan
Ada juga! *, Yang memperluas semua argumen ke perintah terakhir.
Memang, Anda bisa melakukannya dengan cara ini jika Anda mau
(Jika Anda menggunakan ksh, bukan bash, Anda dapat mengetik Esc + periode untuk memasukkan kata terakhir.)
sumber
Dalam hal sesuatu seperti:
ls * .php
echo rm * .php
rm * .php
Anda dapat menggunakan operator substitusi, seperti ini:
$ ls * .php
<dir listing>
$ ^ ls ^ echo rm (ini menggantikan ls di perintah sebelumnya dengan echo rm, menjaga sisa baris perintah sama)
$ ^ echo rm ^ rm (ganti echo rm hanya dengan rm, jadi Anda tidak perlu mengetik ulang * .php dan melempar spasi pada waktu yang salah)
^ = shift-6, bagi yang belum terbiasa.
sumber
Gunakan bash dan atur PS1 = '\ u @ \ h: \ w>'. Ini diperluas ke nama pengguna @ hostname: / full / working / direktori / path> Seperti yang disebutkan dalam jawaban lain, Anda dapat menggunakan harapkan untuk mengatur lingkungan setiap kali Anda login jika Anda tidak dapat memperbarui file .profile atau .bash_profile. Mengganti warna latar adalah jawaban yang paling mudah :-)
sumber
Ah iya. Trik lama mengirim seseorang file melalui IRC bernama "-rf" sehingga berakhir di direktori ~ mereka. Satu "rm-rf" kecil kemudian (alih-alih "rm --rf") dan banyak tawa terjadi ketika mereka belajar pelajaran keras tentang tidak menjalankan IRC sebagai root.
sumber
Alih-alih menggunakan
rm -rf <dir>
menempatkan-rf
di akhir seperti:rm <dir> -rf
. Anggap itu sebagai menghapus keselamatan setelah Anda mengarahkan dan sebelum Anda menembak. Dengan begitu Anda terlindungi jika Anda memiliki slip pada tombol enter saat mengetik nama direktori (atau menggunakan penyelesaian tab) dan memiliki direktori yang bernama sama.sumber