我看到我可以使用它icacls
来查找与 SID 匹配的所有文件,但是如何查找 SYSTEM 用户无权访问的所有文件?
ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
finds all matching names that contain an ACL
explicitly mentioning Sid.
答案1
我还没有进行大量测试,但以下 PowerShell 脚本应该可以工作:
param([string]$path)
get-childitem $path -recurse | Foreach {
$file=$_;get-acl $($_.FullName)} | Foreach {
[bool]$SystemHasAccess = $false
$_.GetAccessRules($True,$True,[Security.Principal.SecurityIdentifier]) | Foreach {
if ($_.IdentityReference -eq "S-1-5-18") { $SystemHasAccess = $true } # system sid
if ($_.IdentityReference -eq "S-1-1-0") { $SystemHasAccess = $true } # everyone sid
}
if ($SystemHasAccess -eq $false)
{
write-host "System has no access to $($file.FullName)"
}
}
将代码复制到文件中,例如“FindFilesWithoutSystemAccess.ps1”,然后通过提供要搜索的路径来调用它:
FindFilesWithoutSystemAccess.ps1 -path C:\
该脚本循环遍历路径下的所有文件,包括子目录中的所有文件。对于每个文件,它会循环遍历文件访问控制列表中的所有访问控制条目。如果它们均不符合系统的内部 sid(S-1-5-18),它会打印出文件的全名。
有可能某个文件有一个针对系统的 ACE,但它是一个拒绝 ACE,这意味着上面的脚本无法捕获该文件,系统仍然无法访问它。不过这种情况不太可能发生,您可以使用类似的脚本来查找此类文件。