Перезапуск агента 1С на кластере не под админом или удаленный рестарт сервиса на Windows Server 2012 R2

Дано: виртуальная машина с ОС Windows Server 2012 R2 (функция сервера - кластер 1С). Установлен сервер 1С 8.3. В службах присутствует агент сервера 1С.
Задача: в некоторых случаях возникает необходимость сделать перезапуск агента 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.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет:

Отправить комментарий