Masato's IT Library

Microsoftの製品・サービスを中心に,色々と書いていきたいと思います

Bash on Ubuntu on WindowsのrmはACLを無視して削除できるのか

はじめに

つい昨日,こんな記事を見かけました.

qiita.com

なんと,Bash on Ubuntu on Windowssudo rm -rf --no-preserve-root / を実行すると, /mntWindows上の C:\ がマウントされているために,Windowsが起動不可能になってしまうようです.

ここで疑問に思いました.

最近のWindowsでは,重要なシステムファイルは,Administrators権限ですら削除できないようにACL(アクセス制御リスト)でガッチガチに保護されているのでは?

ということ.

はたして,Bash on Ubuntu on Windowsでは,ACLに打ち勝ってシステムに保護されたファイルを削除できるのか,試してみることにしました.

まずはWindows側から検証

まず初めに,Windows側でいろいろ試してみたいと思います.
といっても,使っているWindowsをぶっ壊されては堪らないので,Cドライブ直下にあるWindows.oldの残骸を使います.
このWindows.oldフォルダですが,Windowsのアップグレード時に,前のバージョンやビルドに戻すためのデータを一時的に保管するために自動生成されるフォルダで,不要になればディスククリーンアップツールを使用して削除することができます. ところが,稀にSYSTEM権限でしか触れないシステムファイルが入ってしまい,通常のWindowsからは削除できずに残ってしまうことがあります.

f:id:mst8000:20160911020155p:plain:w400

エクスプローラ

まず,普通にエクスプローラから

f:id:mst8000:20160911020846p:plain:w500

はい.普通に怒られました.

コマンドプロンプト

次に,コマンドプロンプト(管理者権限)から rmdir /S .\Windows.old でいってみます.

f:id:mst8000:20160911021224p:plain:w500

無理ですね.

PowerShell

ならば,われらがPowerShell(管理者権限)で Remove-Item -Path .\Windows.old -Recurse -Force を実行.

f:id:mst8000:20160911022358p:plain:w500

こちらも盛大に怒られました.

本丸のBash on Ubuntu on Windowsで検証

では,本丸のBash on Ubuntu on Windowsでやってみたいと思います.
と思ったら,Bash on Ubuntu on Windowsを入れ忘れていた...

入れましょう

f:id:mst8000:20160911023846p:plain:w400

さて,気を取り直してbashsudo rm -rf ./Windows.old/ を実行します.

f:id:mst8000:20160911032102p:plain:w500

怒られました.よかった...

まとめ

Bash on Ubuntu on Windowsも,ちゃんとWindows側のACLに従って(あたりまえだけど)消せないものは消せないようになっています.

でも,/mnt に全ドライブマウントされているので,迂闊に sudo rm -rf --no-preserve-root / なんてやっちゃだめですよ!