我正在尝试设置文件权限,以便来自两个 Windows 安装的用户可以从共享 NTFS 硬盘访问某些文件,而无需授予“所有人”权限。
在安装中,我可以获取其本地用户的权限,但是无法通过 SID 向其他用户授予权限:
icacls * /grant *S-1-5-21-3699620855-3856482933-2467390241-1001:R /T *S-1-5-21-3699620855-3856482933-2467390241-1001: 未完成帐户名和安全 ID 之间的映射。
显然,Windows 必须以某种方式记录 SID。有没有办法强制它向“外部”SID 授予权限?
答案1
我能够找到这个 powershell 函数,它声称可以完成你想要的操作:
function SetNTFSPermissionsBySid([string]$directory, [System.DirectoryServices.DirectoryEntry]$objAD)
{
# Convert byte array sid to sid string
$sID = New-Object System.Security.Principal.SecurityIdentifier $objAD.objectsid[0],0
# Inheritance This Folder, Subfolders and Files)
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagation = [system.security.accesscontrol.PropagationFlags]"None"
# Retrieve the ACL
$aCL = Get-Acl $directory
# Create Ace
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($sID, "Modify", $inherit, $propagation, "Allow")
# Add Ace to Acl
$aCL.AddAccessRule($accessrule)
# Set Acl to the directory
Set-Acl -aclobject $aCL -path $directory
}
所有功劳归于在 PowerShell 中通过 SID 设置 NTFS 权限作者:Remko Weijnen。
由于使用Get-Acl
和,因此需要 PowerShell 3.0+ Set-Acl
。