Mengapa perintah rm berperilaku seperti ini dan kerusakan apa yang akan saya sebabkan


0

Asumsikan saya di direktori / home / userA

Ada variabel lingkungan $ XMLFILES yang menunjuk ke / u / xml / xmlfiles. Variabel lingkungan $ XMLFILES ada di lingkungan / profil userA

Saya masuk sebagai userA lalu 'su' ke userB dan saya cd ke / home / userB / testdata.

Saya tidak menyadari bahwa saya adalah userB jadi saya mengeluarkan perintah

rm $XMLFILES/*

Dan tiba-tiba saya melihat ini

bash-3.00$ rm $XMLFILES/*
rm: /bin not removed: Permission denied
rm: /boot is a directory
rm: /cdrom is a directory
rm: /dev is a directory
rm: /devices is a directory
rm: /etc is a directory
rm: /export is a directory
rm: /home is a directory
rm: /kernel is a directory
rm: /lib is a directory
rm: /lost+found is a directory
rm: /mnt is a directory
rm: /net is a directory
rm: /noffprotect: override protection 644 (yes/no)? ^C

Saya menekan [CTRL + C] segera setelah saya melihat pesan perlindungan yang ditimpa. Saya pikir karena $ XMLFILES adalah nol karena saya login sebagai userB perintah yang dikeluarkan sebenarnya

rm *

Sekarang yang tidak saya mengerti adalah mengapa ia mencoba menghapus semuanya dari folder root? sejak saya di / home / userB, haruskah itu hanya mencoba untuk menghapus semuanya di 'tingkat atas' / home / userB '? perintah rm bahkan bukan penghapusan rekursif.

Mengingat bahwa pengguna yang saya masuki bukan pengguna root, apakah ini akan menyebabkan kerusakan?

Jawaban:


6

Tidak, karena $XMLFILESkosong, ia mencoba menghapus /*. Yang bisa dilakukan hanyalah menghapus file dari direktori root, yang seharusnya tidak bisa dibuat oleh pengguna normal.


Tetapi tidak ada / ketika saya mengeluarkan perintah. Bukankah seharusnya dikonversi ke rm * daripada rm / *
ziggy

Ada /di sana, di antara $XMLFILESdan *.
Ignacio Vazquez-Abrams

Ok saya melihatnya. Ini adalah / sebelum *. Bodohnya aku.
ziggy

Apakah Anda pikir ini akan menyebabkan kerusakan meskipun saya tidak masuk sebagai root?
ziggy

1
Tidak, karena tidak ada pengguna normal yang seharusnya memiliki akses tulis /.
Ignacio Vazquez-Abrams

2

$ XMLFILES akan menjadi string kosong jadi apa yang sebenarnya Anda keluarkan akan menjadi

rm "" / *

yang akan dievaluasi hingga

rm / *

Inilah sebabnya mengapa Anda harus sangat berhati-hati menggunakan $ variabel (yaitu memeriksa keberadaannya terlebih dahulu) dalam argumen baris perintah.


Saya kira ini tidak akan melakukan kerusakan karena saya tidak login sebagai root.
ziggy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.