Для разработки игрового сервера я хочу перенести git push
свою текущую стабильную версию на частный VPS. Внутри git-hook receive
должно произойти следующее
sudo systemctl stop myserver
dotnet publish --configuration release
sudo systemctl start myserver
Внутри myserver.service скомпилированный двоичный файл запускается от имени пользователя, имеющего доступ к git-репозиторию.
Моя идея теперь заключалась в том, чтобы заменить первую и последнюю строку скриптами, принадлежащими пользователю root и доступными для чтения всем, чтобы git-hook receive
превратился в
sudo stop-server.sh
dotnet publish --configuration release
sudo start-server.sh
В качестве последнего шага я хочу разрешить пользователю привилегии sudo-вызова обоих скриптов, но ничего больше. Кроме того, скрипты, выполняемые без sudo, запрашивают пароль пользователя, поскольку взаимодействие невозможно.
решение1
Вы можете добавить следующее /etc/sudoers
(или создать новый файл внутри /etc/sudoers.d/
):
<username> ALL=(ALL) NOPASSWD: /path/to/script
Это сделало бы запуск sudo /path/to/script
от имени <username>
пользователя без пароля. Обратите внимание, что это небезопасно, если содержимое скрипта может быть изменено злонамеренным пользователем, и вам лучше попытаться вообще избежать необходимости в привилегиях root.