我必须在远程 Windows 服务器上存档(= 移动到“存档”子文件夹并设置只读标志)一组远程目录,并保留 ACL。这些目录具有不同的访问权限,一些从父文件夹继承,一些则不是。移动的目录保留其访问权限是至关重要的(例如,某些目录可能只有管理员可以访问,并且必须保持这种状态)。
我对目录属性中的“只读”标志进行了一些尝试,它似乎部分满足了我的要求——设置之后,我仍然能够在 RO 目录中创建一个新文件,我想阻止它。
然而,最大的问题是在不破坏 ACL 的情况下移动目录。
有人能帮我解决上述问题吗?
提前谢谢您!
R.
答案1
我建议首先使用 备份当前 ACL icacls /save
,以便在出现问题时能够从头icacls /restore
开始重新启动。
权限仅从直接父目录继承(或重新继承),而不是从所有父目录一起继承。因此,禁用最顶层目录本身的继承(使权限静态)就足够了,例如使用
icacls my_2008_project /inheritance:d
这会将当前继承的 ACE 转换为静态 ACE,因此无论目录移动到哪里,生成的 ACL 都不会改变 - 因此其文件和子目录继承的 ACL 也不会改变。
(实际上,仅仅移动物品无论如何都不会自动调整继承的权限,但上述步骤确保这种情况不会意外发生。)
为了防止写入,您还必须使用 ACL。(“只读”属性仅适用于文件 - 对于目录则完全忽略。)最简单的方法是添加“拒绝”ACE:
icacls my_2008_project /t /deny Everyone:W
这会将 ACE 单独添加到每个项目中(因为您提到其中一些项目已禁用可继承权限)。
常规的可继承版本是:
icacls my_2008_project /deny Everyone:(OI)(CI)W