Programming Field

Takeown - DOS/Windows コマンド一覧

[Windows Vista以降] ファイルの所有者を現在のユーザーに設定します。

構文

takeown[.exe] [/S <remote-system> [/U <user-name> [/P [<password>]]]]
    /F <file-name> [/A] [/R [/D <prompt>]]
/S <remote-system>
ネットワーク共有されているファイルやディレクトリを操作するためのコンピューター(ローカル/リモート)の名前を指定します。IPアドレスやホスト名を指定します。
/U <user-name> [/P [<password>]]
コンピューター名を指定した際のログイン名・パスワードを指定します。<user-name> にはドメイン名を指定することができます(「ドメイン名\ユーザー名」の形式です)。省略した場合はこのコマンドを実行したユーザーが使用されます。
パスワード指定は、「/P [<password>]」全体を省略した場合はパスワードなし、「/P」のみ指定して「<password>」を省略した場合はプロンプトを表示してユーザーにパスワード入力を促すようになります(このプロンプトでは入力されたパスワードが「*」で表示されます)。
※ ここで指定するユーザーはあくまでも <remote-system> に接続するためのユーザーとなります。Takeown で所有権を得るユーザーはこのオプションに関係なく「現在のユーザー」となります。
/F <file-name>
所有者を変更したいファイルまたはディレクトリ名を指定します。<file-name> の場所にパスを指定します(/S スイッチを使っている場合は「共有名\パス」を指定します)。ワイルドカード「*」のみ使用することが可能です(「?」は使用できません)。
なお、スイッチ名「/F」は省略することができません。必ず「/F <file-name>」の形式で指定する必要があります。また、複数回指定することはできません。(複数のファイルを対象にするにはワイルドカードで行うか、別々のコマンドで実行する必要があります。)
/A
所有者を現在のユーザーではなく「Administrators」グループに変更します。この操作には管理者権限が必要です(UAC による昇格も必要です)。
/R
/F スイッチでディレクトリ名を指定した場合(ディレクトリが含まれる場合)、そのディレクトリ内のファイルも所有者変更の対象とします(再帰)。
/D <prompt>
/R スイッチとともに指定し、対象のディレクトリに対する「フォルダーの一覧」権限がない場合に権限の変更を試みるかどうかを事前に指定します。<prompt> には「Y」(権限を変更する)または「N」(権限を変更せず再帰処理をあきらめる)のいずれかを指定します。なお、権限を変更すると元のユーザーがアクセスできなくなる可能性がありますのでご注意ください。

解説

指定したファイルやディレクトリの所有者(所有権)を、現在のセッションに基づくユーザーに設定します。所有者を変更するには、そのファイルに対する「所有権の取得」権限がある必要があります。ただし管理者権限のあるユーザー(UAC 昇格済み)である場合、権限を無視して変更することができます。

一度所有者を変更すると、たとえアクセス権を持っていなくてもセキュリティ権限を書き換えることが可能になります。そのため、アクセス不能になったファイルやディレクトリを復旧させるなどの目的で Takeown を使うことができます。

所有者の変更は Takeown の他に Icacls コマンドでも行うことができますが、Takeown はユーザーを指定することができない代わりに必要に応じて権限を書き換えて再帰的に所有者を変更することが可能です。ただし、権限の書き換えは基本的に「対象ユーザーのみのフルコントロール」という形に書き換えるため、元のユーザーがアクセスできなくなる恐れがあります。

サンプル1

takeown /F hoge.txt
icacls hoge.txt /grant %USERNAME%:F

「hoge.txt」を現在のユーザーに所有権を移したうえで、フルコントロールアクセス権を設定します。所有者を変更できればアクセス権が変更できるため、Icacls を使って権限の割り当てを行っています。

※ この場合の Takeown の呼び出しは Icacls に置き換えることができます。

サンプル2

runas /user:Hana "takeown /F note.txt"

現在のディレクトリにある note.txt の所有権をユーザー「Hana」に移します。Runas を使って Takeown を実行するため、この場合「Hana」のパスワードの入力を求められます。

サンプル3

takeown /F C:\Users\UnknownUser /A /R /D Y

「C:\Users\UnknownUser」ディレクトリとその中のファイルすべてを管理者グループ所有にして、必要に応じて権限に変更します。「C:\Users」はユーザーごとのデータを持つディレクトリであるため、「C:\Users\UnknownUser」は「UnknownUser」ユーザーに対するディレクトリということになります。そのことから、このコマンドを実行すると「UnknownUser」向けデータがすべて管理者に移行されるため、「UnknownUser」はログインできなくなります。そのため、このようなコマンドの実行はデータの復旧などのケースにとどめるべきです。