Git post-receive hook для обновления локального клона, принадлежащего другому пользователю - PullRequest
10 голосов
/ 23 декабря 2009

Я пытаюсь настроить перехват git post-receive таким образом, чтобы при получении коммита обновлялся еще один клон хранилища на машине (т. Е. Делает git pull origin master). Я использую Gitosis для обслуживания хранилища, и поэтому я считаю, что хук после получения будет запускаться от имени пользователя gitosis, тогда как хранилище, которое я хочу обновить при получении, принадлежит www-data. Как мне это сделать?

Я слышал о setuid скриптах, но я не уверен, может ли это быть угрозой безопасности? И если это не угроза безопасности, как бы я поступил так? Я предполагаю, что я бы сделал что-то вроде создания сценария, принадлежащего www-data, и сделал бы его исполняемым во всем мире и включил бы бит setuid? Я полагаю, что этот сценарий был бы в значительной степени безвредным, поскольку все, что он делает, это обновляет хранилище, но я хочу быть уверен. Спасибо!

Редактировать: Есть ли способ сделать это с помощью sudo? Будет ли это безопаснее, чем setuid? Я имею в виду, я не думаю, что есть большая проблема с setuid, если пользователь не является пользователем root, но все равно кажется, что мне придется перепрыгнуть через несколько обручей, чтобы запустить скрипт setuid.

Второе редактирование: кажется, что я мог бы быть в состоянии сделать это с некоторой магией /etc/sudoers и sudo -u. Возможно, мне следовало бы опубликовать это вместо ServerFault, но, по крайней мере, я немного узнал об этом.

Ответы [ 2 ]

14 голосов
/ 23 декабря 2009

ИМХО Это должно быть на сервере, но, тем не менее, вот ответ;

Добавить:

gitosis ALL=(www-data) NOPASSWD: /path/to/git

в / etc / sudoers

и выполните команду как sudo -u www-data <whatever the command is>

4 голосов
/ 21 июня 2012

Обратите внимание, что я использую git имя пользователя, поэтому, если вы используете gitosis или любое другое имя пользователя, просто введите свое!

В консоли с root пользователь выполняет эту команду:

visudo

Откроется редактор "vi". Добавьте эти строки:

Defaults:git    !authenticate
git ALL=(www-data) ALL

В результате файл (который открывается в редакторе "vi" с помощью вызова visudo) должен выглядеть следующим образом:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset
Defaults:git    !authenticate

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
git ALL=(www-data) ALL


# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

Затем нажмите CTRL + O, чтобы сохранить файл, затем нажмите Enter, чтобы принять имя файла (бла-бла-бла), а затем нажмите CTRL + X, чтобы закрыть редактор «vi».

Вуаля! Теперь git пользователь может выполнять команды как www-data user:

sudo -u www-data git pull origin master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...