Как использовать команду Icacls для управления правами доступа к файлам

Icacls – это командная утилита Windows, которую администраторы ИТ могут использовать для изменения списков управления доступом к файлам и папкам. Одной из наиболее распространенных задач, которую выполняет ИТ-специалист или системный администратор, является изменение разрешений на файловом сервере. Использование команды icacls – очень эффективный способ справиться с этим, и мы объясним, как использовать эту команду в данном руководстве.

Как использовать команду icacls

Исходя из моего собственного опыта, изменение разрешений на файлы в Windows обычно выполняется с помощью Проводника. Для многих ИТ-специалистов очень интуитивно открывать Проводник, переходить к сетевому расположению, вызывающему проблемы для некоторых пользователей, и изменять их разрешения с “Чтение” на “Чтение/Изменение” или что-то подобное. Просто и быстро, довольно легко использовать.

Реклама

Однако есть бесчисленные сценарии, охватывающие различные уровни действий, где ГИУ просто не такой мощный, как нам бы хотелось. Если мы собираемся изменить разрешения на 22 миллиона файлов и папок, мы хотим сделать это правильно!

Что такое список управления доступом (ACL)?

В Windows и файловых системах NTFS у каждого объекта файла (файла, папки) есть список управления доступом. Этот список состоит из записей управления доступом (ACE). Список содержит всех пользователей и/или другие объекты контейнера безопасности (группы и т. д.), которые имеют определенный уровень разрешения на указанный объект файла.

Что такое запись управления доступом? Одну минуту…

Что такое запись управления доступом (ACE)?

Запись управления доступом (ACE) – это индивидуальная запись или правило разрешения, которое контролирует индивидуальные уровни разрешения пользователя/группы на объект файла. Позвольте мне перечислить основные высокоуровневые разрешения, доступные для ACL:

Реклама

  • Полный доступ (F)
  • Доступ на изменение (M) (включает ‘удаление’)
  • Доступ на чтение и выполнение (RX)
  • Только чтение (R)
  • Только запись (W)

Существует около десятка или более ‘расширенных’ разрешений, но они выходят за рамки данной статьи.

Ограничения Проводника файлов

Теперь, если бы я был менеджером программ в Microsoft для Проводника файлов (работа, которую я особенно не завидую), вот какие функции я бы добавил. И поверьте мне, я хотел, чтобы они добавили их уже десятилетиями!

Предположим, вы обрабатываете миграцию файлового сервера с сервера A на сервер B. Вы уже скопировали данные на целевое устройство (сервер B). Вы обнаружили, что не все разрешения наследуются корректно.

Итак, вы переходите к корню вашего дерева, заходите во вкладку “Безопасность” и вносите несколько изменений в список контроля доступа. Вы ставите флажок для рекурсивного изменения всех 22 миллионов файлов и папок под корнем. Он начинает вносить изменения, а затем выдает вам несколько окон подтверждения о внесении изменений в системные файлы, файлы только для чтения и т.д.

Реклама

Теперь вот мое требование – в мини-‘мастере’, который они могли бы создать, я хочу указать, чтобы просто предполагали и нажимали ‘Да’ на все запросы на подтверждение. Затем процесс будет продолжаться при любых ошибках и затем предложит мне сводку по завершении, с ссылкой для загрузки необработанного вывода файла, чтобы я мог вернуться и проверить любые ошибки или предупреждения, которые могли возникнуть.

Нет, я не знаю, будет ли Microsoft когда-нибудь предлагать такой замечательный, прочный набор функций “задайте и забудь”. Поэтому пока мы используем мощь командной строки и сценариев. Вот где пригодится встроенная команда icacls.

Понимание синтаксиса icacls

Синтаксис icacls на самом деле довольно простой и относительно легкий для изучения. По сути, вы используете команду, затем добавляете файл или папку, которую хотите проверить или изменить, и затем разрешение(я), которые хотите добавить/изменить/удалить.

Есть, конечно, также переключатели командной строки. Мы скоро рассмотрим все это. Вот пример того, что происходит, когда вы просто запускаете следующую команду, а затем указываете имя файла.

icacls Excellent.txt
Using icacls to view current permissions

Это выведет одно ACE на строку, используя приведенный выше пример:

  • Встроенная учетная запись “SYSTEM” имеет унаследованные (I) и полные (F) права доступа
  • Группа встроенных администраторов имеет те же разрешения
  • Группа встроенных пользователей имеет унаследованные (I), чтение (R) и выполнение (X) разрешения.

Можно использовать icacls в PowerShell?

Ну, как вы можете видеть из моего примера выше и скриншота, вы действительно можете использовать PowerShell для использования команды icacls. Вам просто нужно знать о некоторых переменных среды, на которые нужно ссылаться немного по-другому.

