Re[4]: Как воспользоваться Cloaking?
От: Konstantin Sokolovskiy  
Дата: 27.02.02 11:47
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Это глупость. AppID не связан c CLSID! AppID — это гуид exe-шника! Т.е. CLSID может быть асоцеирован с AppID только если CoClass реализован внутри exe-шника.


А каким тогда образом можно управлять правами на запуск инпроца? Его же не видно
в DCOMCNFG. Мы сделали это, добавив AppID.

VD>А откуда берется этот "имперсонированный пользователь". Клиент, что, является промежуточным сервером?


Да.

VD>Ясно что вы там что-то недопонимаете. Но вот ваша схема не очень понята. Можно еще раз... Но подробно и без пропусков обрисовать задачу и то как вы ее пытаетесь решить.


Итак.
Имеется два компьютера. На обоих WinNT 4.0
На Comp1 работает некий Service, запущенный под системным эккаунтом.
На Comp2 есть dll, в задачу которой входит чтение локальных файлов и их компиляция.

Требуется вызвать из под Service на Comp1 метод dll на Comp2 в котором и происходит чтение и компиляция файлов.

По запросу пользователя происходит следующее:

1. Service на Comp1 производит имперсонацию с помощью LogonUser. Используется доменное имя, которое, в целях простоты, будем считать доменным администратором (domain\admin)

2. Service вызывает CoCreateInstance удаленной dll на Comp2. Identity — The launching user. Права на запуск — Everyone. Default impersonation level — Identity.

3. dll на Comp2 пытается получить доступ к локальным файлам (расположенным на компьютере Comp2), на которые domain\admin имеет все необходимые права.

У нас пункт 3 не проходит с ошибкой access denied.

При другом варианте мы пытались сделать LogonUser внутри dll непосредственно на Comp2. Это тоже не срабатывает. Выдается ошибка по поводу The required priveledge not held by client.

Пришлось попробовать еще третий вариант. При нем Service на Comp1 запускается не под системным эккаунтом, а под эккаунтом domain\admin. В этом случае все работает.

Еще один вариант. Service запускается под именем domain\admin. На Comp2 делаем расшаренный каталог \\Comp2\sharedDir\, в котором расположен file.txt, на который имеет права _только_ domain\admin. Перед открытием файла \\Comp2\sharedDir\file.txt Service имперсонируется под именем domain\user, прав на этот файл не имеющий. И все равно открытие файла происходит нормально!


В связи с этим у меня возникает чайниковский вопрос: чем толком отличаются два варианта — вариант когда сервис работает под системным эккаунтом, но мы имперсонируемся под именем domain\admin и вариант при котором сервис сразу запускается от имени domain\admin.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.