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 / なんてやっちゃだめですよ!