Используйте icacls, чтобы сделать каталог доступным только для чтения в Windows 7

Я пытаюсь протестировать некоторые исключения файловой системы в приложении на основе Java.

Мне нужно найти способ создать каталог, который находится в%TMP%, который установлен только для чтения.

По сути, на платформах UNIX/POSIX я могу выполнить команду chmod -w и получить этот эффект. Под Windows 7/NTFS это, конечно, другая история.

Я сталкиваюсь с несколькими проблемами по этому вопросу. У моего пользователя есть "административное" право (хотя это не всегда так), и поэтому каталог создается с помощью ACL, в том числе:

  • NT AUTHORITY \ SYSTEM
  • BUILTIN \ Администраторы
  • <мой текущий пользователь>

Есть ли способ использовать icacls, чтобы по существу перевести этот каталог в состояние, в котором он является PERIOD только для чтения, выполнить мой тест, а затем восстановить ACL для удаления?

РЕДАКТИРОВАТЬ С информацией, предоставленной @Ansgar Wiechers, я смог найти решение.

Я использовал следующее:

icacls dirname /deny %username%:(WD)

На странице, расположенной здесь, я нашел это в разделе замечаний:

icacls preserves the canonical order of ACE entries as:
  * Explicit denials
  * Explicit grants
  * Inherited denials
  * Inherited grants

Выполнив вышеупомянутую команду icalcs, я смог установить способность текущего пользователя записывать или добавлять файлы (WD) в каталог, чтобы запретить.

Тогда встал вопрос о возврате его на государственный почтовый тест:

icacls dirname /reset /t /c

Готово

1 ответ

Решение

Если у вашего пользователя есть права администратора, он всегда может восстановить любые разрешения, которые вы от него отозвали. В этом отношении учетные записи администраторов в Windows практически совпадают с учетными записями root в Linux.

Что вы можете сделать, хотя это создать ACL, который будет deny доступ для записи в Everyone, Это делает папку доступной только для чтения, как это может быть в Windows.

icacls DIRECTORY /deny Everyone:(CI)(OI)W

Остерегайтесь этого deny ACL всегда переопределяют allow ACL, поэтому даже если кому-то будет предоставлен явный доступ, его доступ по-прежнему будет отклонен.

Другие вопросы по тегам