Вопрос или проблема
Мы хотели бы изменить разрешения для папки, которая в настоящее время имеет полные разрешения для пользователя с наследованием родительских разрешений. Я хотел бы применить разрешение ‘Запретить’ для пользователя на все операции, кроме чтения и выполнения, с помощью команды ‘icacls’.
Когда мы пытаемся применить разрешение ‘Запретить’, операция показывает успешное выполнение, но пользователь не может открыть саму папку. То есть даже разрешение на чтение не применяется. Мы попробовали все команды, упомянутые в этом вопросе, включая те, которые получили в ответах, но ни одна из них не работает. Мы также обращались к этому вопросу на форуме, но решения не нашли.
Однако, когда мы вручную пытаемся применить разрешение ‘Запретить’ через свойства папки -> вкладка ‘Безопасность’, это работает как ожидалось, и у пользователя есть только разрешения на чтение и выполнение. Мы также пытались удалить пользователя из группы ‘Администраторы’ и затем выполнить операцию запрета через команду, но это также не сработало, и даже разрешение на чтение отключается.
Мы пробуем следующий набор команд:
takeown /f "E:\foldername" /r /d y
:: Сбросить наследование в каталоге и подкаталогах
icacls "E:\foldername" /reset /T
:: Установить разрешения только для чтения для пользователя
icacls "E:\foldername" /grant "test1":(OI)(CI)(R,X)
icacls "E:\foldername" /deny "test1":(OI)(CI)(W,D)
Используя указанные выше команды, мы видим, что разрешения применяются к свойствам папки, но как только пользователь нажимает на папку, появляется запрос на ‘Запрос разрешения’, и тогда даже доступ на чтение недоступен.
Скриншот вручную заданных разрешений
Мы используем ПК с Windows 10 и Windows Server 2012 R2. Пожалуйста, помогите нам решить эту проблему.
ОБНОВЛЕНИЕ:
Мы также пробовали использовать следующие команды, чтобы включить атрибуты чтения, читать расширенные атрибуты, перечислять папки/чтение и переход/выполнение, но проблема все еще сохраняется.
icacls "E:\foldername" /grant "test1":(OI)(CI)(R,X,REA,RD,GR,RC,RA)
icacls "E:\foldername" /deny "test1":(OI)(CI)(W,D)
Мы также пытались добавить ключ /inheritance с опциями ‘e”https://superuser.com/”r’.
‘Эффективный доступ’ для пользователя выглядит следующим образом, но когда пользователь нажимает на папку, он не может прочитать само содержимое, даже несмотря на то, что разрешения на чтение не изменены.
Пожалуйста, помогите в решении проблемы.
Согласно моему тесту, следующая последовательность команд устанавливает папку
в режим только для чтения и выполнения для пользователя:
icacls "C:\Test" /reset /T
icacls "C:\Test" /grant "User":(OI)(CI)RX
icacls "C:\Test" /inheritance:r
Это было выполнено в учетной записи администратора, которая владела папкой
“C:\Test”
(CMD не запускался от имени администратора).
Возможно, что добавление условия ‘Запретить’ и является причиной
проблемы, так как оно отказывает в слишком многом.
Этот ответ (как сообщает @user1686 в комментарии к этому вопросу) сработал в нашем случае.
Мы пытались запретить разрешение на запись (W), которое также, по всей видимости, включает атрибут ‘Синхронизировать’ (S), который требуется для всех операций чтения. Мы пытались избежать этого, указав отдельные атрибуты записи (W), которые следует запретить, как показано ниже:
icacls "E:\foldername" /deny "test1":(OI)(CI)(WD,AD,WEA,WA) /inheritance:r
Ответ или решение
Для настройки прав доступа к папке с использованием команды icacls
, с целью предоставить пользователю только разрешения на чтение и выполнение, при этом полностью отклоняя остальные права, потребуется следовать нескольким ключевым шагам. Проблема, с которой вы столкнулись, связана с тем, что при использовании команды icacls
необходимо учитывать все аспекты наследования и конкретные разрешения.
Шаги настройки прав доступа с помощью icacls
-
Сброс прав доступа:
Начните с сброса всех текущих прав доступа к папке, чтобы избежать конфликтов. Используйте следующую команду:icacls "E:\foldername" /reset /T
-
Настройка прав на чтение и выполнение:
Дайте пользователю разрешения только на чтение и выполнение. Эту команду можно выполнить следующим образом:icacls "E:\foldername" /grant "test1":(OI)(CI)(R,X)
-
Отключение наследования:
Чтобы гарантировать, что права доступа не наследуются от родительской папки, используйте следующую команду для отключения наследования:icacls "E:\foldername" /inheritance:r
-
Отключение нежелательных прав:
Если вы хотите точно контролировать права, которые пользователь не должен иметь, избегайте применения общего отказа, который может блокировать даже права на чтение. Вместо этого необходимо отклонить только специфические права, такие как:icacls "E:\foldername" /deny "test1":(OI)(CI)(W,D)
Обратите внимание на детали разрешений
- Синхронизация прав: Как упоминалось, отклонение прав может влиять на возможность чтения, так как некоторые права могут пересекаться с правом на чтение.
- Комбинация разрешений: Если после выполнения вышеперечисленных команд у пользователя все еще возникает проблема с доступом, возможно, что нужно корректировать настройки, исключая права, как
S
(Synchronize), так как это критичное право для операций чтения и выполнения.
Пример полного скрипта
Итак, весь набор команд может выглядеть так:
takeown /f "E:\foldername" /r /d y
icacls "E:\foldername" /reset /T
icacls "E:\foldername" /grant "test1":(OI)(CI)(R,X)
icacls "E:\foldername" /inheritance:r
icacls "E:\foldername" /deny "test1":(OI)(CI)(WD,AD,WEA,WA)
Заключение
Важно проверять результат выполнения с помощью команды icacls "E:\foldername" /show
, чтобы убедиться, что все права установлены корректно. Если после выполнения вышеуказанных шагов у пользователя по-прежнему возникают проблемы, рассмотрите возможность более тонкой настройки прав, чтобы избежать перекрытия хотя бы однокоектных разрешений.
Обязательно используйте командную строку от имени администратора. Старайтесь периодически проверять и тестировать разрешения, чтобы убедиться, что они соответствуют необходимым требованиям безопасности.