Вопрос или проблема
В 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
Примеры
-
ICACLS: Использование
icacls
для получения списка прав на доступ.icacls "C:\Program Files"
Вывод покажет разрешения для каждой группы или пользователя.
-
PowerShell: Пример использования PowerShell для изъятия прав доступа.
Get-ChildItem "C:\Documents" | Get-Acl
Эта команда выведет владельцев и права доступа на все файлы в директории
Documents
. -
AccessChk: Использование
AccessChk
для детального анализа прав.accesschk.exe -d "C:\Data"
Применение
Указанные выше команды и инструменты помогают системным администраторам и специалистам по безопасности получать актуальную информацию о распределении прав доступа, выявлять проблемные места в системе безопасности и оптимизировать управление правами доступа на системах с Windows. Это критично важно для обеспечения защищенного доступа к данным, особенного в больших корпоративных сетях.
Используя icacls
и PowerShell, можно создать скрипты, автоматически проверяющие и, при необходимости, корректирующие права доступа, что добавит автоматизации и облегчения в управлении информационной безопасностью. Обладание четкой картиной того, кто и каким образом имеет доступ к критически важным данным, помогает не только в обеспечении безопасности, но и способствует соблюдению нормативных требований, таких как GDPR, SOX и другие.
Таким образом, даже в отсутствие прямой команды аналогичной ls -l
в Linux, Windows предлагает гибкие и функциональные инструменты, способные удовлетворить все необходимые требования по управлению правами доступа в командной строке.