[PowerShell] Windows7でのNTFSアクセス権の設定方法

先日から困っていたこと、気づいたら非常に簡単だったこと。

Windows XP迄使えていたNTFSアクセス権の設定コマンド「cacls」はWindows Vista以降では使用できなくなったようです。代わりに「icacls」というコマンドが用意されているようです。

早速このコマンドを利用しようと試みると...
(下記のコマンドはc:\windows\win.ini にUsersグループがアクセスできるように権限を付与します。)

C:\Users\Jun>icacls c:\windows\win.ini /grant Users:M
c:\windows\win.ini: アクセスが拒否されました。
0 個のファイルが正常に処理されました。1 個のファイルを処理できませんでした

と返されます。管理者なのにアクセスが拒否されるのは何でなのかな?とtechnetを探していると、よく似たWindows 2003 Server sp2での事例が引っかかったので、この問題がWindows7でもまだ発生しているのか?このときにリリースされているヴァージョンよりもWindows7についているバージョンの方が新しいから適用されているのでは?と悩んでいました。

ですが、本日自宅で同じ事を試みて...

C:\windows\system32>icacls c:\windows\win.ini /grant Users:M
処理ファイル: c:\windows\win.ini
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

と返ってくることに気づきました。
何か応答メッセージに引っかかるところがありますが、実際にエクスプローラで確認すると、正常にコマンドが実行できていることが確認出来ました。
では、何がちがうのか?と言うと
どちらも管理者でログインしているのですが、UAC特有の昇格を行っていなかったからのようです。
でも、確か会社のPCはUAC OFFに設定してもらってたはず何ですがΣ(>_<;)

さらに、PowerShell 2.0でも実行してみました。

Usersグループにc:\windows\win.ini対してフルコントロールのNTFSアクセス権を付与する場合

$aclparam = @("Users", "Fullcontrol", "Allow")
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $aclparam
$acl = Get-Acl c:\windows\win.ini
$acl.AddAccessRule($rule)
Set-Acl c:\windows\win.ini -AclObject $acl

Usersグループにc:\windows\win.ini対して変更のNTFSアクセス権を付与する場合

$aclparam = @("Users", "Modify", "Allow")
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule  $aclparam
$acl = Get-Acl c:\windows\win.ini
$acl.AddAccessRule($rule)
Set-Acl c:\windows\win.ini -AclObject $acl

※PowerShellを利用する場合でも、UACの昇格は忘れずに行ってください。

コメント (0件)


くろねこ研究所
http://www.blackcatlab.com/article.php/ProgFAQ-PS_Set-Acl