我有一台 2012R2 文件服务器 ( server-docs
) 和一台 2012R2 Citrix XenApp/RDS 服务器 ( server-rds
)。用户必须是 的成员UsersRDS
才能登录server-rds
。
以下是我的文档重定向的 GPO 设置:
- 基本:将每个人的文件夹重定向到同一位置
- 在根路径下为每个用户创建一个文件夹
- 根文件夹 :
\\server-docs\UserDocs
- 独家权利不受制约
我按照 MS 的这篇文章来设置根文件夹的权限:https://technet.microsoft.com/en-us/library/cc737633%28v=WS.10%29.aspx
- 所有者:完全控制,仅限子文件夹和文件
UsersRDS
:列出文件夹/读取数据、创建文件夹/附加数据 - 仅限此文件夹- 管理员:完全控制
- 系统:完全控制,此文件夹,子文件夹和文件
server-rds
当我使用登录时TestUser
,会发生文件夹重定向,并且我得到一个文件夹\\server-docs\UserDocs\TestUser\Documents
。
TestUser
及其子文件夹Documents
具有相同的权限:
- 所有者:完全控制,仅限子文件夹和文件
UsersRDS
:列出文件夹/读取数据、创建文件夹/附加数据 - 仅限此文件夹- 管理员:完全控制
- 系统:完全控制,此文件夹,子文件夹和文件
TestUser
:完全控制,仅限此文件夹
我有另一台 2003 文件服务器和一台 2003 RDS 服务器,具有相同的根文件夹权限,我在用户文档文件夹中只拥有以下权限:
- 管理员:完全控制
TestUser
: 完全控制
如果我检查Grant the user exclusive Rights on Document folder
GPO,运行gpupdate /force
,server-rds
在server-rds
登录时无法执行文件夹重定向,并且我得到事件 ID 1085:Windows failed to apply folder redirection settings.
我如何禁用用户文档的继承以获取相同的权限(如我的 2003 服务器)?
答案1
由于奇怪的 ACL 似乎是设计使然,因此我必须在用户登录期间使用 Powershell 脚本检查并根据需要更改它们:
Function Repair-UserFullControlACL {
Param(
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType "Container"})]
[string]$Folder
)
# We also add System account and local administrators (Replace these french account names if needed)
$OtherAccounts = @("AUTORITE NT\Système", "BUILTIN\Administrateurs", "CREATEUR PROPRIETAIRE")
# `FullControl` for the user
$ACLUser = New-Object System.Security.Principal.NTAccount($FullUserName)
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ACLUser, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
# We need the actual folder ACL
$Acl = Get-ACL $Folder
# Checking if everything already OK...
$RuleOK = $False
ForEach ($ACLRule in $Acl.Access){
If (-not(Compare-Object ($Rule | Format-List * | Out-String -Stream) ($ACLRule | Format-List * | Out-String -Stream))){
$RuleOK = $True
break
}
}
# Adding fullControl if needed
If (-not($RuleOK)){
Try{
$Acl.AddAccessRule($Rule)
ForEach ($Account in $OtherAccounts){
$ACLAccount = New-Object System.Security.Principal.NTAccount($Account)
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ACLAccount, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.AddAccessRule($Rule)
}
# Saving ACL
Set-ACL $Folder $Acl -ErrorAction Stop
}catch{
Write-Warning "Erreur : Impossible d'accorder le droit 'FullControl' à l'utilisateur sur $Folder : $($_.Exception.Message)"
}
}}
例子 :
Repair-UserFullControlACL "\\server\shared\userHomeDir"