Аналог chmod в windows

Обновлено: 04.07.2024

На этой странице представлены сведения об интерпретации разрешений файлов Linux в подсистеме Windows для Linux, особенно при получении доступа к ресурсам в файловой системе NT под управлением Windows. В этой документации предполагается, что вы имеете базовое представление о структуре разрешений файловой системы Linux и командах umask.

При доступе к файлам Windows из WSL разрешения файлов вычисляются на основе разрешений Windows, либо считываются из метаданных, которые были добавлены в файл с помощью WSL. По умолчанию эти метаданные не включены.

Метаданные WSL в файлах Windows

Если метаданные включены в качестве параметра подключения в WSL, вы можете добавить и интерпретировать расширенные атрибуты в файлах Windows NT, чтобы предоставить разрешения файловой системы Linux.

WSL может добавлять четыре расширенных атрибута NTFS:

Имя атрибута Описание
$LXUID Идентификатор пользователя владельца
$LXGID Идентификатор владельца группы
$LXMOD Файловый режим (восьмеричная система и типы разрешений файловой системы, например: 0777)
$LXDEV Устройство (если это файл устройства)

Кроме того, любой файл, который не является обычным файлом или каталогом (например, символические ссылки, файлы FIFO, блочные устройства, сокеты Unix и символьные устройства) также имеет точку повторного анализа NTFS. Это позволяет быстрее определить тип файла в определенном каталоге, не запрашивая его расширенных атрибутов.

Сценарии доступа к файлам

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

Получение доступа к файлам в файловой системе диска Windows (DrvFS) из Linux

Эти сценарии возникают при получении доступа к файлам Windows из WSL, скорее всего с помощью /mnt/c .

Чтение разрешений файлов из существующего файла Windows

Результат будет зависеть от того, содержит ли файл уже существующие метаданные.

Файл DrvFS не имеет метаданных (по умолчанию)

Если файл не имеет связанных метаданных, мы преобразовываем действующие разрешения пользователя Windows в биты чтения, записи или выполнения и назначаем их этому файлу в качестве того же значения для пользователя, группы и других элементов. Например, если учетная запись пользователя Windows имеет доступ на чтение и выполнение, но не имеет доступа на запись в файл, для пользователя, группы и других элементов она будет отображаться как r-x . Если для файла в Windows задан атрибут "только для чтения", доступ на запись в Linux не предоставляется.

Файл содержит метаданные

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

Изменение разрешений файла в существующем файле Windows с помощью команды chmod

Результат будет зависеть от того, содержит ли файл уже существующие метаданные.

Файл chmod не имеет метаданных (по умолчанию)

Файл chmod может иметь только один эффект. Если вы удалите все атрибуты записи файла, в файле Windows будет задан атрибут "только для чтения", так как это то же поведение, что и в общей файловой системе Интернета (CIFS), которая является клиентом SMB в Linux.

Файл chmod содержит метаданные

В зависимости от уже существующих метаданных файла, файл chmod будет изменен или будут добавлены метаданные.

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

Создание файла в DriveFS

Результат зависит от того, включены метаданные или нет.

Метаданные не включены (по умолчанию)

Разрешения Windows для созданного файла будут такими же, как если бы вы создали файл в Windows без конкретного дескриптора безопасности. Он наследует родительские разрешения.

Метаданные включены

Биты разрешений файла задаются в соответствии с командой umask в Linux, и файл будет сохранен с метаданными.

Какому пользователю или группе Linux принадлежит файл?

Результат будет зависеть от того, содержит ли файл уже существующие метаданные.

Файл пользователя не имеет метаданных (по умолчанию)

В сценарии по умолчанию при автоподключении дисков Windows мы указываем, что идентификатору пользователя (UID) любого файла присваивается идентификатор пользователя WSL, а идентификатору группы (GID) — идентификатор главной группы пользователя WSL.

Файл пользователя содержит метаданные

Идентификаторы пользователя и группы, указанные в метаданных, применяются в качестве пользователя владельца и владельца группы файла.

Получение доступа к файлам Linux из Windows с помощью \\wsl$

Для получения доступа к файлам Linux с помощью \\wsl$ будет использоваться пользователь по умолчанию дистрибутива WSL. Таким образом, все приложения Windows, обращающиеся к файлам Linux, будут иметь те же разрешения, что и пользователь по умолчанию.

Создание поля

Параметр umask по умолчанию применяется при создании файла в дистрибутиве WSL из Windows. По умолчанию параметр umask имеет значение 022 . Или другими словами он позволяет использовать все разрешения, кроме разрешения на запись, в группах и других элементах.

Доступ к файлам в корневой файловой системе Linux из Linux

