Windows Server 2022单用户可见专属文件共享配置求助
Windows Server 2022 用户专属共享文件夹配置问题解答
问题描述
我希望在Windows Server 2022中为每位用户创建专属文件共享,要求用户访问\\server时仅能看到自己的共享文件夹(如user1仅可见user1共享,无法看到user2、user3的共享)。我尝试使用以下PowerShell脚本实现,但所有用户仍能看到全部共享,请问该需求是否可行?
注:抱歉我的英语并非母语。
附尝试的PowerShell脚本:
$Roofolder = "H:\homedirs" $Subfolders = Get-ChildItem -Path $Roofolder foreach($Subfolder in $Subfolders){ $User = Get-Acl -Path $Subfolder.fullname | Select -ExpandProperty Owner New-SmbShare -Name $Subfolder.Name -Path $Subfolder.fullname -FullAccess $User -FolderEnumerationMode AccessBased }
解决方案
这个需求完全可行,你的脚本核心逻辑方向正确,但忽略了两个关键配置环节,导致所有用户能看到全部共享:
1. 根目录NTFS权限未限制普通用户访问
用户能看到所有共享,大概率是因为H:\homedirs根目录对普通用户(比如Authenticated Users组)开放了列出文件夹内容或读取权限。必须修改根目录权限:
- 移除所有普通用户/用户组的
列出文件夹内容、读取权限 - 仅保留
BUILTIN\Administrators组的完全控制权限
2. 子文件夹权限需严格锁定给所有者
即使共享配置了AccessBased枚举,如果子文件夹本身对其他用户有访问权限,枚举规则仍会失效。需确保每个子文件夹仅所有者有完全控制权限,其他用户无任何权限。
修正后的完整脚本
以下脚本会先配置根目录权限,再逐个处理子文件夹的NTFS权限和共享设置:
$Roofolder = "H:\homedirs" # 配置根目录权限:仅管理员拥有完全控制,普通用户无访问权限 $rootAcl = Get-Acl -Path $Roofolder $rootAcl.SetAccessRuleProtection($true, $false) # 禁用继承并清除现有继承权限 $adminAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( "BUILTIN\Administrators", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" ) $rootAcl.AddAccessRule($adminAccessRule) Set-Acl -Path $Roofolder -AclObject $rootAcl # 遍历子文件夹配置专属共享 $Subfolders = Get-ChildItem -Path $Roofolder -Directory foreach($Subfolder in $Subfolders){ $UserOwner = (Get-Acl -Path $Subfolder.FullName).Owner # 配置子文件夹NTFS权限:仅所有者拥有完全控制 $folderAcl = Get-Acl -Path $Subfolder.FullName $folderAcl.SetAccessRuleProtection($true, $false) # 禁用继承并清除现有继承权限 $userAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( $UserOwner, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" ) $folderAcl.AddAccessRule($userAccessRule) Set-Acl -Path $Subfolder.FullName -AclObject $folderAcl # 创建共享并启用基于权限的枚举 New-SmbShare -Name $Subfolder.Name -Path $Subfolder.FullName -FullAccess $UserOwner -FolderEnumerationMode AccessBased -Force }
验证步骤
- 使用普通用户账号登录客户端,访问
\\server,确认仅能看到自己的共享文件夹 - 打开服务器的
计算机管理→共享文件夹→共享,右键目标共享→属性→权限,确认仅目标用户有访问权限 - 右键子文件夹→
属性→安全,确认仅所有者和管理员有权限
内容的提问来源于stack exchange,提问作者slevign
相关产品推荐
相关产品推荐

