|
|
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! У меня обычное приложение в Трее, которое запускается при входе пользователя в систему Windows 7. Хочу из этой своей программы управлять службой (запускать/останавливать). Под WindowsXP/2003 прекрасно работает. Под Windows7/2008 при попытке получить доступ к службе выдает: 5 - Access Denied. Код: pascal 1. Здесь hService=0, а GetLastError выдает 5 - Access Denied. Если запустить программку от имени администратора (с выскакиванием UAC), то все ОК, доступ открыт. Видимо, в Windows 7 при обычном запуске программа запускается с пониженными правами (ниже чем в WinXP.) А как сделать, чтобы программа запускалась с достаточными для управления службой правами, и при этом выскакивания UAC не происходило, ведь программа загружается автоматом при входе пользователя в Windows и сворачивается в Tray. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 07:09 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Правильный ответ: никак. Бонус-ответ: надо изменить конфигурацию службы, дав право на её запуск/останов обычным пользователям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 07:24 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
А в свойствах службы в Delphi как называется это свойство? Можно ли его на стадии разработки сервиса установить таким, чтобы данную службу могли запускать обычные Пользователи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 08:30 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Это не свойство, это ACL. Меняется вызовом SetServiceObjectSecurity. Пример использования можно найти в гугле по "change windows service acl". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 11:01 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Спасибо, поразбираюсь. Всё что мне нужно, дать права службе, чтобы ее могли запускать обычные пользователи. Самое интересное, что из оснастку "services.msc" я запускаю под обычной учёткой и спокойно, без всяких UAC и прочего, могу запускать/останавливать службы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:28 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
m52, ты что-то путаешь. Право на SERVICE_START и SERVICE_STOP по умолчанию даётся только администраторам и LocalSystem . Посмотри внимательнее, MMC запускается под админом. Запрос UAC будет ещё при старте. А если запускать консоль под ограниченным пользователем, то там даже кнопки старт/стоп не будут доступны (для 95% тех служб, которые не меняли свои настройки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 19:42 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Нашел статейку http://msmvps.com/blogs/erikr/archive/2007/09/26/set-permissions-on-a-specific-service-windows.aspx При попытке выполнить "sc sdset..." выдает [SC] OpenSCManager: ошибка: 5: Отказано в доступе. Если cmd запустить из-под администратора, но под той же учеткой, то команда проходит, но пользователь по-прежнему не имеет доступа к управлению службой. Главное понять, под какой учеткой выполнять sdset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 21:41 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, В прошлом актуальность вопроса для меня отпала, но сейчас снова вернулся к этой теме. Вопрос был таким: как настроить службу чтобы все юзеры с обычными правами могли управлять службой (START, STOP, RESTART, CONFIG) ? Решение нашлось таким: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Код работает, вроде как надо, но хотелось бы прояснить некоторые моменты. Команда Код: plaintext Код: plaintext Код: plaintext Вопрос 1: не напортил ли я чего? Сильно глубоко не разобрался с данным вопросом, поэтому написал на форум. Не могу понять, как расшифровать строку: Код: plaintext WD в конце - это Everyone, а что такое AU;FA и почему они вначале, а не в конце? Вопрос 2: После переустановки службы, права где-то в винде сохраняются. Как сбросить эти права после деинсталляции службы, чтобы Windows "забыла" про них, чтобы после новой установки службы права стали как по-умолчанию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2020, 19:58 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
m52, https://habr.com/ru/post/75090/ https://docs.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-string-format (тут есть NO_ACCESS_CONTROL). Очень похоже на то, что вы просто грохнули список ACL и 'NO_ACCESS_CONTROL' означает то что означает - отсутствие каких-либо ACL. (S: - это признак системного ACL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2020, 20:07 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Я тоже так понял, что что-то грохнул. Вопрос в том, не будет ли каких-то проблем. Опасно ли то, что ACL теперь нету. В идеале, я бы хотел дать всем возможность запускать/останавливать/изменять конфигурацию службы. Но как изменить код (см.выше), чтобы оставить все права на службу, но изменить или добавить то, что мне нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2020, 20:36 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
Код выше я взял в Интернете и хотел спросить знающих людей вот что: после чтения QueryServiceObjectSecurity для чего нужно InitializeSecurityDescriptor? Наверное как раз здесь и обнуляются права доступа? Как можно изменить код, чтобы после чтения текущих прав на службу, изменить эти права или что-то в них добавить, а затем записать обратно? Собственно, мне это и нужно, но как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2020, 18:54 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
m52 Здравствуйте, В прошлом актуальность вопроса для меня отпала, но сейчас снова вернулся к этой теме. Вопрос был таким: как настроить службу чтобы все юзеры с обычными правами могли управлять службой (START, STOP, RESTART, CONFIG) ? Решение нашлось таким: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Код работает, вроде как надо, но хотелось бы прояснить некоторые моменты. Команда Код: plaintext Код: plaintext Код: plaintext Не могу понять, как расшифровать строку: Код: plaintext WD в конце - это Everyone, а что такое AU;FA и почему они вначале, а не в конце? Вопрос 2: После переустановки службы, права где-то в винде сохраняются. Как сбросить эти права после деинсталляции службы, чтобы Windows "забыла" про них, чтобы после новой установки службы права стали как по-умолчанию? 1. Все открытые хендлы надо закрывать; 2. Getmem/Free брать в блок try. 3. Если запуск будет не из под админа - то с таким набором желательных прав (ALL) получите 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2020, 00:32 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
YuRock Getmem/Free брать в блок try. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2020, 00:34 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
m52 чтобы все юзеры с обычными правами могли управлять службой Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2020, 15:27 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Огромное спасибо за помощь!!! Ваш код очень-очень пригодился. Как я понял, ваш код создает структурку типа PSecurityAttributes, в которой есть указатель lpSecurityDescriptor на дескриптор безопасности с прописанной DACL. А мне как раз это и нужно, т.к. далее в своем коде я вызываю SetServiceObjectSecurity с параметром DACL_SECURITY_INFORMATION, чтобы прописать содержимое DACL из lpSecurityDescriptor в объект службы. Я все правильно понял? Поправьте меня, если я где-то не прав. Вопросы: 1) В вашем коде функция ConvertStringSecurityDescriptorToSecurityDescriptor сама создает и выделяет память для LSecDesc и прописывает в него DACL? Т.е. до этого вызова мне не нужно запрашивать память GetMem под указатель для LSecDesc и вызывать InitializeSecurityDescriptor? Ведь в DestroySecAttr вы освобождаете место, занятое lpSecurityDescriptor 2) Константу SDDL_REVISION_1 нигде не могу найти. В каком модуле она? Прописал пока жёстко const SDDL_REVISION_1=1; 3) Ваш код я применил так (см.ниже). На вид всё отлично работает. Если найдете замечания в коде, пожалуйста, напишите. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Теперь любые пользователи могут работать со службой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2020, 11:43 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
До выполнения кода команда sc.exe sdshow MyService выдавала: Код: plaintext А после Код: plaintext Как я понял, теперь даны полные права на службу всем, и при этом SACL не испортил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2020, 11:48 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
m52 1) В вашем коде функция ConvertStringSecurityDescriptorToSecurityDescriptor сама создает и выделяет память для LSecDesc и прописывает в него DACL? Т.е. до этого вызова мне не нужно запрашивать память GetMem под указатель для LSecDesc и вызывать InitializeSecurityDescriptor? Ведь в DestroySecAttr вы освобождаете место, занятое lpSecurityDescriptor m52 2) Константу SDDL_REVISION_1 нигде не могу найти. Код: pascal 1. 2. 3. m52 Если найдете замечания в коде, пожалуйста, напишите. m52 Код: pascal 1. m52 Код: pascal 1. А вообще я бы переписал ваш код на вменяемые исключения. Иначе, когда у вас OpenService вернет ошибку вы об этом так и не узнаете Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2020, 18:29 |
|
||
|
Запуск сервиса из программы: 5 - Access Denied.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Учел все ваши замечания, добавил проверки, избавился от структуры SecurityAtributes (она мне действительно не нужна). Огромное человеческое спасибо!!! Теперь все работает отлично! Удачи и всех благ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2020, 19:44 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38225642&tid=2038580]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 528ms |

| 0 / 0 |
