You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
}

验证步骤

  1. 使用普通用户账号登录客户端,访问\\server,确认仅能看到自己的共享文件夹
  2. 打开服务器的计算机管理→共享文件夹→共享,右键目标共享→属性→权限,确认仅目标用户有访问权限
  3. 右键子文件夹→属性→安全,确认仅所有者和管理员有权限

内容的提问来源于stack exchange,提问作者slevign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:22:49