Windows: перечисление файлов и их разрешений (доступ) в командной строке

Вопрос или проблема

В Linux, ls -l отображает права доступа к файлам, например:

-rw-r--r--  1 user user      924 2011-07-01 20:23 test.txt

В Windows, команды tree и dir не имеют опций для вывода прав доступа. Как можно вывести файлы и их права доступа, используя только командную строку?

Используйте icacls:

> icacls Music
Music SNOW\grawity:(I)(F)
      CREATOR OWNER:(I)(OI)(CI)(IO)(F)
      SNOW\grawity:(I)(OI)(CI)(IO)(F)
      NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)

Старый инструмент cacls — единственный выбор для Windows XP [хотя можно скопировать icacls.exe с Server 2003]. cacls не распознает некоторые режимы ACL, но отображает большинство из них корректно.

> cacls Music
F:\Users\Mantas\Music SNOW\grawity:F
                      CREATOR OWNER:(OI)(CI)(IO)F
                      SNOW\grawity:(OI)(CI)(IO)F
                      NT AUTHORITY\SYSTEM:(OI)(CI)F

В обоих выводах, (OI) означает “наследование объектов” (файлы унаследуют этот элемент управления доступом), (CI) — “наследование контейнеров” (контейнеры, т.е. папки, унаследуют этот элемент управления доступом), (IO) — “только наследование”.

Microsoft также предлагала инструмент xcacls отдельно, но его функциональность теперь является частью icacls.

Вы можете использовать PowerShell и команду Get-Acl

PS C:\> Get-Acl

   Directory:

Path              Owner                            Access  
----              -----                            ------  
C:\               NT SERVICE\TrustedInstaller      Everyone Allow  FullControl

Используйте её вместе с Get-ChildItem (псевдоним для dir и ls), чтобы получить права доступа к файлам.

PS C:\> Get-ChildItem | Get-Acl

Или, используя псевдоним:

PS C:\> Dir | Get-Acl

Вы также можете взглянуть на AccessChk от Sysinternals.
Вывод можно анализировать гораздо проще.

C:\Users\jeremy>accesschk myad\simmonsj c:\inetpub

Accesschk v5.11 - Отображает эффективные разрешения для защищаемых объектов
Copyright (C) 2006-2012 Mark Russinovich
Sysinternals - www.sysinternals.com

RW c:\inetpub\custerr
RW c:\inetpub\history
RW c:\inetpub\logs
RW c:\inetpub\Roadkill
RW c:\inetpub\smartadmin
RW c:\inetpub\temp
RW c:\inetpub\wwwroot

dir /Q показывает владельца директорий и любых файлов в текущей папке.

С помощью dir /Q /S вы можете увидеть владельцев всех файлов и директорий в и под текущей папкой.

Спасибо @DAB за предложения по редактированию.

Если вам нужны только атрибуты файлов Windows (не владение или ACL), вы можете использовать команду Powershell Dir (сокращение для команды Get-ChildItem). Например:

...>powershell dir


    Directory: C:\...


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        09/04/2022     18:09                testfiles
-a----        08/04/2022     23:19         130844 testbbackupd.cpp
-a----        08/04/2022     23:19             94 testextra
-a----        09/04/2022     18:06        8394752 test_bbackupd.exe

Буквы в свойстве Mode являются атрибутами файлов Windows, которые могут быть интерпретированы следующим образом:

  • l (ссылка)
  • d (директория)
  • a (архив)
  • r (только для чтения)
  • h (скрытый)
  • s (системный).

.

Ответ или решение

Для профессионалов в области информационных технологий важной задачей часто является управление файлами и их правами на компьютерах под операционной системой Windows. В отличие от Linux, где команда ls -l может быстро вывести список файлов с их правами доступа, в Windows для этой задачи нужен другой подход. Разберем подробно, как можно список файлов и их права доступа на них получить с помощью командной строки Windows.

Теория

В Windows отсутствует встроенная команда аналогичная ls -l, но система предлагает другие утилиты для управления и просмотра атрибутов файлов и папок, включая права доступа. Основные инструменты для этого — это команды icacls и cacls, а также возможности PowerShell и инструментов Sysinternals.
Права доступа в Windows основаны на списках управления доступом (ACL), которые управляют разрешениями для пользователей и групп на уровне файлов и директорий.

ICACLS

icacls — это более современная и функциональная утилита, которая позволяет управлять списками ACL. С помощью icacls можно не только просматривать права доступа, но и изменять их. Пример вывода команды:

> icacls Music
Music SNOW\grawity:(I)(F)
      CREATOR OWNER:(I)(OI)(CI)(IO)(F)
      SNOW\grawity:(I)(OI)(CI)(IO)(F)
      NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)

Здесь:

  • (F) — полный доступ (full control);
  • (OI) — наследование объекта (object inherit);
  • (CI) — наследование контейнера (container inherit);
  • (IO) — только наследование (inherit only).

CACLS

Для более старых версий Windows, таких как Windows XP, используется утилита cacls. Она менее функциональна по сравнению с icacls и не поддерживает все современные типы ACL.

> cacls Music
F:\Users\Mantas\Music SNOW\grawity:F
                      CREATOR OWNER:(OI)(CI)(IO)F
                      SNOW\grawity:(OI)(CI)(IO)F
                      NT AUTHORITY\SYSTEM:(OI)(CI)F

PowerShell

При помощи PowerShell возможности работы с файлами расширяются, в частности, через командлеты Get-Acl и Get-ChildItem.

PS C:\> Get-ChildItem | Get-Acl

Данная команда позволяет получить права доступа на все файлы и каталоги в текущем каталоге.

AccessChk

Эта утилита из комплекта Sysinternals предоставляет другой способ проверки прав доступа. Она полезна тем, что выдает проще форматированный, готовый к парсингу вывод.

C:\Users\jeremy>accesschk myad\simmonsj c:\inetpub

Примеры

  1. ICACLS: Использование icacls для получения списка прав на доступ.

    icacls "C:\Program Files"

    Вывод покажет разрешения для каждой группы или пользователя.

  2. PowerShell: Пример использования PowerShell для изъятия прав доступа.

    Get-ChildItem "C:\Documents" | Get-Acl

    Эта команда выведет владельцев и права доступа на все файлы в директории Documents.

  3. AccessChk: Использование AccessChk для детального анализа прав.

    accesschk.exe -d "C:\Data"

Применение

Указанные выше команды и инструменты помогают системным администраторам и специалистам по безопасности получать актуальную информацию о распределении прав доступа, выявлять проблемные места в системе безопасности и оптимизировать управление правами доступа на системах с Windows. Это критично важно для обеспечения защищенного доступа к данным, особенного в больших корпоративных сетях.

Используя icacls и PowerShell, можно создать скрипты, автоматически проверяющие и, при необходимости, корректирующие права доступа, что добавит автоматизации и облегчения в управлении информационной безопасностью. Обладание четкой картиной того, кто и каким образом имеет доступ к критически важным данным, помогает не только в обеспечении безопасности, но и способствует соблюдению нормативных требований, таких как GDPR, SOX и другие.

Таким образом, даже в отсутствие прямой команды аналогичной ls -l в Linux, Windows предлагает гибкие и функциональные инструменты, способные удовлетворить все необходимые требования по управлению правами доступа в командной строке.

Оцените материал
Добавить комментарий

Капча загружается...