我可以在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授予写访问权限,“每个人”实际上也可能没有写访问权限。
关于powershell - 使用Powershell查找世界可写文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53779883/