![]() |
Ситуация следующая:
- Есть обычный пользователь, входящий в группу Users. - Есть командный файл (батник) на него выставлено ТОЛЬКО разрешение read для этого пользователя. - От имени этого пользователя из проводника выполнить командный файл нельзя, а из командной строки можно!!!! -Однако, если снять специальное разрешение read extended attribute - то возможность запуска из командной строки, наконец-то, более не доступна. Каков механизм этой проблемы? Что порочная ссвязь команднй строки, extened attribute и баного файла? Добавлено: И, кстати, вдогонку... Разрешение write - назначенное на объект, не даёт само по себе права на простотр разрешений объекта. И всё это вопреки документации - по help такое разрешение (Read permissions) -WRITE должно назначать. Ноэтого не происходит. Где эта особенность документирована и почему, вообще так? |
SkyF
По поводу основного вопроса - ты гонишь. Смотри еще раз внимательно что делаешь. Про догонку. В HELP опечатка.:biglaugh: |
Fidel
??? Ты пробовал? тогда не суди так строго. Сделай сам. вот при таких разрешениях *- bat запускается: -------------- C:\1\exec.bat BUILTIN\Administrators:F * * * * * * *mydomain\welcome:(OI)(CI)(special access:) * * * * * * * * * * * * * * * * * * * * * * READ_CONTROL * * * * * * * * * * * * * * * * * * * * * * SYNCHRONIZE * * * * * * * * * * * * * * * * * * * * * * FILE_GENERIC_READ * * * * * * * * * * * * * * * * * * * * * * FILE_READ_DATA * * * * * * * * * * * * * * * * * * * * * * FILE_READ_EA * * * * * * * * * * * * * * * * * * * * * * FILE_READ_ATTRIBUTES -------------- А при таких -уже нет: -------------- C:\1\exec.bat BUILTIN\Administrators:F * * * * * * *mydomain\welcome:(special access:) * * * * * * * * * * * * * * * * * * READ_CONTROL * * * * * * * * * * * * * * * * * * SYNCHRONIZE * * * * * * * * * * * * * * * * * * FILE_READ_DATA * * * * * * * * * * * * * * * * * * FILE_READ_ATTRIBUTES C:\1>exec.bat Access is denied. --------------- по поводу 2-го вопроса: ты видел эту только в Хелпе? *хм, я видел её везде... только один правильный импортный автор заметил этот факт. Я просил замечания Microsoft *по этому вопросу. [s]Исправлено: SkyF, 0:45 21-10-2002[/s] |
SkyF
Пробовал. Все делал юзером, отличным от себя, не членом группы Администраторов. Все запускалось одинаково из командной строки и из проводника. Руками снимал разрешение FILE_READ_EA в ACL файла. Все работает. |
Fidel
Работает, работает.. это в каком смысле? Запускается или нет? Что же работает? стоит разрешение only read - и, значит, не запускается - не из командной строки, не из проводника (страшная табличка). -потом ты ещё снимаешь специальное разрешение FILE_READ_EA - и тоже работает - в смысле не запускается.. так? Или как? |
Fidel
Работает = Запускается |
SkyF
чтения достаточно для запуска, если проводник ломается - это проблемы только проводника (лень проверять, доверяю тут Fidel), мало ли, он может FULL_ACCESS хочет, но на моей памяти такого не было и нет. Про WRITE - даже комментировать не хочу, заметь, доступ на запись не предполагает необходимость в общем случае доступ на чтение. Лучше б написал откуда взял это. Про FILE_READ_EA. Весь мой опыт программирования свидетельствует о том, что для файлов как таковых Extended Attributes не используются (на фатах их нет в принципе, на NTFS это все замечательно реализуется файловыми атрибутами и смысла в использовании EA нет, сам проверь, EA везде пустые будут, если только нарочно их какой-то хитрый софт не использует, как обратный пример: точно где используются EA - это при создании сокетов, сам это делал). Потому это право на обычные файлы распространяется постольку поскольку и роли никакой не играет. Еще расскажи плиз, как ты представляешь себе в списке прав GENERIC-право? Его там быть просто не должно, под ними (GENERIC) скрывается всегда некий набор прав (он может реализовываться на уровне операционной системы, и тогда эта константа не представима в виде суммы отдельных прав, пример - MAXIMUM_ALLOWED, либо на уровне кода приложения, то есть, константа представима в виде суммы отдельных прав, например, KEY_READ), а в списке эти GENERIC-права должны размапливаться (слово по имени соответствующей функции API) на составляющие (в этом смысле MAXIMUM_ALLOWED не есть полноценное GENERIC-право, я его просто как пример привел, можно было GENERIC_READ придумать). |
vasketsov
[pre]FILE_GENERIC_READ = STANDARD_RIGHTS_READ || FILE_READ_DATA || FILE_READ_ATTRIBUTES || FILE_READ_EA || SYNCHRONIZE[/pre] Думаю ты понял:) (Глянь windows.h, я думаю там эта константа определена:) ) SkyF Extended Attributes - вещь эфимерная. Присутствует у файла, и обрабатывется только если это предусмотренно разработчиком.:) Как правильно сказал vasketsov: "для файлов как таковых Extended Attributes не используются" (обычно). |
Fidel
именно это я и имел в виду под GENERIC-правом, и присутствие его в списке прав для файла для меня непонятно, должно быть именно такое разделение побитно, как ты и написал. |
Цитата:
Для чего нужно так было делать Microsoft? Для чего выделять ещё и execute, если его совершенно не реализовывать? и почему, "Чтения достаточно для записи", если как только, это пресловутое спец. разрешение FILE_READ_ATTRIBUTES (которое по вашему нигде не используется), убрать - то ЗАПУСКСАТЬ командные файлы при разрешении READ станивится нельзя? Ясно, что можно скопировать и запустить, но это не то... Цитата:
По любому "Read Permissions" - указан как вклчающийся для разрешения write. Я уже говорил что так написано всюду. Где вот вы искали, что это не нашли, это я и пытаюсь узнать. |
SkyF
Zdes chital Advanced File and Folder Permissions vasketsov ne gruzis :) eto utilita calcs.exe tak vyvodit permissions |
SkyF
Открою "страшный секрет" как запускаются программы на NT. а) открывается файл с правом доступа FILE_EXECUTE | SYNCHRONIZE (замечу, что здесь даже не требуется FILE_READ_DATA, даже не спорьте тут, сам пишу такой код на Native Nt Api, и он работает, FILE_EXECUTE тоже лишь бы было, по идее); б) создается для этого файла секция (объект Section) с правом SECTION_ALL_ACCESS и закрывается файл; в) создается для этой секции объект Process; г) пара манипуляций с секцией для вычисления точки входа и прочих параметров; д) закрывается сеция; е) создается первичный поток; ну и так далее. Когда загрузчик поднимает DLL-ки в адресное пространство, он их читает в память, и здесь и необходимо право на чтение, а так как сам файл тоже оформляется в виде DLL (в этом смысле), то на него тоже это право требуется. FILE_READ_ATTRIBUTES может использоваться, а может и нет, но в FILE_READ_EA точно необходимости нет. Цитата:
Кстати, я в своей програмке мониторю открытые по сетке файлы и режим их открытия, обнаружил, что XP и выше использует для открытия на запуск недокументированный флаг, точнее, даже 2, потому скоро в права на шары, возможно, и появится более тонкая настройка, а пока только так. [s]Исправлено: vasketsov, 19:17 22-10-2002[/s] |
Цитата:
Фразу следует читать так: "если как только, это пресловутое спец. разрешение FILE_READ_EA (которое по вашему нигде не используется), убрать - то ЗАПУСКСАТЬ командные файлы при разрешении READ станивится нельзя? " В любом случае, создание потоков и объектов меня не интересует. Fidel - Спасибо. Ну вот то что мне и было нужно. Однако только в ХР Microsoft мягко поправила документацию. |
SkyF
Пожалуйста :) |
Время: 08:36. |
Время: 08:36.
© OSzone.net 2001-