it-swarm-ru.tech

Эквивалент chmod для изменения прав доступа к файлам в Windows

Есть ли в Windows эквивалент Linux chmod для изменения прав доступа к файлу?

47
sunmoon

Gregупоминаетattrib - но attrib совсем не похож на chmod - attrib может устанавливать атрибуты «Только для чтения»/«Скрытый» для одного файла - он не предоставляет детализированных элементов управления, таких как icacls делает.

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

Вот пример, который я сохранил в своем github Gist ; он сбрасывает список владения и контроля доступа для всех файлов в папке и особенно полезен для исправления тех раздражающих «Вам нужны разрешения от .. для выполнения этого действия», особенно при перемещении файлов из предыдущей установки:

icacls * /reset /t /c /q 

Сброс заменяет существующий список по умолчанию.
/t действует рекурсивно на все файлы, папки и подпапки
/q не показывает никаких сообщений об успехе
/c продолжается с оставшимися файлами даже при возникновении ошибки.

Вы также можете делать такие вещи, как резервное копирование существующих ACL и применять их ко всем. Посмотрите на ss64 , который очень хорошо объясняет различные опции и переключатели.

19
Sathyajith Bhat

Либо cacls , xcacls , либо мой личный фаворит icacls , вероятно, будет делать то, что вам нужно.

11
Bryan

Там (к сожалению) не может быть точного эквивалента, так как Linux и DOS/Windows используют атрибуты для разных целей, и (как ранее говорил Чатуранга) модель безопасности отличается:

  • В файловых системах Windows есть атрибуты «скрытый» (H) и «system» (S), которые не имеют эквивалента в Linux; там файлы скрываются путем добавления имени к точке (.).
  • Также нет эквивалента атрибуту Windows «архив» (A).
  • В атрибутах файла DOS/Windows нет эквивалента «исполняемым» (x) атрибутам Linux.
  • Там is эквивалентно атрибуту Windows "directory" (D) (но его все равно нельзя изменить).
  • В файловых системах Linux каждая запись принадлежит только одному пользователю и одной группе, и чтение/запись/выполнение может быть разрешено для каждой из них и для других. ACL (например, используемые в Windows) еще более гибкие, но и более сложные, а синтаксис командной строки - это PITA (по моему скромному мнению, конечно)

Атрибут файла DOS R (только для чтения) - это атрибут, который можно считать имеющим эквивалент: этот атрибут set примерно такой же, как и атрибут w, для всех отсутствующих; но разрешение на изменение этого атрибута зависит от ACL.

Было бы здорово иметь эквивалент chmod/chown в Windows, возможно написанный на каком-то языке сценариев, который, в свою очередь, вызывает attrib и cacls (или преемников), но у меня его нет.

7
Tobias
icacls "C:\folder" /grant:r "Domain\Users":(OI)(CI)M /T /C

Работает как брелок для изменения прав доступа к папке для пользователей домена. Дополнительная информация о cacls и icacls.

5
MDT Guy

Команда attrib наиболее близко подходит для самых простых вещей (только для чтения, архивные флаги). Затем есть команда ACL (список контроля доступа) cacls. И последнее, но не менее важное: поскольку Windows на самом деле совместима с Posix, флаги в стиле unix существуют. Если вы установите набор инструментов Cygwin, вы получите chmod. (Немного не по теме, так как вы ищете эквивалент команды unix, загрузка и установка Cgygwin может быть чем-то интересным для вас.)

4
user27570

Я использую команду Windows takeown.exe, чтобы изменить права доступа к файлу для моего текущего зарегистрированного идентификатора пользователя: http://technet.Microsoft.com/en-us/library/cc753024.aspx

2
Roman Kharkovski

В Windows нет ничего, что называется chmod, потому что модель безопасности Windows отличается от Linux. Вы можете использовать команду attrib для изменения свойств объектов. (Но они больше к глобальным свойствам.)

2
Chathuranga Chandrasekara

Для меня обходной путь - установить Cygwin и добавить его папку bin в системный путь. Затем, если вы запустите "chmod" в командной строке, он будет работать. Хотя я не проверил его правильность.

0
WHOIF