我可以在Win10机器上使用此命令来发现每个人都可写的文件(在当前目录层次结构内):

get-childitem -recurse | get-acl | out-string -stream | select-string -pattern "everyone"

效果很好,但在Win7机器上,out-string -stream似乎会截断select-string失败的输出。

有没有办法在Win7上找到文件?

最佳答案

检查适当的属性,而不是将Get-Acl输出转换为字符串。这适用于所有Windows版本:

Get-ChildItem -Recurse -Force | Where-Object {
    $acl = Get-Acl $_.FullName
    $acl.Access | Where-Object { $_.IdentityReference -eq 'Everyone' }
}

您可以展开检查以实际检测到允许对“每个人”进行写访问的ACE(上面的代码将检测到“每个人”的任何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授予写访问权限,“每个人”实际上也可能没有写访问权限。
  • 没有拒绝ACE的ALLOW ACE⇒允许访问(显然)
  • 没有ALLOW ACE的DENY ACE⇒访问被拒绝(显然)
  • 继承了ALLOW ACE并继承了DENY ACE⇒访问被拒绝
  • 显式ALLOW ACE和继承的DENY ACE⇒允许访问
  • 继承了ALLOW ACE和显式DENY ACE⇒访问被拒绝
  • 显式ALLOW ACE和显式DENY ACE⇒访问被拒绝
  • 关于powershell - 使用Powershell查找世界可写文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53779883/

    10-13 07:52