![Azure 文件共享中的文件只能在 Windows 10 上的一个特定配置文件上以只读方式打开 - (具有基于域的身份验证的 DFS-N)](https://linux22.com/image/792193/Azure%20%E6%96%87%E4%BB%B6%E5%85%B1%E4%BA%AB%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%8F%AA%E8%83%BD%E5%9C%A8%20Windows%2010%20%E4%B8%8A%E7%9A%84%E4%B8%80%E4%B8%AA%E7%89%B9%E5%AE%9A%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BB%A5%E5%8F%AA%E8%AF%BB%E6%96%B9%E5%BC%8F%E6%89%93%E5%BC%80%20-%20%EF%BC%88%E5%85%B7%E6%9C%89%E5%9F%BA%E4%BA%8E%E5%9F%9F%E7%9A%84%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E7%9A%84%20DFS-N%EF%BC%89.png)
[我将首先解释如何设置环境] 对于文件共享,我们使用 DFS-N 映射,EX- \\Domain.local\Storageaccount
。此映射由 Windows Server 2012 R2 服务器上的 DFS-N 角色托管。
在 DFS-N 服务器上,我正在处理的文件夹实际上位于 Azure 上,例如 - \\Domain.local\Storageaccount\FolderA\SubforbderB
--> 此文件夹有一个指向的目标\\storageaccount.file.core.windows.net
。
有一个通往 Azure 的隧道。身份验证是基于域的身份验证。因此,用户\\Domain.local\Storageaccount\
使用域 AD 身份验证访问并将 Kerberos 票证返回到 Azure 文件并针对 Azure 进行身份验证。
现在奇怪的是,我确实有一个解决方法,即直接将此文件夹映射到 Azure 文件共享路径而不是 AD 路径\\storageaccount.file.core.windows.net\FolderA\SubforbderB
- 这工作得很好,用户可以打开具有读写访问权限的文件。这意味着问题出在 AD 身份验证上。此问题不会发生在任何其他文件夹中,这些文件夹以相同的方式设置但没有继承,其他用户没有此问题。
[现在我来解释一下这个问题]
目前我们有一个文件夹\\Domain.local\Storageaccount\FolderA\SubforbderB - SubforbderB
- 此文件夹的继承已关闭。我们正在明确分配权限。UserA 在访问\\Domain.local\Storageaccount\FolderA\SubforbderB
文件夹内的文件时遇到问题,他打开的文件以只读方式打开。UserA 拥有 NTFS 和 IAM RBAC 角色的完全控制权。我确实在另一台计算机上测试了 UserA 帐户,并确认该帐户确实具有读写访问权限。我在同一台 Windows 10 计算机上的不同用户配置文件上测试了具有与 UserA 相同访问权限的 UserB 帐户,并且 UserB 可以以读写方式访问文件。这向我证明问题出在 Windows 10 计算机上的当前用户配置文件上。
我们知道,我们可以在 Windows 计算机上重新创建配置文件并备份和恢复数据,这个问题就会得到解决。但是,用户有很多自定义的用户特定配置,很难转移到新的配置文件。
我们与 Microsoft Azure 团队和 Windows 团队合作,但他们除了重新创建配置文件外没有提供任何其他解决方案。
我希望你们中有人曾经遇到过这个问题并解决了它。
以下是我们尝试过的操作:清除凭据管理器、重新加入域、SFC、DISM 扫描、Windows 更新、查找任何文件资源管理器映射特定的注册表,然后清除这些注册表。
除了重新创建 Windows 用户配置文件之外,您还有其他建议吗?
答案1
我们在此位置有一个本地 DC,不知何故我们停用了这个 DC,现在客户端直接与 Azure 中的 DC 进行身份验证。我使用“访问密钥”重新应用了 NTFS 权限。现在一切都按预期运行
答案2
您可能需要分配存储文件数据共享贡献者 Azure RBAC 角色,或具有以下数据操作的自定义角色。如下所示,对于写入
Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write
{
"assignableScopes": [
"/"
],
"description": "Allows for read, write, and delete access in Azure Storage file shares over SMB",
"id": "/providers/Microsoft.Authorization/roleDefinitions/0c867c2a-1d8c-454a-a3db-ab2ea1bdc8bb",
"name": "0c867c2a-1d8c-454a-a3db-ab2ea1bdc8bb",
"permissions": [
{
"actions": [],
"notActions": [],
"dataActions": [
"Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read",
"Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write",
"Microsoft.Storage/storageAccounts/fileServices/fileshares/files/delete"
],
"notDataActions": []
}
],
"roleName": "Storage File Data SMB Share Contributor",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
顺便说一句,对于用户配置文件共享,我推荐 FSLogix。FSLogix 利用配置文件容器来封装用户配置文件。这些容器动态附加到用户会话,使用户能够在不同的会话中获得一致的体验。配置文件容器存储用户特定的数据、配置和设置,从而减少登录时间并提高性能。
PowerShell 获取 acl
# Specify the path to the file or folder
$path = "C:\Path\To\Your\FileOrFolder"
# Get the NTFS ACL
$ntfsAcl = Get-Acl -Path $path
# Display the NTFS ACL
Write-Host "NTFS ACL:"
$ntfsAcl | Format-List