我想替换文件夹的权限。首先我这样做:
icacls folder /grant user:(oi)(ci)f
然后我想将权限和继承更改为:
icacls folder /grant:r user:(oi)(io)rx
此后,用户的权限仍然存在(oi)(ci)f
。
为什么权限没有被替换?
使用 setacl 替换权限和继承可以按预期工作:
setacl -on folder -ot file -actn ace -ace
"n:user;p:read_ex;i:io,so;m:set;w:dacl"
谢谢你的回答。但是,这是设计使然吗?还是这是一个错误?如果这是唯一可以确保替换权限(和继承)的方法,那么“:r”开关有什么用呢?
icacls folder /remove user
icacls folder /grant user:(oi)(io)rx
我一直在测试“icacls /grant”的工作原理,我发现 icacls 为每种类型的继承都写了一个条目。
尝试这个:
md test
icacls test /inheritance:r
icacls test /grant user:f
icacls test /grant:r user:(oi)rx
icacls test /grant:r user:(ci)rx
icacls test /grant:r user:(oi)(ci)rx
icacls test /grant:r user:(ci)(oi)(io)rx
icacls test /grant:r user:(io)(oi)rx
icacls test /grant:r user:(io)(ci)rx
然后查看ACL:
icacls test
结果是:
test PC\user:(F)
PC\user:(OI)(IO)(RX)
PC\user:(OI)(RX)
PC\user:(CI)(IO)(RX)
PC\user:(CI)(RX)
PC\user:(OI)(CI)(IO)(RX)
PC\user:(OI)(CI)(RX)
因此我发现icacls /grant:r
只针对同一类型的继承替换权限。在我最初的问题中:
md test
icacls test /inheritance:r
icacls test /grant user:(oi)(ci)f
icacls test /grant:r user:(oi)(io)rx
icacls 测试给出输出
test PC\user:(OI)(IO)(RX)
PC\user:(OI)(CI)(F)
我认为 GUI 仅显示 (OI)(CI)(F) 因为它包含 (OI)(IO)(RX)
我是不是漏掉了什么?这是 bug 还是故意设计的?
答案1
您的第一个命令授予对“此文件夹、子文件夹和文件”的完全访问权限。
该权限不会被授予读取和执行权限的第二个命令所取代仅限文件由于使用了对象继承组合(OI)(IO)
。显然你不能代替适用于“此文件夹、子文件夹和文件”的权限以及仅适用于文件的权限。
要将“此文件夹、子文件夹和文件”的完全访问权限替换为读取和执行权限,请在第二个命令中使用相同的对象继承:
icacls folder /grant:r user:(oi)(ci)rx