我可以在Win10机器上使用此命令来发现每个人都可写的文件(在当前目录层次结构内):
get-childitem -recurse | get-acl | out-string -stream | select-string -pattern "everyone"
那很好,但是在我的Win7机器上,out-string -stream
似乎截断了select-string
的输出。
是否可以在Win7上找到文件?
答案 0 :(得分:2)
如何?
Get-ChildItem -Recurse |
Get-Acl |
Where-Object { $_.AccessToString -match 'everyone' } |
Select-Object Path, Owner, @{Name='Access'; Expression={$_.AccessToString}} |
Format-List
(您可以将它写成单行,但是为了便于阅读。)
答案 1 :(得分:2)
检查适当的属性,而不是将Get-Acl
输出转换为字符串。这适用于所有Windows版本:
Get-ChildItem -Recurse -Force | Where-Object {
$acl = Get-Acl $_.FullName
$acl.Access | Where-Object { $_.IdentityReference -eq 'Everyone' }
}
您可以展开检查,以实际检测到允许对“每个人”进行写访问的ACE(上面的代码将为“每个人”检测到 any ACE):
Get-ChildItem -Recurse -Force | Where-Object {
$acl = Get-Acl $_.FullName
$acl.Access | Where-Object {
$_.IdentityReference -eq 'Everyone' -and
$_.AccessControlType -eq 'Allow' -and
$_.FileSystemRights -band 278
}
}
但是请注意,DENY ACL优先于ALLOW ACL,显式ACL优先于继承的ACL,因此即使有ACE授予写访问权限,“每个人”实际上也可能没有写访问权限。