Введение / Зачем это нужно
ICACLS — это встроенная в Windows командная утилита для отображения и модификации списков управления доступом (ACL) к файлам и папкам. Она позволяет администраторам и продвинутым пользователям точно настраивать, кто и какие операции может выполнять с объектами файловой системы.
С помощью этого гайда вы научитесь:
- Просматривать сложные цепочки разрешений.
- Назначать, изменять и удалять права доступа для пользователей и групп.
- Управлять наследованием прав между папками.
- Восстанавливать стандартные разрешения Windows.
- Выполнять массовые операции с ACL на целых деревьях папок.
Это критически важно для устранения проблем с доступом, настройки общих папок в сети и обеспечения безопасности.
Требования / Подготовка
- Операционная система: Windows 10, Windows 11, Windows Server 2016 или новее. Утилита
icacls.exeнаходится вC:\Windows\System32\. - Права доступа: Для изменения ACL объекта ваша учётная запись должна иметь право на изменение разрешений (обычно
Write DAC). Для большинства системных папок и файлов это требует запуска командной строки от имени администратора. - Базовые знания: Понимание моделей безопасности Windows (пользователи, группы, права
Read,Write,Full Control).
⚠️ Важно: Будьте крайне осторожны при изменении прав на системных папках (
C:\Windows,C:\Program Files). Неправильные действия могут привести к неработоспособности ОС или приложений. Всегда создавайте точку восстановления системы перед массовыми операциями.
Пошаговая инструкция
Шаг 1: Просмотр текущих разрешений (ICACLS без параметров)
Перед внесением любых изменений необходимо понять текущую конфигурацию ACL.
# Просмотр разрешений для конкретной папки
icacls "C:\Users\Публичные\Документы"
# Просмотр с отображением всех наследуемых и явных разрешений
icacls "C:\Users\Публичные\Документы" /t /c /l
Что делает команда:
icacls <путь>— выводит список контрольных записей доступа (ACE) для указанного объекта./t— рекурсивно обходит все вложенные файлы и папки (для анализа структуры)./c— продолжает операцию даже при encountering ошибках доступа (не останавливается)./l— обрабатывает только символические ссылки, а не целевые объекты (для безопасности).
Пример вывода:
C:\Users\Public\Documents BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
NT AUTHORITY\Authenticated Users:(I)(M)
(I)— флаг Inherited (наследуемое разрешение).(F)— Full Control.(RX)— Read & Execute.(M)— Modify.
Шаг 2: Назначение новых прав (ICACLS /grant)
Добавьте явные права для пользователя или группы. Синтаксис: icacls <путь> /grant <пользователь>:<права>
# Дать пользователю 'Ivanov' право на чтение и запись в папку Project
icacls "D:\Projects" /grant Ivanov:(R,W)
# Дать группе 'Developers' полный контроль над папкой и всем её содержимым
icacls "D:\Projects" /grant Developers:(F) /t
# Добавить право на выполнение (RX) для всех аутентифицированных пользователей
icacls "C:\Tools\script.bat" /grant "Authenticated Users":(RX)
Ключевые права (мнемоника):
F— Full control (полный доступ)M— Modify (изменение)RX— Read & execute (чтение и выполнение)R— Read (только чтение)W— Write (только запись)D— Delete (удаление)
💡 Совет: Всегда указывайте полные имена групп (например,
"BUILTIN\Users"), если есть риск путаницы. Для локальных пользователей можно использовать простоIvanov.
Шаг 3: Управление наследованием (ICACLS /inheritance)
Наследование — механизм, при котором папка автоматически получает те же базовые разрешения, что и её родитель. Управляйте этим поведением.
# 1. Отключить наследование для папки и КОПИРОВАТЬ текущие наследуемые права как явные
icacls "D:\SecretProject" /inheritance:d
# 2. Отключить наследование и УДАЛИТЬ все скопированные наследуемые права
icacls "D:\SecretProject" /inheritance:r
# 3. Включить наследование обратно (восстановить по умолчанию)
icacls "D:\SecretProject" /inheritance:e
/inheritance:d— Disable inheritance, копируя текущие наследуемые ACE в явные./inheritance:r— Remove all inherited ACEs (более жёсткий вариант)./inheritance:e— Enable inheritance (по умолчанию для большинства папок).
Шаг 4: Удаление прав (ICACLS /remove)
Удалите явные или наследуемые разрешения для указанного пользователя/группы.
# Удалить все явные разрешения для пользователя 'TempUser' из папки
icacls "D:\Temp" /remove TempUser
# Удалить наследуемые разрешения для группы 'Guests' (если они есть)
icacls "D:\Temp" /remove "Builtin\Guests" /inheritance
Внимание: Удаление наследуемых прав через /remove с флагом /inheritance может нарушить ожидаемое поведение безопасности. Чаще достаточно отключить наследование (/inheritance:r).
Шаг 5: Восстановление стандартных разрешений (ICACLS /reset)
Если вы "сломали" ACL папки, команда /reset попытается вернуть её к состоянию, которое она имела бы по умолчанию, исходя из наследования от родителя.
# Сбросить ACL папки 'D:\Projects' до стандартных, унаследованных от D:\
icacls "D:\Projects" /reset /t /c
# Применить сброс ко всем вложенным объектам, игнорируя ошибки
icacls "D:\Projects" /reset /t /c
Ограничение: /reset не является волшебной кнопкой "отката". Он не восстанавливает резервные копии ACL. Он только удаляет все явные ACE на объекте и заставляет его снова наследовать права от родителя. Если у родителя нестандартные права, результат будет неожиданным.
Шаг 6: Массовые операции и обработка ошибок
Работайте с целыми деревьями папок, используя комбинацию ключей.
# Пример: Рекурсивно выдать группе 'DevTeam' права на изменение (M) на все файлы в D:\Code
# /t - рекурсия, /c - продолжать при ошибках, /q - тихий режим (минимальный вывод)
icacls "D:\Code" /grant DevTeam:(M) /t /c /q
# Пример: Найти все файлы, где у 'Everyone' есть права Full Control, и убрать их
# Сначала поиск (findstr), затем применение remove в цикле (для PowerShell)
Get-ChildItem "C:\" -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
$acl = icacls $_.FullName 2>$null
if ($acl -match "Everyone:(I?)\(F\)") {
icacls $_.FullName /remove Everyone
}
}
Безопасность: Проверяйте команды с /t на небольшой тестовой папке перед запуском на критических данных.
Проверка результата
После выполнения изменений обязательно проверьте результат.
- Визуальная проверка: Зайдите в свойства файла/папки в проводнике (
ПКМ → Свойства → Безопасность). Убедитесь, что нужные учётные записи присутствуют в списке, а лишние отсутствуют. - Командная проверка: Снова выполните
icacls <путь>и сравните вывод с ожидаемым. - Функциональная проверка: Попробуйте выполнить операцию от имени пользователя, для которого вы настраивали права (запустить файл, записать документ, удалить папку). Это самый надёжный способ.
Возможные проблемы
Проблема 1: "Access is denied" при попытке изменить права
- Причина: Текущий пользователь (даже администратор) не имеет права
Write DACна целевой объект. - Решение: Запустите командную строку или PowerShell от имени администратора (ПКМ → "Запуск от имени администратора"). Если это не помогает, возможно, объект защищён системой. В крайнем случае, используйте
takeown /f <путь> /rдля взятия владения, а затем повторитеicacls.
Проблема 2: Наследование не работает как ожидается после /reset
- Причина: Родительская папка, от которой должен наследоваться ACL, сама имеет нестандартные (явные) разрешения.
- Решение: Проверьте ACL родительской папки. Если нужно "полное восстановление", возможно, потребуется сбросить ACL на всю цепочку вверх до корня диска или использовать другие инструменты (например,
secedit /configureс шаблоном безопасности по умолчанию).
Проблема 3: Ошибка "The parameter is incorrect" при указании прав
- Причина: Некорректный синтаксис в части
<права>. Например, пробел между(R,W)или использование несуществующей буквы права. - Решение: Убедитесь, что права указаны без пробелов внутри скобок:
(R,W), а не(R, W). Используйте только допустимые мнемоники:F,M,RX,R,W,D.
Проблема 4: Массовая операция (/t) "зависла" или слишком долго выполняется
- Причина: Рекурсия по огромному количеству файлов (миллионы) или по сетевому пути с высокой задержкой.
- Решение:
- Используйте ключ
/cдля продолжения при ошибках. - Ограничьте глубину рекурсии, если возможно (например, сначала обработайте только верхний уровень).
- Для сетевых путей убедитесь в стабильности соединения.
- Выполняйте такие операции в периоды наименьшей нагрузки.
- Используйте ключ
Проблема 5: Не могу удалить системную учётную запись (SYSTEM, TrustedInstaller)
- Причина: Это защищённые системные учётные записи. Их полное удаление из ACL критически важных объектов запрещено системой.
- Решение: Вы не можете и не должны удалять эти записи. Вы можете только изменить их права (например, с
FнаRX), но даже это опасно. Для восстановления стандартных прав на системные объекты используйтеsfc /scannowили восстановление системы.
Продвинутый пример: Безопасная настройка общей сетевой папки
Цель: Создать папку D:\Share\Projects, доступную для чтения и записи группе Domain\Developers, но без возможности удаления файлов других пользователей. Наследование от родителя отключить.
# 1. Создаём папку (если её нет)
mkdir "D:\Share\Projects"
# 2. Отключаем наследование и удаляем все существующие явные права (если были)
icacls "D:\Share\Projects" /inheritance:r
# 3. Даём группе Developers Modify (M) — включает чтение, запись, выполнение, но НЕ Delete
icacls "D:\Share\Projects" /grant "Domain\Developers":(M)
# 4. Даём системе (SYSTEM) и администраторам Full Control для управления
icacls "D:\Share\Projects" /grant "SYSTEM":(F) "Administrators":(F)
# 5. Проверяем результат
icacls "D:\Share\Projects"
Пояснение: Право Modify (M) не включает право Delete (D). Это значит, что пользователи из Developers смогут создавать и изменять файлы, но не смогут удалять файлы, созданные другими пользователями (если только не имеют права Delete Subfolders and Files на родительской папке). Это часто требуется для общих рабочих папок.
Заключение о лучших практиках
- Тестируйте на копии: Перед массовым применением (
/t) протестируйте команду на одной папке. - Документируйте изменения: Записывайте, какие команды вы выполняли и для каких целей.
- Принцип наименьших прав: Давайте пользователям только те права, которые им необходимы для работы, а не
Full Controlпо умолчанию. - Используйте группы: Назначайте права группам домена или локальным группам (
Users,Administrators), а не отдельным пользователям. Это упрощает управление. - Резервное копирование ACL: Для важных папок можно сохранить текущий ACL в файл:
icacls "D:\Critical" /save acl_backup.txt. Восстановить:icacls "D:\Critical" /restore acl_backup.txt.
Команда icacls — мощный и точный инструмент. С этими знаниями вы сможете решать практически любые задачи по управлению доступом в Windows, от простых до сложных корпоративных сценариев.