Во всех файлах, созданных, измененных или доступ к которым осуществлялся с помощью корневой файловой системы Linux, используются стандартные соглашения Linux. Например, к только что созданному файлу применяется команда umask.

Я пытаюсь заменить notepad.exe на notepad2.exe , но у меня возникают проблемы с разрешениями UAC при попытке открыть файл с заменой notepad2.exe . Я должен открыть notepad2.exe как администратор.

Как я могу выполнить Windows 7 эквивалент Linux chmod 777 над файлом?

Используя cacls, вы можете сделать то же самое, например.

Обратите внимание , что это не совсем так же , как запретить ACL записи переопределения позволяют записи, так что если есть какие - либо отрицают те , что вам может понадобиться , чтобы удалить их.

Вообще, мне, честно говоря, приходится сомневаться в мотивах того, что вы пытаетесь сделать. Никогда не должно быть причины для замены основных файлов операционной системы другими.

Вы можете легко связать текстовые файлы с Notepad2, не заменяя notepad.exe который должен быть предпочтительным способом решения этой проблемы.

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

Вы можете использовать его следующим образом:

Это может работать, адаптируйте вашу командную строку по мере необходимости:

Шаг 1 - Откройте окно cmd с правами администратора

Шаг 2 - стать владельцем содержимого каталога "picts"

Шаг 3 - изменить права доступа "каждому" содержимого каталога "picts"

Кроме того, вы можете установить бесплатную терминальную программу Windows, такую как MobaXterm. Когда вы откроете его, вы увидите, что он дает вам доступ к вашим локальным каталогам Windows pc, но эмулирует интерфейс командной строки Linux, предлагая несколько команд Linux на основе Cygwin, например chmod .

Я уверен, что есть и другие терминальные программы Windows с вкладками, которые эмулируют Linux CLI. Я только сейчас использую MobaXterm. Я считаю полезным поддерживать несколько вкладок при использовании одних и тех же команд для каждой из них: одна для моего удаленного Linux-сервера, одна для VirtualBox Linux-сервера и одна для моего локального ПК с Windows.

Доброго времени суток. По учебе задали написать аналог утилиты chmod под Windows на Си. Но есть проблема. chmod назначает права для владельца, группы владельца и остальных пользователей. Но что есть группа владельца? Если владелец состоит в нескольких группах, какая группа нужна?

И главное - какой функцией WinAPI можно получить эту группу?

Еще вопрос. Функция GetNamedSecurityInfo может вернуть:

ppsidGroup [out, optional]

A pointer to a variable that receives a pointer to the primary group SID

Что это за primary group? Это и есть группа владельца? Назначая этой группе права, SID этой группы определяется как "None". Будет здорово, если ответите хоть на один вопрос.

Система прав в Windows и *nix довольно сильно отличается.

В *nix у каждого файла есть 2 значение - владелец-пользователь и владелец-группа, причем пользователь не обязательно должен состоять в группе владельца файла.

chmod устанавливает 9 значений. 3 права (rwx) на юзера-владельца, группу владельца, всех остальных.

В Windows используются списки прав. У файла есть 1 владелец + список прав. Каждый элемент списка - это настройка прав для какой-то сущности (пользователь или группа). Соответственно Windows позволяет задать права одновременно многим пользователям и группам.

В общем случае полный аналог chmod для NTFS не возможен.

Винду я плохо знаю (самому интересен этот вопрос) и тем не менее C:\Users\avp>ls -l c:\ total 4293954113 drwxrwxrwx 1 user group 0 Aug 19 2012 Recycle.Bin -rw-rw-rw- 1 user group 328231 Jul 11 17:18 11072013563.jpg -rw-rw-rw- 1 user group 87 Sep 4 2011 CIR.log drwxrwxrwx 1 user group 0 Dec 8 12:55 Config.Msi drwxrwxrwx 1 user group 0 Oct 3 21:24 CopySamsungH . и т.д. . ls из UnixUtils что-то выводит. Так что, я бы не был столь категоричен. мне кажется, что он нагло симулирует. Там есть права, отличные от -rw-rw-rw- , -rwxrwxrwx и drwxrwxrwx ? Думаю, может быть ещё найдется такое ---------- (ну или что то в этом стиле).

Разграничение прав есть и в *nix и в окнах. Группа - глобальная категория с предустановленным списком прав, каждый пользователь в той группе может иметь привилегии ниже установленных прав группы, но не выше их(Нельзя создать полноприводного админа в группе "Гости").

Группы избавляют от рутинной работы вроде такой: надо создать 6 админов. Путь без групп: создаем пользователя проставляем все права(овер9000 галочек, птичек, записей) и так 6 раз. Повесится можно уже на 3м.

Путь с группой: Создать группу, проставить овер9000 птичек и т.д. и т.п., создать 6 пользователей в этой группе. Все.

