Здравствуйте Alex Fedotov, вы писали:
AF>Здравствуйте IT, вы писали:
AF>>>Превосходно. Только это будет работать если имя пользователя и пароль известны заранее. Если они становятся известны только непосредственно перед запуском, то этот метод работать не будет. Вот мы опять вернулись к тому, что сначала надо разобраться с постановкой задачи.
IT>>Да, ты прав при такой постановке задачи это не вариант. Тогда пойдём другим путём :) Я ни разу не работал с CoSetProxyBlanket, но что-то мне подсказывает, что это оно. В MSDN есть статейка "Setting Authentication Using C++", может поможет. В этом случае Identity нужно установить в launching user.
AF>CoSetProxyBlanket, пожалуй будет слишком поздно (процесс уже запущен), а вот выставить нужные credentials в COAUTHINFO при вызове CoCreateInstanceEx должно быть в самый раз.
Ты опять прав, но я настаиваю: MSDN->"Changing the Authentication Credentials" :)
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Alex Fedotov, Вы писали:
AF>В NT 4 единственный известный мне способ — это сделать свой сервис в LocalSystem, AF>из которого вызывать LogonUser и CreateProcessAsUser.
А что мешает просто дать привелегию конкретному экаунту?
Более того, мне кажется что, экаунт автоматом получит данную привелегию если под ним запустить сервис. По крайней мере я даже незнаю где в NT4 задается эта привелегия, а у моего экаунта она установлена. Поднобнее здесь http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1007568516&n=5
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте Alex Fedotov, Вы писали:
AF>>В NT 4 единственный известный мне способ — это сделать свой сервис в LocalSystem, AF>>из которого вызывать LogonUser и CreateProcessAsUser.
VD>А что мешает просто дать привелегию конкретному экаунту?
Только соображения безопасности. SE_TCB_NAME означает полный контроль над системой.
VD>Более того, мне кажется что, экаунт автоматом получит данную привелегию если под ним запустить сервис.
Здравствуйте Alex Fedotov, Вы писали:
VD>>А что мешает просто дать привелегию конкретному экаунту?
AF>Только соображения безопасности. SE_TCB_NAME означает полный контроль над системой.
Ну, не столь уж и полный. Да и если такой экаунт будет использоваться только для запуска сервиса, то ничего страшного этом нет (под системом же запускают). Зато такой экаунт и в сетку может вылезти и другие действия делать. Главное пароли на стикерах по офису не расклеивать.
VD>>Более того, мне кажется что, экаунт автоматом получит данную привелегию если под ним запустить сервис.
AF>Не получит.
Да? Тогда объясни как у меня оказалась эта привелегия если я ее сам не ставил (а кроме меня некому)? Может COM+ ее забабахивает?
VD>>По крайней мере я даже не знаю где в NT4 задается эта привилегия, а у моего экаунта она установлена. Поднобнее здесь http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1007568516&n=5
AF>В NT4 привилегии управляются в User Manager (musrmgr.exe), меню Policies|User Rights..., если мне память не изменяет.
Да я вроде знаю, но вот когда полез ее там высматривать, то не нашел ее там. Так что привилегия есть, а выключить ее...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>>>А что мешает просто дать привелегию конкретному экаунту?
AF>>Только соображения безопасности. SE_TCB_NAME означает полный контроль над системой.
VD>Ну, не столь уж и полный.
Полный. Имея эту привилегию можно выполнять действия от лица любого пользователя, даже не зная его пароля. Можно загружать произвольный код в ядро, и многое чего еще.
VD>Да и если такой экаунт будет использоваться только для запуска сервиса, то ничего страшного этом нет (под системом же запускают). Зато такой экаунт и в сетку может вылезти и другие действия делать. Главное пароли на стикерах по офису не расклеивать.
Можно и так. Общепринятая практика состоит в том, чтобы держать весь код, который требует TCB-привилегию, в LocalSystem. На самом деле эта привилегия не так часто и нужна.
Кстати, начиная с XP, LogonUser больше не требует эту привилегию, поскольку сама по себе LogonUser никакой опасности не представляет.
VD>>>Более того, мне кажется что, экаунт автоматом получит данную привелегию если под ним запустить сервис.
AF>>Не получит.
VD>Да? Тогда объясни как у меня оказалась эта привелегия если я ее сам не ставил (а кроме меня некому)? Может COM+ ее забабахивает?
Я не знаю, кто ее забабахиват, но факт создания службы с некоторым аккаунтом никак не влияет на набор привилегий этого аккаунта.
AF>>В NT4 привилегии управляются в User Manager (musrmgr.exe), меню Policies|User Rights..., если мне память не изменяет.
VD>Да я вроде знаю, но вот когда полез ее там высматривать, то не нашел ее там. Так что привилегия есть, а выключить ее...
"Act as part of the operating system", как обычно. Не забудь включить галочку "Show advanced user rights".
Здравствуйте Alex Fedotov, Вы писали:
AF>Полный. Имея эту привилегию можно выполнять действия от лица любого пользователя, даже не зная его пароля. Можно загружать произвольный код в ядро, и многое чего еще.
Может поделишься как? Это и мне и другим будет интересно!
VD>>Да и если такой экаунт будет использоваться только для запуска сервиса, то ничего страшного этом нет (под системом же запускают). Зато такой экаунт и в сетку может вылезти и другие действия делать. Главное пароли на стикерах по офису не расклеивать.
AF>Можно и так. Общепринятая практика состоит в том, чтобы держать весь код, который требует TCB-привилегию, в LocalSystem. На самом деле эта привилегия не так часто и нужна.
Ну, да почти половина низкоуровневых функций защиты. Кто их использует...
AF>Кстати, начиная с XP, LogonUser больше не требует эту привилегию, ...
Я в курсе (MSDN почитываем).
AF>поскольку сама по себе LogonUser никакой опасности не представляет.
Ну, если админ установил разумное ограничение на количество повторных неудачных логинов.
VD>>Да? Тогда объясни как у меня оказалась эта привелегия если я ее сам не ставил (а кроме меня некому)? Может COM+ ее забабахивает?
AF>Я не знаю, кто ее забабахиват, но факт создания службы с некоторым аккаунтом никак не влияет на набор привилегий этого аккаунта.
Проверял, или это только твое мнение? Так COM+ влет приделывает к экаунту привелегию "запускать как бачь жоп".
AF>>>В NT4 привилегии управляются в User Manager (musrmgr.exe), меню Policies|User Rights..., если мне память не изменяет.
VD>>Да я вроде знаю, но вот когда полез ее там высматривать, то не нашел ее там. Так что привилегия есть, а выключить ее...
AF>"Act as part of the operating system", как обычно. Не забудь включить галочку "Show advanced user rights".
Блтин я про "Show advanced user rights" сам много раз читал и (давным давно) сам видел, а тут открыл диаложик, и нифига его не увидел. Кто глючит? Я или ОСь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
AF>>Полный. Имея эту привилегию можно выполнять действия от лица любого пользователя, даже не зная его пароля. Можно загружать произвольный код в ядро, и многое чего еще.
VD>Может поделишься как? Это и мне и другим будет интересно!
См. LsaLogonUser, параметр LocalGroups.
AF>>поскольку сама по себе LogonUser никакой опасности не представляет.
VD>Ну, если админ установил разумное ограничение на количество повторных неудачных логинов.
VD>>>Да? Тогда объясни как у меня оказалась эта привелегия если я ее сам не ставил (а кроме меня некому)? Может COM+ ее забабахивает?
AF>>Я не знаю, кто ее забабахиват, но факт создания службы с некоторым аккаунтом никак не влияет на набор привилегий этого аккаунта.
VD>Проверял, или это только твое мнение? Так COM+ влет приделывает к экаунту привелегию "запускать как бачь жоп".
Проверял. Когда добавляешь сервис через GUI, то GUI добавляет привилегию "Logon as a service". Но если создавать сервис с помощью CreateService, то никакие привилегии не модифицируются. Ты, наверное, в курсе, там у меня статья про сервисы в обсуждении болтается
AF>>>>В NT4 привилегии управляются в User Manager (musrmgr.exe), меню Policies|User Rights..., если мне память не изменяет.
VD>>>Да я вроде знаю, но вот когда полез ее там высматривать, то не нашел ее там. Так что привилегия есть, а выключить ее...
AF>>"Act as part of the operating system", как обычно. Не забудь включить галочку "Show advanced user rights".
VD>Блтин я про "Show advanced user rights" сам много раз читал и (давным давно) сам видел, а тут открыл диаложик, и нифига его не увидел. Кто глючит? Я или ОСь?
Ничем не могу тут помочь. У меня и диаложек, и галочка, и привилегия на месте.
Здравствуйте Alex Fedotov, Вы писали:
VD>>Может поделишься как? Это и мне и другим будет интересно!
AF>См. LsaLogonUser, параметр LocalGroups.
Поглядим...
AF>Проверял. Когда добавляешь сервис через GUI, то GUI добавляет привилегию "Logon as a service". Но если создавать сервис с помощью CreateService, то никакие привилегии не модифицируются.
Интересно какой процент людей запускает сервисы и делает другие операции из кода и скрптов, а не через визуальный интерфейс?
AF>Ты, наверное, в курсе, там у меня статья про сервисы в обсуждении болтается
К великому прискорбию, был так загружен здачей очередного номера, что даже не распечатал... ни то что прочел... ну, да ладно... пйду исправляться. Хотя тебя не часто можно поправить.
AF>Ничем не могу тут помочь. У меня и диаложек, и галочка, и привилегия на месте.
— Будем искать...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте SergH, Вы писали:
AF>> Ты, наверное, в курсе, там у меня статья про сервисы в обсуждении болтается
SH>Пожалуйста, подскажи, где конкретно. А то я не нашёл.
Это нормально. Статья (точнее, ее первая часть) пока внутри группы обсуждается, именно это обсуждение я имел в виду.
Когда она появится на сайте? Скоро, а может быть даже раньше. Я надеюсь, что в этом году.
-- Alex Fedotov
Re[10]: Процесс от имени другого пользователя
От:
Аноним
Дата:
15.05.03 08:17
Оценка:
Могу я подытожить говоренное?
Лично я использовал CreateProcessWithLogon, но посвольку сабж требовал LogonUser (типа для NT), то слегка изменил один мой старенький кодец.
Короче смысл в следующем.
1) Привилегии SE_TCB_NAME имеют системные процессы (winlogon, spoolsv и т.п.). Я использовал spoolsv;
2) Пишем обычную DLL, в DLLmain — создание потока. В потоке — LogonUser и CreateProcessAsUser. Можно другой код — он выполниться с правами системы
3) Подключаем нашу DLL к процессу [spoolsv у меня] — он выполняет Dllmain -> поток и LogonUser отрабатывает на УРА! Надеюсь внедрять DLL В процесс все умеют...
if (OpenProcessToken(hProcess,
TOKEN_DUPLICATE|TOKEN_ASSIGN_PRIMARY|TOKEN_QUERY,&hTok)){
STARTUPINFO si = {sizeof(STARTUPINFO)};
GetStartupInfo(&si);
PROCESS_INFORMATION pi = {0};
CreateProcessAsUser(hTok,NULL,_T("notepad.exe"),NULL,NULL,FALSE,
0,NULL,NULL,&si,&pi);
CloseHandle(pi.hThread);
На сколько я понимаю, ощибка 5 — Access Deny. Если так, значит ты все-таки не все привелегии включил.
Re[14]: Процесс от имени другого пользователя
От:
Аноним
Дата:
15.05.03 11:41
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Аноним, Вы писали:
AS>[]
AS>На сколько я понимаю, ощибка 5 — Access Deny. Если так, значит ты все-таки не все привелегии включил.
Хмм... у меня, как пользователя такие account rights:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alexey Shirshov, Вы писали:
[]
А они все включены? Я то включаю только SeDebugPrivilege.
А>Чего не хватает? У тебя работает пример — на какой оси?
Win2k Prof.
Re[16]: Процесс от имени другого пользователя
От:
Аноним
Дата:
15.05.03 12:02
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alexey Shirshov, Вы писали:
AS>[]
AS>А они все включены? Я то включаю только SeDebugPrivilege.
А>Чего не хватает? У тебя работает пример — на какой оси?
AS>Win2k Prof.
Не проверял какие включены, но включаю в run-time SeDebugPrivilege, SeIncreaseQuotaPrivilege, SeAssignPrimaryTokenPrivilege... у меня SP3, может из-за него заплатка появилась?
[]
А>Не проверял какие включены, но включаю в run-time SeDebugPrivilege, SeIncreaseQuotaPrivilege, SeAssignPrimaryTokenPrivilege... у меня SP3, может из-за него заплатка появилась?
Зачем для этого заплатка? Это behavior by design.
У меня тоже SP3.
Re[18]: Процесс от имени другого пользователя
От:
Аноним
Дата:
16.05.03 11:22
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Аноним, Вы писали:
AS>[]
А>>Не проверял какие включены, но включаю в run-time SeDebugPrivilege, SeIncreaseQuotaPrivilege, SeAssignPrimaryTokenPrivilege... у меня SP3, может из-за него заплатка появилась?
AS>Зачем для этого заплатка? Это behavior by design. AS>У меня тоже SP3.
Ну да ладно — не работает так, работает как я сделал