Bash on Ubuntu on WindowsのrmはACLを無視して削除できるのか
はじめに
つい昨日,こんな記事を見かけました.
なんと,Bash on Ubuntu on Windowsで sudo rm -rf --no-preserve-root /
を実行すると, /mnt
にWindows上の C:\
がマウントされているために,Windowsが起動不可能になってしまうようです.
ここで疑問に思いました.
最近のWindowsでは,重要なシステムファイルは,Administrators権限ですら削除できないようにACL(アクセス制御リスト)でガッチガチに保護されているのでは?
ということ.
はたして,Bash on Ubuntu on Windowsでは,ACLに打ち勝ってシステムに保護されたファイルを削除できるのか,試してみることにしました.
まずはWindows側から検証
まず初めに,Windows側でいろいろ試してみたいと思います.
といっても,使っているWindowsをぶっ壊されては堪らないので,Cドライブ直下にあるWindows.old
の残骸を使います.
このWindows.old
フォルダですが,Windowsのアップグレード時に,前のバージョンやビルドに戻すためのデータを一時的に保管するために自動生成されるフォルダで,不要になればディスククリーンアップツールを使用して削除することができます.
ところが,稀にSYSTEM権限でしか触れないシステムファイルが入ってしまい,通常のWindowsからは削除できずに残ってしまうことがあります.
エクスプローラ
まず,普通にエクスプローラから
はい.普通に怒られました.
コマンドプロンプト
次に,コマンドプロンプト(管理者権限)から rmdir /S .\Windows.old
でいってみます.
無理ですね.
PowerShell
ならば,われらがPowerShell(管理者権限)で Remove-Item -Path .\Windows.old -Recurse -Force
を実行.
こちらも盛大に怒られました.
本丸のBash on Ubuntu on Windowsで検証
では,本丸のBash on Ubuntu on Windowsでやってみたいと思います.
と思ったら,Bash on Ubuntu on Windowsを入れ忘れていた...
入れましょう
さて,気を取り直してbashで sudo rm -rf ./Windows.old/
を実行します.
怒られました.よかった...
まとめ
Bash on Ubuntu on Windowsも,ちゃんとWindows側のACLに従って(あたりまえだけど)消せないものは消せないようになっています.
でも,/mnt
に全ドライブマウントされているので,迂闊に sudo rm -rf --no-preserve-root /
なんてやっちゃだめですよ!