Сейчас на форуме: user99 (+2 невидимых) |
eXeL@B —› Оффтоп —› Запуск программы из службы с правами админа, а не system. |
Посл.ответ | Сообщение |
|
Создано: 24 мая 2012 23:46 · Личное сообщение · #1 Здравствуйте! Суть проблемы такова, что есть служба из которой я запускаю некое приложение и оно автоматически запускается от SYSTEM. Мне необходимо запустить от пользователя, админа (без пароля) либо текущего на компе у которого будут права админа. Система XP. Запускал из службы FAR, а из него пытался запускать что-нибудь с правами админа с помощью runas или PsExec. На разных компьютерах с этим геморрой, то пустые пароли нельзя, то отказано в доступе, то вторичный вход в службах отключен... Пишу на DELPHI, буду очень благодарен за подсказку или ссылку на пример. Спасибо! |
|
Создано: 25 мая 2012 09:14 · Личное сообщение · #2 как делает служба обновления nvidia, касперского и другие, создают юзера с рандомным известным паролем, потом службу запускают от имени этого юзера | Сообщение посчитали полезным: ToBad |
|
Создано: 25 мая 2012 09:20 · Личное сообщение · #3 |
|
Создано: 25 мая 2012 13:13 · Личное сообщение · #4 drone Спасибо! Нашёл примеры и на delphi через NetUserAdd, но тогда всё равно придется делать Runas, а с ним как я писал выше на определённых компах возникают сложности. Я так понимаю что system по привилегиям стоит выше админа, неужели породить процесс от его имени такая сложная задача для винды, я же не пытаюсь от имени гостя создать что-то с админ правами?... У меня из службы налажено взаимодействие с программой через файлмаппинг, так вот, что бы это начало нормально работать, мне тут подсказали делать подобным образом: Code:
Может подобным образом через установку SECURITY_ATTRIBUTES можно и с CreateProcess поступить, что бы она создавала от имени админа? |
|
Создано: 25 мая 2012 14:10 · Личное сообщение · #5 Нашёл целую Further more it needs to start when windows start and run either the interactive user is logged in or not, it does not need admin rights though. Here is the entire code I am using, I also tried "winlogon" desktop but I got the same result. Этот код может помочь мне или это другой случай?: Code:
|
|
Создано: 25 мая 2012 14:19 · Личное сообщение · #6 |
|
Создано: 25 мая 2012 14:36 · Личное сообщение · #7 Archer пишет: А зачем имперсонация, если процесс и так запускается от другого токена? Не знаю, перебираю все возможности для достижения цели, гуглю уже который день, но безрезультатно.... Сейчас |
|
Создано: 25 мая 2012 16:01 · Личное сообщение · #8 Запуск и изминение сервисов из коммандной строки ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 25 мая 2012 16:15 · Личное сообщение · #9 ToBad Смотри примеры на delphi и да права System выше прав админа. 468d_25.05.2012_EXELAB.rU.tgz - sample.rar |
|
Создано: 25 мая 2012 16:22 · Личное сообщение · #10 |
|
Создано: 25 мая 2012 17:03 · Личное сообщение · #11 F_a_u_s_t Спасибо за код, очень полезный будет, хотя результата я пока не достиг. run-ass - вроде как то, что нужно, под админом выбираю учётку админа и пустой пароль, запускает под админом. Под системой запускаю, выбираю тоже самое, не запускает, выдаёт ошибку Logon failure: unknown user name or bad password. То есть CreateProcessWithLogonW выполняется с ошибкой... run-as-system - работает хорошо для своих задач, то есть под админом запускает программы от system, но это не то, что нужно, нужно наоборот... |
|
Создано: 25 мая 2012 17:30 · Личное сообщение · #12 |
|
Создано: 27 мая 2012 07:01 · Личное сообщение · #13 ToBad Недавно ковырял тему runas чуть более чем плотно. В сервисе нужно использовать LogonUser и CreateProcessAsUser, естественно сервису откуда-то нужно знать пароль пользователя. Запустить от пользователя не зная пароля тоже можно, но это будут глюкавые неполноценные хаки. ----- PGP key | Сообщение посчитали полезным: ToBad |
|
Создано: 28 мая 2012 03:14 · Личное сообщение · #14 ntldr пишет: В сервисе нужно использовать LogonUser и CreateProcessAsUser Спасибо за наводку! ntldr пишет: нужно знать пароль пользователя Это не проблема, там где собираюсь применять паролей нет. Испытал много разных примеров, ничего не работало как нужно, в итоге нашёл код, который у кого-то не работал, а у меня заработал отлично: Code:
Напомню, только XP, паролей нет, хотя мне кажется или тут и с паролями сработало бы? |
|
Создано: 28 мая 2012 11:07 · Личное сообщение · #15 ToBad пишет: паролей нет. Пароль длджен быть. Вход с пустым паролем чаще всего запрещен. ToBad пишет: в итоге нашёл код, который у кого-то не работал, а у меня заработал отлично: Это как раз из серии глюкавых неполноценных хаков. Почему - не буду даже комментировать, думаю это очевидно. Будет работать непредсказуемо или вообще никак в более чем 100500 случаях. ----- PGP key |
|
Создано: 28 мая 2012 15:03 · Поправил: F_a_u_s_t · Личное сообщение · #16 ToBad Семпл Run_as_System рабочий, только для твоей задачи нужно поменять две строчки, но опять же там хак. if (LowerCase(ProcessEntry32.szExeFile) = 'winlogon.exe') then заменить на if (LowerCase(ProcessEntry32.szExeFile) = 'explorer.exe') then if UserName = 'SYSTEM' then заменить на if UserName = GetUserName then Где GetUserName имя текущего пользователя. Без хаков, чистое решение, создать пользователя с паролем и по окончанию его удалить, так делают большинство, ну или сделать текущему пользователю пароль, но за это надо руки отрывать, при каком нибудь ахтунге учетка может полететь. Ps. Семпл проверял на трех осях, работало стабильно. | Сообщение посчитали полезным: ToBad |
|
Создано: 28 мая 2012 16:09 · Личное сообщение · #17 F_a_u_s_t - спасибо за то, что всё разжевали! Я тоже пытался вместо SYSTEM вписывать пользователя, но про замену первой строчки не догадался... ntldr пишет: Вход с пустым паролем чаще всего запрещен. Да, это может оказаться проблемой, по этому как посоветовали буду делать LogonUser и CreateProcessAsUser, для созданного пользователя с установленным паролем. |
|
Создано: 28 мая 2012 17:17 · Поправил: F_a_u_s_t · Личное сообщение · #18 ToBad Не за что. И еще один маленький хинт, что бы не было хардкора на explorer можешь сделать проверку на тип прав, если не SYSTEM то значит юзер и в самом сервисе проверяй, если процесс исчез, то ищи любой другой процесс юзера, а так вполне рабочее решение. Add: Правильно что выбрал второй вариант, первый только годный запускать к к примеру консоль из своей прожки с нужными правами, для использования где то не годится ибо аверы и вирусы, а есчо куча шелов. |
eXeL@B —› Оффтоп —› Запуск программы из службы с правами админа, а не system. |