Эквивалентные командлеты PowerShell для просмотра и управления списками управления доступом к файловым объектам – Get-Acl и Set-Acl. Звучит как идея для будущего поста! ?

Использование icacls для установки разрешений для файла или папки

Поскольку команда icacls является встроенной в Windows, вы можете начать использовать ее, как только поймете основы здесь. Вы также можете просто ввести ‘icacls’ самостоятельно в командной строке, чтобы просмотреть доступную справочную информацию. Вы также можете просмотреть аналогичную документацию Microsoft для команды icacls на этой странице.

Как отобразить текущий ACL для объекта

Ладно, я думаю, что этого достаточно… давайте начнем использовать команду. Чтобы отобразить текущий ACL для файла или каталога, просто используйте следующие команды:

icacls file or directory
icacls Download
Using icacls to view permissions on a folder

Здесь “Download” – это папка с файлами и подпапками. Как вы заметите, вывод немного отличается для объектов каталога. Вы увидите (OI) и (CI), потому что это специальные разрешения уровня наследования контейнера, которые применяются только к каталогам.

Для встроенной группы Администраторов вы видите, что у нее полные права и наследуемые разрешения. “(OI)” показывает, что другие объекты в этом каталоге унаследуют это ACE. “(CI)” показывает, что другие папки в этом каталоге снова унаследуют это ACE. (В этом каталоге случайно нет ничего подобного, но если бы было, оно автоматически унаследовало бы те же ACE).

Предоставление разрешений на файл или папку

Теперь дела начинают разогреваться. Давайте установим разрешения и добавим их для других пользователей в наш домен Active Directory с помощью переключателя /grant. С помощью следующей команды мы предоставим Billy Reinders (breinders) разрешения только на чтение (R) для файла Excellent.txt.

icacls Excellent.txt /grant reinders\breinders:R /t /c
Granting permissions to a file for a user

Предыдущая команда была успешно выполнена; затем я проверил свои изменения, проверив разрешения – теперь мы видим, что “REINDERS\breinders” имеет разрешения только на чтение (R). И поскольку мы НЕ видим ‘I’, указанного, мы знаем, что это не унаследовано, это явно.

Просто напомню вам, что переключатель ‘/t’ используется для рекурсивного установления разрешений на всем древе папок. Переключатель ‘/c’ указывает команде продолжать в случае возникновения ошибок.

Удаление разрешений для файла или папки

Вместо использования переключателя /grant для предоставления/добавления разрешений, мы используем переключатель /remove для удаления разрешений из ACE. Давайте продолжим и удалим кратковременный доступ Billy к файлу Excellent.txt.

icacls Excellent.txt /remove:g reinders\breinders /t /c
Using the /remove switch to remove permissions to a file for a user

Здесь мы используем переключатель ‘/remove:g’ для удаления разрешения, которое было ранее предоставлено Billy Reinders. Я снова запустил команду для проверки, и вы увидите, что ACL для Billy исчез. Отлично! ?

Отклонение разрешений для файла или папки

В общем, старайтесь избегать использования явных разрешений “отклонить” из-за сложности, которую они несут в вашу общую систему разрешений. Для большинства ситуаций можно полагаться на неявный запрет, который по умолчанию обрабатывает эти обстоятельства.

Если пользователь не указан в списке ACL и не является членом какой-либо группы, указанной в ACL, то Windows правильно предполагает, что у этого пользователя НЕТ разрешений на этот объект. Однако следующий пример показывает, насколько все это может выйти из-под контроля – если пользователь является членом двух групп, и одной группе предоставлен доступ, а другой запрещен, этому пользователю будет отказано в доступе. Само по себе это имеет смысл, но разбираться в таких ситуациях может быть очень сложно.

Однако, если вы хотите явно добавить разрешение на запрет, вы можете использовать общий ключ “/deny” для этого.

icacls Download /deny reinders\breinders:(OI)(CI)F /t /c
Using the /deny switch to put explicit deny permissions on a file or folder structure

Здесь вы можете увидеть команду, которую я запустил; она была успешно выполнена. Затем я проверил вкладку “Безопасность” для папки Загрузки – вы можете видеть, что у Билли есть разрешения на запрет на объект и все его содержимое.

Как сбросить ACL для объекта

I can’t tell you how many file server migrations or movements of large amounts of file projects I’ve been involved in where I just needed to start from scratch. This invaluable step includes resetting the ACLs on an object in case things get too far gone, or you succumb to a bad idea after being up all night. Maybe a malware attack crippled an entire HR directory that NEEDS to get resolved ASAP. Thankfully, you can use the ‘/reset’ flag to reset the permissions to the default.

icacls Download /reset /t /c

[изображение]

Сразу после того, как я снова предоставил Билли права “Чтение/Запись” для папки Загрузки и ее содержимого, я запустил команду сброса. Как видите, его имя снова отсутствует в ACL на вкладке “Безопасность”. Просто и легко.

