- Аналог chmod для windows
- Эквивалент chmod для изменения прав доступа к файлам в Windows
- Эквивалент chmod для изменения прав доступа к файлам в Windows
- 8 ответов
- Самописный chmod
- 7 ответов 7
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками winapi c chmod или задайте свой вопрос.
- Похожие
- Подписаться на ленту
Аналог chmod для windows
Есть дира, надо сделать так, чтобы если юзер user создает там файло, owner’ом был не он, а группа (Domain Users, где он членствует), т.е. чтобы группа могла там после этого писать (в т.ч. удалять файлы, созданные user’ом).
На стандартных операционных системах это делается до омерзения просто: $ umask 0002
Вопрос в том, как делается это на виндус?
p.s. Да, было бы еще интересно узнать, как на винде сделать аналог chmod g+s для группы owner’а на диру. Т.е. чтобы если юзер создавал что-нить в этой дире, вне зависимости от того, в какой он группе, это что-нибудь принадлежало группе. Правда я сомневаюсь в терминологии. на винде ваще есть понятие группа-владелец файла? :rolleyes:
Вот спасибо, пока не разобрался, но с виду очень полезная тулза! А то эти дефолтные GUI-шные окошки для управления разрешениями лишь с толку сбивают. Если получится сделать, что хочу — отпишу.
Да, проводить прямые аналогии видимо лучше не стоит, просто я выбрал этот путь, исходя из того, что поскольку система разграничения доступа на уровне файловой системы в Windows навороченнее, чем в Linux, то и изобразить там можно всё, что я мог бы сделать на Линухе..
Вопщем поясню на примере, наверняка задача решается в тыщу раз проще 🙂
Есть директория d:\game1 с установленной там Администратором игрой. Разрешения стоят дефолтовые (наследованные) — владелец Администраторы, Пользователи могут создавать новые диры и файлы.
Итак, пользователь user1 запускает гаму, которая в процессе создает конфиги.
Пользотватель user2 теперь не может запустить игру, поскольку у него нет прав на изменение/удаление этих конфигов.
Вот и всё.
Egor
Закладка security. Дай права на запись, чтение и модификацию. Можно вообще предоставить полный контроль.
А разве в этом случае юзеры не получат прав на модифицикацию файлов игры? Не говоря уже о втором предложении.
КрРук
В случае, если реально нужно дать права именно Domain Users,думаю просто выдать «Change» (или «Изменение») этой группе.
Опять же, не смогут ли после этого юзеры убить/изменить файлы игры?
Есть дира, надо сделать так, чтобы если юзер user создает там файло, owner’ом был не он, а группа (Domain Users, где он членствует)
Если выдать Chanhe группе Domain Users,то все члены группы смогут сделать с файлами\папками _все_, кроме изменения прав доступа
Есть дира, надо сделать так, чтобы если юзер user создает там файло, owner’ом был не он, а группа (Domain Users, где он членствует), т.е. чтобы группа могла там после этого писать (в т.ч. удалять файлы, созданные user’ом).
Совершенно не очевидно — тут про администратора и игру ни слова нету
Есть директория d:\game1 с установленной там Администратором игрой.
Если я правильно понял, то реально все должно быть просто :на D:\Game1 убираем какие-либо наследования и дефолт права, ставим Администраторы,Система:Полный контроль, Пользователи:Изменение , далее выделяем все файлы и каталоги самой игры убираем какие-либо наследования и дефолт права и ставим ставим Администраторы,Система:Полный контроль, Пользователи:Чтение и Исполнение.
Если использовать cacls с опцией /T, то программа спрашивает подтверждения операции (Yes/No). Вы не знаете, как это убрать? (нужно для запуска из batch-файлов)
fantomas
> Если использовать cacls с опцией /T, то программа спрашивает подтверждения операции (Yes/No)
D:\Alex_Saf\Admin\BackUp>xcacls.exe
Displays or modifies access control lists (ACLs) of files
XCACLS filename [/T] [/E|/X] [/C] [/G user:perm;spec] [/R user [. ]]
[/P user:perm;spec [. ]] [/D user [. ]] [/Y]
filename Displays ACLs.
/T Changes ACLs of specified files in
the current directory and all subdirectories.
/E Edit ACL instead of replacing it.
/X Same as /E except it only affects the ACEs that the
specified users already own.
/C Continue on access denied errors.
/G user:perm;spec Grant specified user access rights.
Perm can be: R Read
C Change (write)
F Full control
P Change Permissions (Special access)
O Take Ownership (Special access)
X EXecute (Special access)
E REad (Special access)
W Write (Special access)
D Delete (Special access)
Spec can be the same as perm and will only be
Press ENTER to continue.
applied to a directory. In this case, Perm
will be used for file inheritence in this
directory. If not omitted: Spec=Perm. Special values
for Spec only:
T Not Specified (for file inherit,
only for dirs valid)
At least one access right has to follow!
Entries between ‘;’ and T will be ignored!
/R user Revoke specified user’s access rights.
/P user:perm;spec Replace specified user’s access rights.
for access right specification see /G option
/D user Deny specified user access.
/Y Replace user’s rights without verify
Wildcards can be used to specify more that one file in a command.
You can specify more than one user in a command.
You can combine access rights.
Видимо вас интересует опция /Y — Replace user’s rights without verify
Да, действительно, в xcacls такая опция есть. А в cacls.exe — нет.. удивительно 🙂
p.s.
all (тем, кому это может пригодиться)
xcacls можно скачать с сайта microsoft.com, дистрибутив назвается «xcacls_setup.exe»
Мне сейчас некогда проверять, но мне кажется эти две утилиты монопинасуарны. Просто видимо обция /Y в одном случае недокументирована
cacls.exe:
Просмотр и изменение таблиц управления доступом (ACL) к файлам
CACLS имяФайла [/T] [/E] [/C] [/G имя:доступ] [/R имя [. ]]
[/P имя:доступ [. ]] [/D имя [. ]]
имяФайла Вывод таблиц управления доступом.
/T Замена таблиц управления доступом для указанных файлов
в текущем каталоге и всех подкаталогах.
/E Изменение таблицы управления доступом вместо ее замены.
/C Продолжение при ошибках отказа в доступе.
/G имя:доступ Определение разрешений для указанных пользователей.
«доступ»: R Чтение
W Запись
C Изменение (запись)
F Полный доступ
/R имя Отзыв разрешений для пользователя (только вместе с /E).
/P имя:доступ Замена разрешений для указанного пользователя.
«доступ»: N Отсутствует
R Чтение
W Запись
C Изменение (запись)
F Полный доступ
/D имя Запрет на доступ для указанного пользователя.
Для выбора нескольких файлов используются подстановочные знаки.
В команде можно указать несколько пользователей.
Сокращения:
CI — Наследование контейнерами (Container Inherit).
ACE будет унаследован папками.
OI — Наследование объектами (Object Inherit).
ACE будет унаследован файлами.
IO — Только наследованное (Inherit Only).
ACE не будет применим к текущему файлу/папке.
Эквивалент chmod для изменения прав доступа к файлам в Windows
Есть ли в Windows эквивалент Linux chmod для изменения прав доступа к файлу?
Грег упоминает attrib — но attrib не близко к нему chmod — attrib может установить атрибуты «Только для чтения» / «Скрытый» для одного файла — он не предоставляет детальных элементов управления, как это icacls делает.
icacls устанавливает / сбрасывает списки контроля доступа, поэтому вы можете предоставлять / запрещать права для отдельных идентификаторов безопасности и групп. Это довольно сложно, хотя.
Вот пример, который я сохранил в своем Github Gist ; он сбрасывает список владения и контроля доступа для всех файлов в папке и особенно полезен для исправления тех раздражающих «Вам нужны разрешения от .. для выполнения этого действия», особенно при перемещении файлов из предыдущей установки:
Сброс заменяет существующий список по умолчанию.
/t действует рекурсивно на все файлы, папки и подпапки
/q , не отображает никаких сообщений об успешном
/c продолжении работы с оставшимися файлами даже при возникновении ошибки.
Вы также можете делать такие вещи, как резервное копирование существующих ACL и применять их ко всем. Посмотрите на ss64, который очень хорошо объясняет различные опции и переключатели.
Либо cacls , xcacls , либо мои личные любимые icacls , вероятно, сделают то, что вам нужно.
Там (к сожалению) не может быть точного эквивалента, так как 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 (или преемников), но у меня его нет.
Работает как брелок для изменения прав доступа к папке для пользователей домена. Дополнительная информация относительно cacls и icacls .
Команда attrib наиболее близко подходит для самых простых вещей (только для чтения, архивные флаги). Затем есть команда ACL (список контроля доступа) cacls . И последнее, но не менее важное: поскольку Windows на самом деле совместима с Posix, флаги в стиле unix существуют. Если вы установите набор инструментов Cygwin, вы получите chmod . (Немного не по теме, так как вы ищете эквивалент команды unix, загрузка и установка Cgygwin может быть чем-то интересным для вас.)
Эквивалент chmod для изменения прав доступа к файлам в Windows
Есть ли какой-либо эквивалент Windows из chmod для Linux, чтобы изменить права доступа к файлу?
8 ответов
Грег упоминает attrib — но attrib не находится рядом с chmod — attrib может устанавливать атрибуты только для чтения /скрытия одного файла — он не предоставляет мелкомасштабные элементы управления, такие как icacls делает.
icacls устанавливает /сбрасывает списки управления доступом, поэтому вы можете предоставлять /запрещать права для отдельных SID и amp; групп. Это довольно сложно.
Вот пример, который я сохранил в github gist ; он сбрасывает список прав собственности и контроля доступа для всех файлов в папке и особенно полезен для исправления тех раздражающих «вам нужны разрешения .. для выполнения этого действия», особенно при перемещении файлов с предыдущей установки:
Сброс заменяет существующий список по умолчанию.
/t действует рекурсивно на все файлы, папки и amp; вложенные папки
/q не выводит сообщений об успешном завершении
/c продолжается с оставшимися файлами даже при возникновении ошибки.
Вы также можете делать такие вещи, как резервное копирование существующих ACL и amp; применяйте их ко всем. Посмотрите ss64 , в котором объясняются различные параметры & переключатели очень хорошо.
Либо cacls , xcacls или мой личный фаворит icacls , вероятно, сделает все, что вам нужно.
Там (к сожалению) не может быть точного эквивалента, поскольку Linux и DOS /Windows используют атрибуты для разных целей, и (как сказал Чатуранга ранее) модель безопасности отличается:
- В файловых системах Windows есть «скрытые» ( H ) и «system» ( S ), которые не имеют эквивалента в Linux; там файлы спрятаны, добавив имя с точкой ( . ).
- Нет эквивалента атрибуту «архив» Windows ( A ).
- В атрибутах файла DOS /Windows нет эквивалентов «исполняемых» ( x ) атрибутов Linux.
- Там есть эквивалент каталога «каталог» Windows ( D ) (но он может » все равно).
- В файловых системах Linux каждая запись принадлежит одному пользователю и ровно одной группе, а чтение /запись /выполнение может быть разрешено для каждого из них и для других. Списки ACL (например, используемые Windows) являются еще более гибкими, но более сложными, а синтаксис командной строки — PITA (по моему скромному мнению, конечно)
Атрибут файла DOS R (только для чтения) — это тот, который может считаться эквивалентным: этот атрибут set примерно соответствует атрибуту w для всех отсутствующих; но разрешение на изменение этого атрибута подчиняется ACL.
Возможно, было бы здорово иметь chmod / chown эквивалент в Windows, возможно, написан на некоторых языках сценариев, который, в свою очередь, вызывает attrib и cacls (или преемники), но у меня его нет.
Работает как шарм для изменения прав доступа к папке для пользователей домена. Дополнительная информация о cacls и icacls .
Самописный chmod
Доброго времени суток. По учебе задали написать аналог утилиты chmod под Windows на Си. Но есть проблема. chmod назначает права для владельца, группы владельца и остальных пользователей. Но что есть группа владельца? Если владелец состоит в нескольких группах, какая группа нужна?
И главное — какой функцией WinAPI можно получить эту группу?
Еще вопрос. Функция GetNamedSecurityInfo может вернуть:
A pointer to a variable that receives a pointer to the primary group SID
Что это за primary group? Это и есть группа владельца? Назначая этой группе права, SID этой группы определяется как «None». Будет здорово, если ответите хоть на один вопрос.
7 ответов 7
Система прав в Windows и *nix довольно сильно отличается.
В *nix у каждого файла есть 2 значение — владелец-пользователь и владелец-группа, причем пользователь не обязательно должен состоять в группе владельца файла.
chmod устанавливает 9 значений. 3 права (rwx) на юзера-владельца, группу владельца, всех остальных.
В Windows используются списки прав. У файла есть 1 владелец + список прав. Каждый элемент списка — это настройка прав для какой-то сущности (пользователь или группа). Соответственно Windows позволяет задать права одновременно многим пользователям и группам.
В общем случае полный аналог chmod для NTFS не возможен.
Разграничение прав есть и в *nix и в окнах. Группа — глобальная категория с предустановленным списком прав, каждый пользователь в той группе может иметь привилегии ниже установленных прав группы, но не выше их(Нельзя создать полноприводного админа в группе «Гости»).
Группы избавляют от рутинной работы вроде такой: надо создать 6 админов. Путь без групп: создаем пользователя проставляем все права(овер9000 галочек, птичек, записей) и так 6 раз. Повесится можно уже на 3м.
Путь с группой: Создать группу, проставить овер9000 птичек и т.д. и т.п., создать 6 пользователей в этой группе. Все.
Второй вопрос: Возвращается указатель на родительскую группу, к которой принадлежит пользователь, что не ясно?
это никак к винде не относится, у нее такого нет
а задача у вас скорее всего простая: ставить или удалять доступ на чтение и все )))
Толком помочь не могу, но часто пользуюсь командой attrib
А права для групп/пользователей устанавливаются через локальную политику аудита. Возможно через WinAPI это делать легче чем ручками, но не все версии окон поддерживают политики.
решаема через Power Shell (пример)
Есть книга автор Джонсон Харт, «Системное программирование в среде Microsoft Windows», там в одной из глав есть пример chmod на С+winapi.
типичный ответ на вопрос почему «chmod не работает в Windows? Потому, что данная система прав реализована в *unix». А вот если рассмотреть в контексте сборки WAMP и LAMP.
Как известно Apache+MySQL+PHP для винды существует, и это при всяких нюансах от разницы в слэшах и т.п, казалось бы тривиальных вещей. А вот CHMOD? Да, не может php скажем корректно читать chmod когда стоит на винде. Но факт остаётся фактом. Кидаем этот файл на сервер: и вуаля? Аттрибут присутсвует, хоть гоняй по 100 раз его туда сюда. CHMOD у файла всегда будет, просто восприимчивость не та у разных ОСей. Ну вот что бесит. Понятно винду под *nix не перепишешь под apache+php, но можно же было продумать способ эмуляции chmod, для обеспечения наиболее совместимости и портируемости контента.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками winapi c chmod или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.4.16.39093