none
icacls发现的另一个bug RRS feed

  • 问题

  • 首先,在非C盘新建一个文件夹c,用icacls设置权限。

    cmd后,运行cd c,运行icacls . /inheritance:d /q阻止权限继承,运行icacls . /grant:r "BUILTIN\Administrators":(oi)(ci)r /q替换旧权限。

    然后检查,运行icacls .检查,发现Administrators还是full权限,就是icacls . /grant:r的替换参数并没有起作用。

    我发现icacls设置那些内置的账号都会出现这个问题,包括设置Administrators,Authenticated Users等。

    2013年8月9日 4:08

答案

  • 這個同樣也不是 bug, 因為 icacls 的 /grant:r 命令是替換原來明確授予指定用戶的權限.

    按照你的描述, 先建立一個文件夾, 比如 LL

    mkdir LL

    然後進入該文件夾

    cd LL

    查看一下當前目錄的權限

    icacls .

    . BUILTIN\Administrators:(I)(F)
      BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
      NT AUTHORITY\SYSTEM:(I)(F)
      NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
      NT AUTHORITY\Authenticated Users:(I)(M)
      NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)
      BUILTIN\Users:(I)(RX)
      BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)

    已成功处理 1 个文件; 处理 0 个文件时失败

    這時禁用繼承

    icacls . /inheritance:d

    再查看一下權限

    icacls .

    . BUILTIN\Administrators:(F)
      BUILTIN\Administrators:(OI)(CI)(IO)(F)
      NT AUTHORITY\SYSTEM:(F)
      NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
      NT AUTHORITY\Authenticated Users:(M)
      NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(M)
      BUILTIN\Users:(RX)
      BUILTIN\Users:(OI)(CI)(IO)(GR,GE)

    已成功处理 1 个文件; 处理 0 个文件时失败

    假設要替換 "authenticated users" 組的權限為 R

    icacls . /grant:r "authenticated users":R

    來看看這時的權限

    icacls .

    . BUILTIN\Administrators:(F)
      BUILTIN\Administrators:(OI)(CI)(IO)(F)
      NT AUTHORITY\SYSTEM:(F)
      NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
      NT AUTHORITY\Authenticated Users:(R)
      NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(M)
      BUILTIN\Users:(RX)
      BUILTIN\Users:(OI)(CI)(IO)(GR,GE)

    已成功处理 1 个文件; 处理 0 个文件时失败

    可以看到替換掉一個 "authenticated users" 組的權限, 現在把最後一個也替換掉

    icacls . /grant:r  "authenticated users":(OI)(CI)(IO)R

    到這時針對 "authenticated users" 組的權限以及被全部替換完了.

    icacls .

    . BUILTIN\Administrators:(F)
      BUILTIN\Administrators:(OI)(CI)(IO)(F)
      NT AUTHORITY\SYSTEM:(F)
      NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
      NT AUTHORITY\Authenticated Users:(R)
      NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(R)
      BUILTIN\Users:(RX)
      BUILTIN\Users:(OI)(CI)(IO)(GR,GE)

    已成功处理 1 个文件; 处理 0 个文件时失败

    其實你要實現這個需求, 對於權限設置不是非常精細的話, 那麼可以直接用 cacls /g "", 另外 cacls 的 /s 開關可以通過 SDDL 方式來進行精細設置權限.

    綜上所述, 你試圖授予指定用戶組 (OI)(CI)R 權限, 但是在原權限列表中, 指定用戶並不存在針對 (OI)(CI) 的權限設置, 所以 icacls 只會將權限添加進去, 而不是替換, 因為它找不到可以替換的權限. 


    Folding@Home

    2013年8月9日 13:38