当記事ではファイル/フォルダのアクセス権操作についてのみ言及する。
準備
SubInACL は Download SubInACL (SubInACL.exe) from Official Microsoft Download Center からダウンロードできる。インストールしたら、 C:\Program Files (x86)\Windows Resource Kits\Tools\ にパスを通しておく。
(32bitOSの場合は C:\Program Files\Windows Resource Kits\Tools\)
以下、最近使ってみて便利だった用例を紹介する。
フォルダ/ファイルのACLを表示
こいつのすごいところは、権限の関係でエクスプローラからだとACLを確認できないような場合でも、ちゃんと権限を取得し表示してくれること(当然だけどコマンドプロンプトを管理者権限で立ちあげておく必要がある)。Figure.1 subinacl は、こういう場合に重宝する |
C:\>subinacl.exe /noverbose /subdirectories .\* ========================================== +File X:\xxxxxxx\yyyyyyy\documents ========================================== /control=0xc00 /owner =domainname\ownername /primary group =domainname\domain users /audit ace count =0 /perm. ace count =2 /pace =system Type=0x0 Flags=0x13 AccessMask=0x1f01ff /pace =domainname\username Type=0x0 Flags=0x13 AccessMask=0x1f01ff …(snip) Elapsed Time: 00 00:00:00 Done: 10, Modified 0, Failed 0, Syntax errors 0 Last Done : X:\xxxxxx\yyyyyyy\documents\desktop.ini/pace の Typeはアクセス許可の種類であり、0x0が許可、0x1が拒否。
Flags は継承の設定値であり、各ビットの意味は下記の通り。
値(ビット) | 定数名 | 意味 |
---|---|---|
0x1 | OBJECT_INHERIT_ACE | (フォルダのみ)下にファイルを作ると、そいつは親(=自分)のアクセス許可を継承する |
0x2 | CONTAINER_INHERIT_ACE | (フォルダのみ)下にサブフォルダを作ると、そいつは親(=自分)のアクセス許可を継承する |
0x8 | INHERIT_ONLY_ACE | (フォルダのみ)自分はこのアクセス許可を使わないが、下に作ったファイルやサブフォルダには継承する |
0x10 | INHERITED_ACE | (ファイル、フォルダとも)親のアクセス権を継承している |
AccessMask はアクセス許可の値であり、各ビットの意味は下記の通り。
値(ビット) | 定数名 | 意味 |
---|---|---|
0x1 | FILE_READ_DATA | フォルダーの一覧/データの読み取り |
0x2 | FILE_WRITE_DATA | ファイルの作成/データの書き込み |
0x4 | FILE_APPEND_DATA | フォルダーの作成/データの追加 |
0x8 | FILE_READ_EA | 拡張属性の読み取り |
0x10 | FILE_WRITE_EA | 拡張属性の書き込み |
0x20 | FILE_EXECUTE | フォルダーのスキャン/ファイルの実行 |
0x40 | FILE_DELETE_CHILD | 削除 |
0x80 | FILE_READ_ATTRIBUTES | 属性の読み取り |
0x100 | FILE_WRITE_ATTRIBUTES | 属性の書き込み |
0x10000 | DELETE | 削除 |
0x20000 | READ_CONTROL | アクセス許可の読み取り |
0x40000 | WRITE_DAC | アクセス許可の変更 |
0x80000 | WRITE_OWNER | 所有権の取得 |
0x100000 | SYNCHRONIZE | このフラグは必ず立っている? |
フルコントロールだと 0x1f01ff、変更だと 0x1301bf、読み取りだと 0x1200a9 になると思う。
/noverbose オプションを外せば、"Type of access"という項目にアクセス許可の種類がわかりやすく表示される ("Full Control"とか表示される) けど、出力結果がものすごく長くなってしまう。どっちがいいのか悩みどころ。
アクセス許可の付与
ファイル X:\xxxxxxx\yyyyyyy\documents\file.txt に対して、ユーザー domainname\username にフルコントロールをつける例。subinacl /file X:\xxxxxxx\yyyyyyy\documents\file.txt /grant=domainname\username=F末尾のフラグの意味は、下記の通り。
フラグ | 意味 |
---|---|
F | Full Control |
C | Change |
R | Read |
P | Change Permissions |
O | Take Ownership |
X | eXecute |
E | Read eXecute |
W | Write |
D | Delete |
なお、ドメイン名やユーザー名(グループ名)にスペースが入っている場合は、以下の例のようにダブルクォーテーションで括れば良い。
subinacl /file X:\xxxxxxx\yyyyyyy\documents\file.txt /grant="domainname\Domain Users"=Fアクセス拒否を設定したい時は、/grant の代わりに /deny を使う。
/file の代わりに /subdirectories を使えば、特定のファイル/フォルダ以下の全ファイルにアクセス許可を付与できる(実行時には細心の注意を!)。例えば、カレントディレクトリ以下の全フォルダ・ファイルにアクセス許可を一気につけたい時は、下記のようにする。
subinacl /subdirectories .\* /grant=domainname\username=F
アクセス許可の削除
ファイル X:\xxxxxxx\yyyyyyy\documents\file.txt に付いているユーザー domainname\username のアクセス許可を削除する例。subinacl /file X:\xxxxxxx\yyyyyyy\documents\file.txt /revoke=domainname\usernameアクセス許可の付与と同じく、/subdirectories が使える。
アクセス許可のユーザーの置換
すごく便利なのがこれ。アクセス許可の付け替えがラクラク。アカウント名やセキュリティグループ名に変更があった時に、既存の設定値そのままで新しいアカウントやセキュリティグループにアクセス権限設定を引き継げるので安全だと思う。
ファイル X:\xxxxxxx\yyyyyyy\documents\file.txt についている domainname1\username1 のアクセス許可設定を domainname2\username2 に付け替えるには、下記のようにする。
subinacl /file X:\xxxxxxx\yyyyyyy\documents\file.txt /replace=domainname1\username1=domainname2\username2アクセス許可の付与と同じく、/subdirectories が使え(ry
所有者の変更
ファイル X:\xxxxxxx\yyyyyyy\documents\file.txt の所有者を domainname\username に変更する例。subinacl /file X:\xxxxxxx\yyyyyyy\documents\file.txt /setowner=domainname\usernameアクセス許可の付与と同じく、/subdirectories が(ry
0 コメント:
コメントを投稿