Странное поведение /deny DE,W с icacls

У меня есть следующий сценарий, в котором я () применил(DE,W)запретить доступ к следующей папке тем, кто уже унаследовал разрешения на изменение из родительской папки:

      B:\>icacls test_folder
test_folder     test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

B:\>icacls test_folder /deny test_user:(DE,W)

B:\>icacls test_folder
test_folder     test_user:(DENY)(W,D)
                test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

Конечным результатом, которого я ожидал, является возможность иметь доступ для чтения/выполнения без возможности удалять/переименовывать папку и добавлять в нее папки/файлы.

Однако результата вообще не было видно. Мне все еще видно(admin).

Пока я отрицаю толькоDEоднако:

      B:\>icacls test_folder
test_folder     test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

B:\>icacls test_folder /deny test_user:(DE)

B:\>icacls test_folder
test_folder     test_user:(DENY)(D)
                test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

test_userсмог увидетьtest_folder. Так как-тоWвызывает проблему.

Есть идеи, почему это происходит?

1 ответ

Оба иявляются макросами; они расширяются до нескольких фактических флагов доступа.

В частности,например предоставляет следующие права:

  • «Синхронизировать»(S)
  • «Записать данные»(WD)
  • «Добавить данные»(AD)
  • «Пишите советники»(WEA)
  • «Написать атрибуты»(WA)

Право «Синхронизировать» довольно неясно (и даже не отображается в графическом интерфейсе), но оно необходимо практически для любого полезного доступа к файлу – оно необходимо как для чтения, так и для записи, и поэтому включено в оба « (R)» и «(W)» .

Таким образом, когда вы запрещаете (W) доступ, вы также в конечном итоге отказываетесь от права «Синхронизировать», которое требуется для того, чтобы многие программы вообще работали с файлом.

В документации Microsoft FILE_GENERIC_WRITEпо доступу к файлам также отмечается следующее:

Обратите внимание, что вы не можете использовать ACE с отказом в доступе, чтобы запретить только GENERIC_READ или только GENERIC_WRITE доступ к файлу. Это связано с тем, что для файловых объектов общие сопоставления как для GENERIC_READ, так и для GENERIC_WRITE включают право доступа SYNCHRONIZE. Если ACE отказывает доверенному лицу в доступе GENERIC_WRITE, а доверенное лицо запрашивает доступ GENERIC_READ, запрос завершится неудачей, поскольку запрос неявно включает доступ SYNCHRONIZE, который неявно запрещен ACE, и наоборот. Вместо использования ACE с запрещенным доступом используйте ACE с разрешенным доступом, чтобы явно разрешить разрешенные права доступа.

Если вам необходимо использовать «запретить» ACE, вам придется индивидуально запретить четыре других права, которые включает в себя (W), т.е., но учтите, что такой ACE имеет тенденцию немного запутывать инструменты редактирования ACL. (Многие по-прежнему сворачивают его до общего «Записать», и вы не сможете заметить разницу.)

СтаршийИнструмент здесь особенно полезен, так как он не знает многих новых макросов/псевдонимов и в результате показывает вам все индивидуальные права доступа. Альтернативно, PowerShellобычно слишком детализирован, чтобы быть полезным, но в данном случае он достаточно детализирован, чтобы быть полезным:

PS C:\> icacls test /grant "user:(OI)(CI)(R,X)"
PS C:\> icacls test /deny "user:(OI)(CI)(W)"

PS C:\> Тест Get-Acl | эт
Доступ: FOO\user Запретить запись, Синхронизировать
         NT AUTHORITY\SYSTEM Разрешить FullControl
         BUILTIN\Администраторы разрешают полный контроль
         FOO\user Разрешить ReadAndExecute, Синхронизировать

PS C:\> тест cacls  
C:\test FOO\user (OI)(CI)(DENY)(специальный доступ:)
                                  СИНХРОНИЗИРОВАТЬ
                                  FILE_WRITE_DATA
                                  FILE_APPEND_DATA
                                  FILE_WRITE_EA
                                  FILE_WRITE_ATTRIBUTES
        FOO\user:(OI)(CI)(DENY)(специальный доступ:)
                                  УДАЛИТЬ
                                  СИНХРОНИЗИРОВАТЬ
        ВСТРОЕН\Администраторы:(OI)(CI)F
        NT AUTHORITY\SYSTEM:(OI)(CI)F
Другие вопросы по тегам