powershell - 使用 powershell 查找全局可写文件
问题描述
我可以在我的 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' }
}
您可以扩展检查以实际检测允许对“Everyone”进行写访问的 ACE(上面将检测到“Everyone”的任何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 授予写访问权限,“每个人”也可能实际上具有写访问权限,也可能没有。
- ALLOW ACE without DENY ACE ⇒ 允许访问(显然)
- 没有 ALLOW ACE 的 DENY ACE ⇒ 拒绝访问(显然)
- 继承 ALLOW ACE 和继承 DENY ACE ⇒ 拒绝访问
- 显式 ALLOW ACE 和继承的 DENY ACE ⇒ 允许访问
- 继承 ALLOW ACE 和显式 DENY ACE ⇒ 拒绝访问
- 显式 ALLOW ACE 和显式 DENY ACE ⇒ 拒绝访问
推荐阅读
- javascript - 在反应中手动设置初始值后无法更改输入字段的值
- python-3.x - 从 Vscode 中的另一个 python 文件导入一个类
- javascript - TypeScript with React - 试图从 React 类型中定义的 HTMLProps 中省略一个属性
- python - Python:Rosalind 共识和简介
- python - 用Python中的一个对象替换数组中的空对象
- javascript - 如何使有角度的子组件呈现在其他所有内容之上
- javascript - activeBackgroundColor 在 DrawerItem ReactNavigation v5 中不起作用
- reactjs - 反应引导元素不居中
- python-3.x - Python/Selenium - 如何解析 URL 并单击下一页?
- javascript - 如何比较两个字符串日期时间?