Второй вопрос: Возвращается указатель на родительскую группу, к которой принадлежит пользователь, что не ясно?

это никак к винде не относится, у нее такого нет

а задача у вас скорее всего простая: ставить или удалять доступ на чтение и все )))

Толком помочь не могу, но часто пользуюсь командой attrib

А права для групп/пользователей устанавливаются через локальную политику аудита. Возможно через WinAPI это делать легче чем ручками, но не все версии окон поддерживают политики.

598 1 1 золотой знак 4 4 серебряных знака 17 17 бронзовых знаков Да, полный аналог невозможен =) Пунктик "Выполнение" не существует. А что-то вида ASHrwrwrw теоретически можно сделать =) @Олег Нечитайло, Я знаю =) Про права доступа я написал ниже листинга.

решаема через Power Shell (пример)

9,653 11 11 золотых знаков 44 44 серебряных знака 100 100 бронзовых знаков

Есть книга автор Джонсон Харт, "Системное программирование в среде Microsoft Windows", там в одной из глав есть пример chmod на С+winapi.

типичный ответ на вопрос почему "chmod не работает в Windows? Потому, что данная система прав реализована в *unix". А вот если рассмотреть в контексте сборки WAMP и LAMP.

Как известно Apache+MySQL+PHP для винды существует, и это при всяких нюансах от разницы в слэшах и т.п, казалось бы тривиальных вещей. А вот CHMOD? Да, не может php скажем корректно читать chmod когда стоит на винде. Но факт остаётся фактом. Кидаем этот файл на сервер: и вуаля? Аттрибут присутсвует, хоть гоняй по 100 раз его туда сюда. CHMOD у файла всегда будет, просто восприимчивость не та у разных ОСей. Ну вот что бесит. Понятно винду под *nix не перепишешь под apache+php, но можно же было продумать способ эмуляции chmod, для обеспечения наиболее совместимости и портируемости контента.


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

Но пришло время перемен и в более новых системах эта команда запустит проводник от текущего пользователя.
Можно, конечно, выставлять права через администраторские шары со своего рабочего места, или запускать от себя другие файловые менеджеры… Но иногда выставить права нужно здесь и сейчас, а установка лишней программы на компьютер, которой придется пользоваться раз в месяц — это неправильно.

Итак, я нашел два способа побороть эту ситуацию: один правильный и интересный, второй быстрый и забавный. Начнем с первого.

Способ 1. Для любознательных и терпеливых

За разграничение прав проводника отвечает один из COM объектов. А именно — Elevated-Unelevated Explorer Factory.

Находится это чудо следующим образом:
Запускаете cmd с правами администратора — dcomcnfg и далее в настройке DCOM ищите параметр Elevated-Unelevated Explorer Factory.


и там ищите нашего спрятанного зверька:


Однако редактировать этот параметр вам скорее всего не дадут. Нет прав на изменение ветки реестра HKEY_CLASSES_ROOT\AppID\
Когда нас останавливали такие пустяки? Делаем себя владельцем, изменяем права и снова запускаем dcomcnfg
УРА! Мы можем теперь выставить параметр на вкладке Удостоверение — Запускающий пользователь.


Муторно немного, да? Можно сразу редактировать ключик реестра — HKEY_CLASSES_ROOT\AppID\\RunAs

  • значение Interactive User для текущего пользователя
  • удаление этого параметра для запускающего пользователя
  • имя пользователя для запуска проводника от какого-то конкретного пользователя

Возможно решить данный вопрос можно через политики, но увы -я такое не нашел, да и не применимо на работе у меня такое. Разве что приходит на ум батник на ключа реестра. Ну что же, первый способ мы осилили…

А теперь время магии.

Способ 2. Быстрый и веселый

Запускаем cmd от имени администратора, открываем блокнот, выбираем Открыть и отобразить все файлы и спокойно меняем права на файлы и папки.

Картинка, иллюстрирующая мои глаза в момент этого чудного открытия прилагается:


Благодарю за внимание!

UPD
Благодаря пользователю denis_g и нескольким другим линуксойдам, вспомнил, что давно читал про консольную команду управления правами доступа — CACLS
Раз ссылка на синтаксис
Два ссылка на синтаксис

Получается, добавление пользователя с правами на изменение делается так:

cacls PATH:\To\FILE /t /e /p username:C

Где переменные: /t — подкаталоги (для папок), /e — edit т.е. изменение существующих прав, /p — изменение пав пользователю (если нет — добавит), С — чтение.
Осторожно, сперва потренируйтесь, ибо можно снести в null все права на папку!

image

UPD2 у меня не заработал
Зажать SHIFT и выбрать «Запуск от имени другого пользователя» экзешника проводника…

Читайте также: