Вопрос или проблема
Есть ли эквивалент команды chmod
в Windows для изменения разрешений файла?
Грег упоминает attrib
, но attrib
совсем не сопоставим с chmod
– attrib
может устанавливать атрибуты “Только для чтения”/”Скрытый” для одного файла – он не предоставляет таких тонких настроек, как icacls
.
icacls
устанавливает/сбрасывает списки управления доступом, так что вы можете предоставлять/отказывать в правах для индивидуальных SID и групп. Однако это довольно сложно.
Вот пример, который я сохранил в своем gist на github; он сбрасывает владельца и список контроля доступа для всех файлов в папке и особенно полезен для исправления этих раздражающих сообщений “Вам нужны разрешения от .. для выполнения этого действия”, особенно при перемещении файлов из предыдущей установки:
icacls * /reset /t /c /q
Вот что у нас имеется
/reset
заменяет существующий на стандартный список./t
действует рекурсивно на все файлы, папки и подпапки/q
не отображает сообщений об успешном завершении/c
продолжает работу с оставшимися файлами, даже если возникает ошибка.
Вы также можете делать такие вещи, как резервное копирование существующих ACL и применение их ко всем. Посмотрите на ss64, который хорошо объясняет различные параметры и переключатели.
Точного эквивалента не может быть, так как Linux и DOS/Windows используют атрибуты для разных целей, и (как уже говорил Чатуранага) модель безопасности различается:
- В файловых системах Windows есть атрибуты “скрытый” (
H
) и “системный” (S
), у которых нет эквивалента в Linux; там файлы скрываются, если к имени добавлен символ точки (.
). - Также нет эквивалента атрибута “архив” (
A
) в Windows. - В атрибутах файлов DOS/Windows нет эквивалента “исполняемому” (
x
) атрибуту Linux. - Есть эквивалент атрибута “каталог” (
D
) в Windows (но его все равно нельзя менять). - В файловых системах Linux каждый элемент принадлежит ровно одному пользователю и ровно одной группе, и разрешение на чтение/запись/выполнение может быть разрешено для каждого из них и для других. ACL (как в Windows) еще более гибкие, но и более сложные, а синтаксис командной строки ужасен (по моему скромному мнению, конечно).
Атрибут файла DOS R
(только для чтения) – это то, что можно считать эквивалентом: этот атрибут установлен примерно как атрибут w
для всех отсутствующих; но разрешение на изменение этого атрибута зависит от ACL.
Было бы неплохо иметь эквивалент chmod
/chown
в Windows, возможно, написанный на каком-то языках сценариев, который, в свою очередь, вызывает attrib
и cacls
(или их преемников), но у меня его нет.
icacls "C:\folder" /grant:r "Domain\Users":(OI)(CI)M /T /C
Отлично подходит для изменения разрешений на папку для пользователей домена. Дополнительная информация о cacls
и icacls
.
Команда attrib
является наиболее близким аналогом для очень базовых вещей (только для чтения, флаги архива). Затем есть команда ACL (список управления доступом) cacls
. И последнее, но не менее важное, так как Windows фактически соответствует стандарту Posix, флаги, подобные unix, действительно существуют. Если вы установите набор инструментов Cygwin, вы получите chmod
. (Это немного не по теме, поскольку вы ищете эквивалент unix-команды, но загрузка и установка Cygwin могут оказаться интересными для вас).
Я использую команду Windows takeown.exe
для изменения разрешений файлов на свой текущий идентификатор пользователя: http://technet.microsoft.com/en-us/library/cc753024.aspx
Для меня альтернативным вариантом является установка Cygwin и добавление его папки bin в системный путь. Затем, если вы запустите “chmod” в командной строке, это сработает. Хотя я не проверял его правильность.
В Windows нет команды chmod, потому что модель безопасности Windows отличается от Linux. Вы можете использовать команду attrib
для изменения свойств объектов. (Но они больше касаются глобальных свойств.)
В Ms. Windows есть команда icacls /?
Попробуйте выполнить эту команду icacls rsa-key.ppk
, и она вернет
rsa-key.ppk BUILTIN\Administrators:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\Authenticated Users:(I)(M)
BUILTIN\Users:(I)(RX)
Код означает
(I) - разрешение, унаследованное от родительского контейнера
(F) - полный доступ
(M) - доступ на изменение
(RX) - доступ на чтение и выполнение
Вы можете использовать команду
icacls file /grant user:(M)
или icacls file /remove user
Ответ или решение
Аналог chmod для изменения прав доступа к файлам в Windows
Вопрос изменения прав доступа к файлам в Windows, как аналог команды chmod
в Linux, представляет собой интересную задачу, поскольку две операционные системы используют разные модели управления доступом и права на файлы. В этом ответе мы рассмотрим инструменты и команды, которые позволяют управлять правами доступа в Windows.
1. Команды для управления правами доступа
1.1. icacls
Команда icacls является наиболее мощным и гибким инструментом для управления списками контроля доступа (ACL) в Windows. Она позволяет задавать, изменять и отменять права доступа к файлам и папкам.
Синтаксис:
icacls <имя_файла> /grant <пользователь>:(<права>) [/T] [/C] [/Q]
Пример использования:
Чтобы предоставить группе пользователей полные права на определённую папку, можно использовать следующую команду:
icacls "C:\Папка" /grant "Домен\Пользователи":(OI)(CI)M /T /C
(OI)
— права наследуются объектами в этой папке,(CI)
— права наследуются дочерними папками,M
— модификация прав доступа.
В этом примере ключи /T
, /C
и /Q
означают:
/T
– рекурсивно применять команду ко всем файлам и подпапкам,/C
– продолжать выполнение команды, даже если возникнут ошибки,/Q
– подавлять вывод сообщений о выполнении.
1.2. attrib
Команда attrib позволяет изменять атрибуты файлов, такие как "только для чтения" и "скрытый". Однако она не предоставляет такого же уровня контроля за доступом, как chmod
.
Синтаксис:
attrib +r <имя_файла> // Установка атрибута "только для чтения"
attrib -h <имя_файла> // Установка атрибута "недоступен"
2. Альтернативные инструменты
Существует также возможность использовать альтернативные инструменты, такие как Cygwin. Установив эту среду, вы сможете получать доступ к командам UNIX, включая chmod
.
3. Личные разные аспекты
Важно отметить, что в Windows отсутствуют некоторые атрибуты, аналогичные тем, что есть в Linux. Например, нет прямого эквивалента атрибута "исполняемый" для файлов. В Windows для выполнения файлов используется другая концепция — приложений и ассоциаций файлов.
4. Вывод
Хотя в Windows нет точного аналога chmod
, команды icacls
и attrib
обеспечивают достаточно мощные средства для управления правами доступа к файлам. Понимание различных команд и их возможностей поможет вам более эффективно управлять файлами и папками в вашей системе.
Если вам необходима более детализированная информация по использованию команд, вы можете обратиться кократким справкам через icacls /?
или на сайте Microsoft.
Понимание различий между моделями безопасности Windows и Linux важно для эффективного управления правами доступа, особенно при переносе данных между платформами. Ваша готовность использовать предложенные команды и принципы позволит вам более уверенно управлять системой Windows.