icacls Deny删除所有人不工作

时间:2014-09-09 13:00:23

标签: batch-file windows-8 permissions cacls icacls

我试图拒绝所有用户删除文件。我希望任何用户能够阅读或执行该文件,但不能修改或删除它。但是,在我通过命令提示符使用以下代码后,首先没有人可以访问该文件!

icacls pic.jpg /deny Everyone:(D)

我尝试过授予某些权限并拒绝其他人无效的变体。如何实现这一点(在Windows 7/8上)?

2 个答案:

答案 0 :(得分:1)

要保护文件,您必须使用:

icacls pic.jpg /deny Everyone:(DE)

保护文件夹的内容使用:

icacls pics /deny Everyone:(OI)(CI)(DE,DC)

如果您想授予删除文件的权利,则D是不同访问权限的组合。

要使此语言独立,请使用*S-1-1-0代替Everyone


(OI) =对象继承 (CI) =容器继承

答案 1 :(得分:1)

要防止删除文件,您需要拒绝文件的删除权限并拒绝删除子项权限(又名“删除子文件夹”和包含文件夹上的文件“)。两者都不得被允许以真正防止删除。

换句话说,如果授予了其中一个或两个权限,Windows允许删除文件。

所以,假设您要保护foo \ bar.txt不被删除,至少应该:

icacls foo\bar.txt /deny Everyone:(DE) *S-1-5-7:(DC)
icacls foo /deny Everyone:(DC) *S-1-5-7:(DC)

请注意,我在拒绝列表中包含S-1-5-7(ANONYMOUS LOGON),因为anonymous logon is not included in Everyone group since Windows XP,最好明确拒绝匿名登录。

编辑:注意icacls中的(D)许可与(DE)不同。前者包括Synchronize权限,而后者仅包含Delete权限。如果您拒绝同步,则可能无法访问该文件夹(浏览或CDDIR)。

警告:icacls有一个错误,即(DE)单独拒绝的文件在查询时将显示为(DENY)(D)而不是(DENY)(DE)。在2 3中报告。如上所述(D)和(DE)  是不同的。