| Works
フォルダリダイレクト先のアクセス権
久々に移動ユーザープロファイルとフォルダリダイレクトを設定したので、復習と備忘。
グループポリシーで移動ユーザープロファイルやフォルダリダイレクトを使用すると、既定ではユーザーの個人フォルダは管理者もアクセスできなくなってしまいます(無理矢理アクセス権をとることは可能ではありますが)。
それでは管理をする上で不都合なので管理者のアクセス権を付与することが多いと思います。
ユーザープロファイルの方はグループポリシーに「Administrators セキュリティグループを移動ユーザープロファイルに追加する」という項目があるので有効にしてやればよいのですが、ではフォルダリダイレクトではどうするかというのが主題。
フォルダリダイレクトは「ドキュメント」「ピクチャ」「ミュージック」のように各フォルダごとに設定していきますが、設定項目の「ユーザーに<対象フォルダ>に対して排他的な権限を与える」に既定でチェックが入っています。
これにチェックが入っていると自動作成されるフォルダは管理者にもアクセスできなくなりますが、チェックを外すと上位のフォルダのアクセス権を継承するようになります。
ただし、フォルダリダイレクト用の共有フォルダは利用ユーザー全員がアクセスできるようにするはずなので、そのまま継承すると個人用フォルダも全員がアクセスできるようになってしまいます。
ではどうするかというと、共有フォルダの配下に個人ユーザー用のフォルダを手動で作成し、そこのアクセス権を個人ユーザーと管理ユーザーに設定します。
このとき共有フォルダに付与する一般ユーザーのアクセス権は継承しないようにしておきます。
そうすることで、その後にポリシーで自動作成されるフォルダにも継承されて個人ユーザーと管理ユーザーだけがアクセスできるようになります。
内容としては以上なのですが、手動作成する個人フォルダをユーザー追加の度に手作業でやるのは現実的ではないので、スクリプト等を作っておくのが一般的だと思います、
下記のサンプルスクリプトは指定したセキュリティグループのメンバー用に個人フォルダを作成し、個別のアクセス権を付与します。
<#
フォルダリダイレクト用フォルダの作成
#>
# Parameters
$DomainBios = "DOMAIN"
$TargetGroup = "Domain Users"
$RootFolder = "\\127.0.0.1\Shared"
# Main Routine
$GroupUsers = Get-ADGroupMember -Identity $TargetGroup -Recursive
$Folders = Get-ChildItem -Path $RootFolder
foreach ($DomainUser in $GroupUsers) {
$Stat = $true
foreach ($UserFolder in $Folders) {
if ($DomainUser.SamAccountName -ieq $UserFolder.Name) {
Write-Output "`"$UserFolder`" is already exist."
$Stat = $false
}
}
if ($Stat) {
$UserPath = $RootFolder + "\" + $DomainUser.SamAccountName
$AllowUser = $DomainBios + "\" + $DomainUser.SamAccountName
$UserRuleSet = (
$AllowUser,
[System.Security.AccessControl.FileSystemRights]::Modify,
([System.Security.AccessControl.InheritanceFlags]::ObjectInherit -bor [System.Security.AccessControl.InheritanceFlags]::ContainerInherit),
[System.Security.AccessControl.PropagationFlags]::None,
[System.Security.AccessControl.AccessControlType]::Allow
)
$UserAcl = New-Object System.Security.AccessControl.FileSystemAccessRule $UserRuleSet
Write-Output "Create Folder : `"$UserPath`""
New-Item -Path $UserPath -ItemType Directory
$FolderAcl = Get-Acl $UserPath
$FolderAcl.SetAccessRule($UserAcl)
$FolderAcl | Set-Acl $UserPath
}
}
exit
ある程度必要な要素だけ入れると、こんなところでしょうかね。