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?

ziggy
sumber

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.

Ignacio Vazquez-Abrams
sumber
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.

Mokubai
sumber
Saya kira ini tidak akan melakukan kerusakan karena saya tidak login sebagai root.
ziggy