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


Ответы:


26

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

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

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

icacls * /reset /t /c /q 

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

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


Проблема в том, что я не могу этого сделать, для каждого файла есть сообщение: «Доступ запрещен». Нет ли способа обойти это? На школьной системе, которая блокирует это, но не CMD?
theonlygusti

Вам нужны права администратора; «нормальный», cmdкоторый вы получаете, нажимая [Win] + [R], лишен этого. Для таких особых нужд у меня есть ярлык «Оболочка администратора» с проверкой «Выполнить от имени администратора» (или аналогичной; я работаю в немецкой системе Windows) (и с темно-красным цветом фона).
Тобиас

Я на самом деле сталкиваюсь с проблемой «Отказано в доступе». Почему, черт возьми, я могу что-то сделать, если я администратор, а консоль, которую я запускаю, тоже работает как администратор. Что это?
Чамо,

13

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


1
Я считаю, icaclsчто доступно только на Vista / 7.
Hello71

9

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

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

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

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


Хороший первый пост!
SLM

Вы путаете атрибуты файла и права доступа. В Linux есть атрибуты файлов, которые можно изменить с помощью chattr . В Linux имеется детальное управление доступом к атрибутам (например, атрибут [i] mmutable может быть установлен только пользователем root или CAP_LINUX_IMMUTABLEпроцессом), тогда как доступ к заданным атрибутам в Windows - «все или ничего». В реализациях Windows часто встречается ошибка при chmodиспользовании этой команды для установки атрибута файла только для чтения. К сожалению, системы информированы только так, как программисты, которые их разрабатывают.
Eryk Sun

@eryksun: Интересно - я не знал об этой chattrкоманде. Но вы не имели в виду меня, чтобы "перепутать атрибуты файла и разрешения", верно? AFAICS, каждое слово, которое я написал о атрибутах DOS, все еще верно.
Тобиас

Файл состоит из множества (расширенных) атрибутов. В Unix основной набор атрибутов хранится в inode, включая режим файла (права доступа). Другие расширенные атрибуты (например, ACL) могут храниться извне. Windows не имеет эквивалента атрибуту Unix «mode». Он также не имеет общей записи inode для файловых систем. Запись NTFS MFT похожа. От его POV стандартные атрибуты файла Windows являются единственным атрибутом записи файла. Они соответствуют атрибутам файлов Linux, установленным через chattr, за исключением того, что в Windows есть атрибут каталога, так как здесь нет inode.
Eryk Sun

Вопрос спрашивает о «[e] эквиваленте chmod для изменения прав доступа к файлам в Windows». В chmodWindows нет прямого эквивалента, потому что нет ничего похожего на атрибут «mode» файла. Стандартный набор атрибутов файлов Windows не имеет к этому никакого отношения. Атрибут только для чтения не является разрешением для файла. Это в основном говорит, что файл написан в камне, поэтому все попытки изменить его должны потерпеть неудачу. Linux «неизменяемый» атрибут файла аналогичен. Windows использует только ACL для разрешений, поэтому icacls.exe и тому подобное являются единственными подобными командами в отношении разрешений.
Eryk Sun

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

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


Хороший первый пост! Никогда не слышал о icacls.
SLM

5

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



2

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


2

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


1
Ссылка: просто и подробно
Боб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.