我有一个通过 CIFS 从 Windows 7“服务器”共享的目录。没有域:只有简单的工作组。
我的客户通过 LAN 使用服务器上的“标准用户”(无“管理员”)帐户访问此目录。他们将此共享用作“个人存储”,因此他们需要对其中的所有内容进行完全创建/编辑/删除。
问题是:我在服务器端在那里创建了一个目录。此单个项目不应以任何方式可编辑,仅可读/可浏览/可列出(让我们关注目录本身,而不是其中的文件(有时没有))。
我正在使用 NTFS 权限:我从不能删除的目录中删除了继承,因此我可以处理其权限。
我删除了客户帐户,目前只有系统、管理员和我本人拥有其权限。目前,客户既不能删除也不能打开该文件夹。
如果我添加拒绝“完全控制”规则,则不会发生任何变化(如预期的那样)。
但如果我修改该规则并仅允许“列出文件夹/读取数据”,同时将所有其他规则保留为拒绝……用户可以删除该文件夹!?!?!?
这怎么可能?我误解了什么?
注意:我用单个文件而不是目录仔细检查:同样的问题!
这是 Icacls 的输出:
不得删除 NT AUTHORITY\SYSTEM:(OI)(CI)(F) muletto\Zane:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) muletto\myNetworkUser:(OI)(CI)(RX)
成功处理 1 个文件;处理 0 个文件失败
答案1
好的。我可以确认,如果用户对父目录具有 Delete Child 访问权限,则可以删除文件(或删除空目录),而无需对该文件/目录具有写访问权限。如果我之前知道这一点,我已经忘记了,但这是有记录的行为,例如,请参阅KB101651。
至少有三种方法可以解决您的问题:
授予用户对父目录的修改权限,而不是完全控制权限。完全控制和修改权限之间的唯一区别是删除子权限(允许用户删除子对象)和写入 DAC 权限(允许用户更改对象的权限,即使他们不是所有者)。
将共享上的权限设置为“修改”而不是“完全”。这应该具有相同的效果,但只会影响网络用户,而不会影响交互用户。一个副作用是用户无法更改权限,即使是他们自己的文件。
在子文件/目录上设置只读标志。文档中没有明确说明这一点,但我的测试(Windows 7)表明,Delete Child 不允许您删除设置了只读标志的文件或删除目录。它也不允许您重置只读标志。请注意,Explorer GUI 暗示只读标志对目录没有影响;实际上,它阻止删除目录。(它不会阻止将新文件写入目录。) 附录:只读标志不会阻止目录被移动。
其他说明:
您可以明确拒绝对父目录的删除子项权限,但如果用户对父目录具有完全控制权,他们可以删除拒绝条目。
在父目录中拥有“删除子目录”权限不允许用户从子目录中删除文件或删除子目录,除非子目录为空。 附录:它确实允许用户移动子目录。