根据安全权限设置共享中所有文件夹的共享权限

Posted

技术标签:

【中文标题】根据安全权限设置共享中所有文件夹的共享权限【英文标题】:Set Share Permissions of all folders in a share based on Security Permissions 【发布时间】:2017-04-05 22:07:39 【问题描述】:

所以这可能有点复杂.... 我创建了一个脚本,该脚本生成对共享具有安全权限的所有人员的列表。问题是共享的共享权限将不同于安全权限。我想删除所有共享权限并将共享权限设置为具有与安全权限相同的完全控制权的同一个人。

我需要在四个不同的服务器上运行它,所以我需要一个脚本来改变它。有什么想法或资源吗?


编辑:与我的同事讨论后,目标略有改变。现在我想使用Set-Acl 基本上取消所有用户的完全控制权,除了一个特定的组。这应该不会太难吧?如果用户不在特定组中,我会简单地为每个共享抛出一个 - 对于每个用户 - 如果用户不在特定组中,则设置 acl 以删除完全控制。

如何删除权限?我看到了用于设置 FC 的命令,但没有看到用于删除的命令。

【问题讨论】:

将共享权限设置为Everyone:FullControl 并仅使用文件系统权限进行访问控制。无论如何,它们允许更细粒度的控制。如果有的话,请在共享上启用基于访问权限的枚举,以便人们只能看到他们实际有权访问的文件/文件夹。 get-acl 和 set-acl 的一些主要错误仍然存​​在于更高版本的 PowerShell 中,但这是可能的。今晚晚些时候我会尽力回复! 嗨@RichardDakin,所以在与我的同事讨论后,目标略有改变。现在我想使用 set-acl 基本上从除一个特定组之外的所有用户中删除完全控制权。这应该不会太难吧?我会简单地为每个共享抛出一个 - 对于每个用户 - 如果用户不在特定组中然后设置 acl 以删除完全控制....如何删除权限?我看到了用于设置 FC 但没有用于删除的命令。 “删除除一组用户之外的所有用户的完全控制权”是什么意思?您想完全删除所有这些用户的访问权限吗?仅适用于具有完全访问权限的人?仅删除完全访问权限(如果是,应保留哪些权限)? 【参考方案1】:

根据您的回复,这种方式消除了 GET-ACL 和 SET-ACL 中的所有错误,因此可以在早期版本的 PowerShell 中使用。删除后,您可以更改它(参考 $PERM)以添加回您想要保留访问权限的组。如果您需要调整,请告诉我。

 $folderpath = "Somefolderpath"

 write-Output "Removing inheritance " 
 $acl = Get-Acl $Folderpath
 $acl.SetAccessRuleProtection($True, $True)
 $acl | Set-Acl
 $acl = Get-Acl $Folderpath
 $acl.Access |where $_.IdentityReference -eq "NT AUTHORITY\Authenticated 
 Users" |%$acl.RemoveAccessRule($_)
 $acl | Set-Acl

If ($?)
Write-Output "Inheritance Removed"
 
write-Output "Set permissions" 
$acl = Get-Acl $Folderpath
$perm = "AddGroupHere","FullControl","Allow"
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule 
$perm
$acl.AddAccessRule($accessRule)
$acl | Set-Acl

If ($?)
 Write-Output "ACL set"
 

【讨论】:

对不起,我以前从未写过PS。如果我想对共享中的每个文件夹执行此操作,我将如何将其包装在 foreach 中? [cmdletbinding()] 参数([Parameter(ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]$Computer = '.') $shares = gwmi -Class win32_share -ComputerName $computer | select -ExpandProperty Name foreach ($share in $shares) try $share1="SERVER PATH" + $share if(Test-Path $share1) #write-host $share1 write-output $share get-acl $share1 | % $_.访问 | ft -property IdentityReference, AccessControlType, FileSystemRights else throw $share catch write-output "STRING HERE" 抱歉缺少格式 - 这是我目前用于收集每个共享上所有登录名的名称。为了安全起见,我删除了 SERVERPATH 和 STRING HERE。 尝试仅在一个测试文件夹上使用得到两个错误“new-object : a constructor was not found. cannot find an appropriate constructor for type” 其他错误:使用“1”参数调用“AddAccessRule”的异常:“值不能为空”

以上是关于根据安全权限设置共享中所有文件夹的共享权限的主要内容,如果未能解决你的问题,请参考以下文章

共享文件夹的共享权限和NTFS安全权限有啥区别?哪个权限比较大?用户两个权限都要设置吗?

windows7 共享文件夹 访问权限

windows server网络共享权限设置

NTFS权限和共享权限有何区别?

win8.1权限设置步骤

Win7系统无法访问共享文件夹提示权限不足怎么办