なぜrmコマンドはこのように振る舞い、どのようなダメージを与えたでしょう


0

amがディレクトリ/ home / userAにあると仮定します

/ u / xml / xmlfilesを指す環境変数$ XMLFILESがあります。$ XMLFILES環境変数はuserAの環境/プロファイルにあります

userAとしてログオンしてから、「su」をuserBにログオンし、/ home / userB / testdataにcdします。

私はuserBであることに気づかなかったので、コマンドを発行しました

rm $XMLFILES/*

そして突然私はこれを見ます

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

上書き保護メッセージが表示されたらすぐに[CTRL + C]を押しました。私はuserBとしてログオンしたため$ XMLFILESがnullだったので、発行されたコマンドは実際には

rm *

今私が理解していないことは、なぜそれがルートフォルダからすべてを削除しようとしたのですか?私は/ home / userBにいたので、 'トップレベルの' / home / userB 'のすべてを削除しようとしたはずですか?rmコマンドは再帰的な削除でさえありませんでした。

ルートユーザーではないユーザーiとしてログオンした場合、これは何らかの損害を引き起こしたでしょうか?

回答:


6

いいえ、$XMLFILES空だったので削除しようとしました/*。できることは、ルートディレクトリからファイルを削除することだけです。これは、通常のユーザーはそもそも作成できないはずです。


しかし、コマンドを発行したときに/はありませんでした。rm / *ではなくrm *に変換されるべきではない
-ziggy

との/間に$XMLFILESあります*
イグナシオバスケス-アブラムス

わかりました。その/の前の/。バカな私。
ジギー

ルートとしてログオンしていなくても、これにより何らかの損害が発生したと思いますか?
ジギー

1
いいえ、通常のユーザーには/関係なく書き込みアクセス権があると想定されているためです。
イグナシオバスケス-エイブラムス

2

$ XMLFILESは空の文字列だったので、実際に発行したものは

rm "" / *

まで評価されていたでしょう

rm / *

これが、コマンドライン引数で$変数を使用する(つまり、その存在を最初に確認する)ことについて非常に注意する必要がある理由です。


私はルートとしてログオンしていなかったので、これは損害を与えなかっただろうと思います。
ジギー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.