Как сохранить и восстановить ACL

A wonderfully powerful feature included with icacls is the ability to backup and restore the ACL of an object to a file for safekeeping. Before you start a large script that changes or resets permissions on millions of files, you can first save the current state of those millions of files’ ACLs to a single file.

Если вы заметите, что где-то посередине вашего сценария возникла ошибка синтаксиса, вы можете прервать его, а затем восстановить состояние ACL для всего дерева одним запуском команды с использованием параметра “/restore”! Давайте попробуем!

icacls Download /save Download_ACL_Backup /t
What the backed-up text file looks like with all the ACLs – wowzers!

Это сохранит всё дерево ACL папки Download в один файл с именем “Download_ACL_Backup”. Теперь я настоятельно рекомендую вам НЕ трогать этот текстовый файл. Да, он выглядит как что-то типа Linux или что-то в этом роде. ? Просто шучу.

Вот текущее состояние папки Загрузки.

The ‘Download’ folder before Junior performs his ill-advised permissions changes…

Теперь предположим, что младший администратор назначил Билли Рейндерсу полный доступ к местоположению. Допустим также, что там содержатся данные отдела кадров, к которым у Билли быть доступу НЕ должно.

icacls Download /grant reinders\breinders:F /t /c
Our Junior Admin has granted Billy Reinders Full access to the location

После ввода команды я снова проверю и увижу, что у Билли есть полный явный контроль в этой папке. Одним махом предполагается, что разрешения вернутся к значениям по умолчанию после запуска этой команды.

icacls Download /reset /t /c
After running the /reset switch, we see Billy no longer has explicit access!

После выполнения сброса команды вы увидите, что его имя снова удалено из ACL. Теперь у него нет полного доступа к папке. Напоминаю — это просмотрит всю иерархию папок.

Совет: В течение этого сценария вы могли заметить, что у Билли есть только доступ на чтение, потому что встроенной группе Пользователи (к которой принадлежит Билли) назначены стандартные разрешения Чтение и Выполнение. Просто кстати.

Как управлять уровнями целостности Windows с помощью icacls

Есть малоизвестная функция, встроенная в Windows, называемая обязательный контроль доступа (MAC). Она существует уже довольно долго. Однако Microsoft представила обязательный контроль целостности (MIC) в Windows Vista/Windows Server 2008.

Разрешения определяются на основе политики и обычно не могут быть переопределены пользователями. Обычно это называется контролем целостности Windows (WIC). Уровень целостности используется для определения уровня защиты объекта в Windows. В общем, всегда нужно убедиться, что у ваших пользователей есть правильные разрешения.

I won’t go into great detail here, but I can show you a few examples of how to use the icacls command with it. If we create a new folder, Test, in the Download directory, we can adjust its integrity level to ‘h’igh.

icacls Test /setintegritylevel h

Чтобы кратко изложить, высокий уровень эквивалентен разрешениям, необходимым для выполнения задачи или процесса от имени администратора (права администратора). Так что, даже если у Билли Рейндерса было Полное управление этой папкой, если ему каким-то образом не были предоставлены магические администраторские права и он не мог запустить Проводник файлов от имени администратора (чего он не может…), он НЕ смог бы получить доступ к этой папке и ее содержимому.

Таким образом, это еще один уровень безопасности и защиты, который можно использовать для защиты чрезвычайно чувствительных данных.

Как управлять наследованием разрешений с помощью icacls

Мы также можем использовать команду icacls для просмотра и изменения прав на наследование файлов и папок. Это позволяет нам установить явные разрешения на одной папке, сохраняя при этом оставшиеся папки, установленные на автоматическое принятие ACL родительского контейнера.

Отключение наследования на файлы и папки

Мы можем отключить наследование для файла или папки с помощью параметра «/inheritance:d». В моем примере у нас есть папка Install в папке Download. Вы можете видеть здесь, что папка установлена на наследование всех своих разрешений из вышестоящих папок.

icacls Download
Disabling inheritance on the Install folder leaving only explicit ACEs

Давайте уберем наследование в папке Install.

icacls Install /inheritance:d /t /c
We can see that inheritance has been disabled as the ‘Enable inheritance’ button/toggle is available

Готово. Вы заметите, что все записи “(I)” исчезли. Теперь это все явные разрешения. И вы можете видеть ниже подтверждение из GUI, что кнопка “Включить наследование” доступна, потому что мы ее отключили.

Вывод

Самым увлекательным аспектом icacls для меня является надежность возможности создания скриптов с этой командой для сложных проектов. И снова не нужно беспокоиться о надежности Проводника при возникновении ошибок, сбоях и тому подобном.

I hope you learned more about using the command line to modify permissions. Please leave a comment or question below. Thank you!

Связанный материал:

Source:
https://petri.com/icacls-command/