Задача: в некоторых случаях возникает необходимость сделать перезапуск агента 1С, поэтому появилась задача сделать так, чтобы определенные доменные пользователи могли перезапускать службу (агента 1С), не заходя на сам сервер и не имея административных прав (это освобождает администратора от необходимости заходить на сервер и делать перезапуск).
Решение: для перезапуска агента пользователь на своем ПК будет запускать bat-файл, который содержит специальную команду удаленного перезапуска сервиса.
Описание
Настройку делаем в два этапа:
1. Подготовка сервера (кластера 1С) - назначение прав на сервис при помощи специальной утилиты.
2. Подготовка клиента (ПК пользователя) - создание bat-файла для удаленного перезапуска.
ЭТАП 1. Подготовка сервера (кластера 1С) - назначение прав на сервис при помощи специальной утилиты.
Первоначально нужно предоставить определенному пользователю право на перезапуск сервиса.
Самым удобным способом для нас оказалось это - задать права при помощи утилиты SubInACL (скачивайте ее с официального сайта Microsoft).
После установки утилиты SubInACL на кластере при помощи следующей команды можно посмотреть какие права назначены на сервис 1С агента:
subinacl.exe /service "1C:Enterprise 8.3 Server Agent (x86-64)" /display >c:\tmp\service1cAgent.txt
В файле service1cAgent.txt в итоге будет примерно такая информация:
================================================= +Service 1C:Enterprise 8.3 Server Agent (x86-64) ================================================= /control=0x0 /owner =system /primary group =system /audit ace count =1 /aace =everyone SYSTEM_AUDIT_ACE_TYPE-0x2 FAILED_ACCESS_ACE_FLAG-0x80 FAILED_ACCESS_ACE_FLAG-0x0x80 SERVICE_ALL_ACCESS /perm. ace count =7 /pace =system ACCESS_ALLOWED_ACE_TYPE-0x0 SERVICE_QUERY_CONFIG-0x1 SERVICE_QUERY_STATUS-0x4 SERVICE_ENUMERATE_DEPEND-0x8 SERVICE_START-0x10 SERVICE_STOP-0x20 SERVICE_PAUSE_CONTINUE-0x40 SERVICE_INTERROGATE-0x80 READ_CONTROL-0x20000 SERVICE_USER_DEFINED_CONTROL-0x0100 /pace =builtin\administrators ACCESS_ALLOWED_ACE_TYPE-0x0 SERVICE_ALL_ACCESS /pace =interactive ACCESS_ALLOWED_ACE_TYPE-0x0 SERVICE_QUERY_CONFIG-0x1 SERVICE_QUERY_STATUS-0x4 SERVICE_ENUMERATE_DEPEND-0x8 SERVICE_INTERROGATE-0x80 READ_CONTROL-0x20000 SERVICE_USER_DEFINED_CONTROL-0x0100 /pace =service ACCESS_ALLOWED_ACE_TYPE-0x0 SERVICE_QUERY_CONFIG-0x1 SERVICE_QUERY_STATUS-0x4 SERVICE_ENUMERATE_DEPEND-0x8 SERVICE_INTERROGATE-0x80 READ_CONTROL-0x20000 SERVICE_USER_DEFINED_CONTROL-0x0100 =================================================
Видно, что кроме администраторов никто особых прав не имеет.
Нам нужно назначить права на данный сервис нужному пользователю, например, mydomain\user1.
Сначала попробовали эту команду:
subinacl.exe /service "1C:Enterprise 8.3 Server Agent (x86-64)" /grant=mydomain\user1=PTO
При попытке что-то сделать с сервисом почти всегда получали ответ об отсутствии доступа:
В результате экспериментов нашли нужную команду:
subinacl.exe /service "1C:Enterprise 8.3 Server Agent (x86-64)" /grant=mydomain\user1=LQSETOPI
Эту команду необходимо запускать на каждого пользователя, которому нужно предоставить права на перезапуск сервиса.
Результат выполнения команды:
LQSETOPI - перечисление предоставляемых пользователю прав.
Расшифровка прав для данной команды:
При зачитывании информации о сервисе первой командой в текстовом файле получаем список назначенных прав:
/pace =mydomain\user1 ACCESS_ALLOWED_ACE_TYPE-0x0 SERVICE_QUERY_CONFIG-0x1 SERVICE_QUERY_STATUS-0x4 SERVICE_ENUMERATE_DEPEND-0x8 SERVICE_START-0x10 SERVICE_STOP-0x20 SERVICE_PAUSE_CONTINUE-0x40 SERVICE_INTERROGATE-0x80 READ_CONTROL-0x20000
2. Подготовка клиента (ПК пользователя) - создание bat-файла для удаленного перезапуска.
У пользователя имеющего право на перезапуск сервиса используем утилиту PsService.exe (скачивайте ее с официального сайта Microsoft, установки она не требует).
Проверить доступ к сервису на удаленном сервере можно при помощи команды ниже.
Чтение сервиса под пользователем с другой машины:
psservice \\SRV-NODE -u mydomain\user1 query "1C:Enterprise 8.3 Server Agent (x86-64)"
Где \\SRV-NODE - это имя сервера (кластера 1С), на котором нужно произвести перезапуск 1С агента.
Непосредственно перезапуск делается следующей командой.
Команда перезапуска сервиса под пользователем, у которого назначены вышеуказанные права:
psservice \\SRV-NODE restart "1C:Enterprise 8.3 Server Agent (x86-64)"
На перезапуск сервиса может уйти около одной минуты.
При успешном выполнении команды получаем:
Для удобства делаем батник, запускающий данную команду (например, Restart1CAgentOnCluster.bat) и кладем его там же где и утилита psservice.
Содержимое файла Restart1CAgentOnCluster.bat:
@echo Restart 1C Agent On Cluster psservice \\SRV-NODE restart "1C:Enterprise 8.3 Server Agent (x86-64)" @pause
Результат выполнения bat-файла на ПК пользователя:
СКАЧАТЬ ПРИМЕР BAT-ФАЙЛА с Инфостарт
Пользователю понадобится для файла:
- PsService.exe - утилита командной строки.
- Restart1CAgentOnCluster.bat - должен лежать в той же папке, что и файл PsService.exe
Т.е. достаточно предоставить пользователю два этих файла и он сможет по запросу делать перезапуск 1С агента на сервере (например, если что-то у кого-то зависло в 1С, а админ в отпуске!)
(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.
Комментариев нет:
Отправить комментарий