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.