1、Powshell命令操作ACL规则实现不同账户对应用的访问控制
查看目录权限:Get-ACL -Path "C:\Program Files (x86)\Tencent\QQ\Bin"
输出易读模式:(Get-ACL -Path "C:\Program Files (x86)\Tencent\QQ\Bin").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -AutoSize
2、新增文件权限步骤:
1、检索已存在的ACL规则
2、创建需要应用的目标规则,FileSystemAccessRule语法结构类似:Identity String,FileSystemRights,AccessControlType
3、添加新的ACL规则到已存在的规则集
4、使用Set-ACL将前面新建的ACL规则应用到目标文件或目录
3、对应命令如下:
$ACL = Get-ACL -Path "C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("AAAD\test","FullControl","Deny")
$ACL.AddAccessRule($AccessRule)
##########$ACL.SetAccessRule($AccessRule)
$ACL | Set-Acl -Path "C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
复制权限到新的对象上去,将文件test1上面的访问权限复制到文件Test2上
Get-ACL -Path "Test1.txt" | Set-ACL -Path "Test2.txt"
可能有些新建规则命令有点不一样,会多些参数:
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("WIN-HOSTNAME\zyc", "Read,Write", "ContainerInherit, ObjectInherit", "None", "Allow")
4、移除文件或目录的访问权限
要移除文件或目录的某个访问权限,需要通过与修改权限同样的步骤,但是用的对象方法不一样(前者使用$ACL.SetAccessRule(),而后者使用$ACL.RemoveAccessRule()
对应命令如下:
$ACL = Get-ACL -Path "C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("AAAD\test","FullControl","Deny")
$ACL.RemoveAccessRule($AccessRule)
$ACL | Set-Acl -Path "C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("yangguodong","FullControl","ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($rule)
可以通过列表的方式显示所有信息,输入命令 get-acl D:\testacl |fl
5、示例
C:\PS>$newACL = get-acl file0.txt
C:\PS>get-childitem c:\temp -recurse -include *.txt -force | set-acl -aclobject $newacl
6、说明
这些命令将 File0.txt 文件中的安全描述符应用到 C:\Temp 目录及其所有子目录中的所有文本文件。
第一个命令获取当前目录中 File0.txt 文件的安全描述符,并使用赋值运算符 (=) 将其存储在 $newACL 变量中。
管道中的第一个命令使用 Get-ChildItem cmdlet 获取 C:\Temp 目录中的所有文本文件。Recurse 参数将该命令扩展到 C:\temp
的所有子目录。Include 参数将检索的文件限制为具有“.txt”文件扩展名的文件。Force 参数获取本来会被排除的隐藏文件。(
无法使用“c:\temp*.txt”,因为 Recurse 参数作用于目录,而不是文件。)
管道运算符 (|) 将表示检索到的文件的对象发送到 Set-Acl 命令,该命令将 AclObject 参数中的安全描述符应用到管道中的所有
文件。
实际上,最好将 Whatif 参数与可以影响多个资源的所有 Set-Acl 命令一起使用。在此示例中,管道中的第二个命令将为“set-ac
l -aclobject $newacl -whatif”。此命令列出将受该命令影响的文件。在检索结果之后,可以不带 Whatif 参数再次运行该命令。
文章评论