2009-12-23 9 views
9

Estoy tratando de configurar un gancho post-recepción git de modo que cuando se recibe una confirmación, se actualice otro clon del repositorio en la máquina (es decir, hace un git pull origin master). Estoy usando gitosis para servir el repositorio y, como tal, creo que un gancho post-recepción se ejecutará como el usuario gitosis, mientras que el repositorio que deseo actualizar en una recepción es propiedad de www-data. ¿Cómo debo hacer esto?Git gancho post-recepción para actualizar un clon local propiedad de un usuario diferente

He escuchado acerca de las secuencias de comandos setuid pero no estoy seguro de si esto puede ser un riesgo de seguridad? Y si no se trata de un riesgo para la seguridad, ¿cómo haré esto? Supongo que haré algo así como hacer que el script sea propiedad de www-data y convertirlo en ejecutable en el mundo y habilitar el bit setuid. Supongo que este script sería bastante inofensivo, ya que todo lo que hace es actualizar el repositorio, pero quiero estar seguro. ¡Gracias!

Editar: ¿Hay alguna manera de hacer esto usando sudo? ¿Sería eso más seguro que setuid? Quiero decir, no creo que haya mucho problema con setuid si el usuario no es root, pero de todos modos parece que tendría que saltar unos pocos aros para ejecutar una secuencia de comandos setuid.

Segunda edición: Parece como si podría ser capaz de hacer esto con un poco de magia y /etc/sudoerssudo -u. Tal vez debería haber publicado esto en ServerFault en su lugar, pero al menos he aprendido un poco de este esfuerzo.

Respuesta

14

En mi humilde opinión Esto debería estar en serverfault, pero aquí está la respuesta sin embargo;

Añadir:

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

a/etc/sudoers

y ejecutar el comando como sudo -u www-data <whatever the command is>

+0

Sí, el tipo de figura que era más adecuado para ServerFault después de la publicación, pero por lo general vio cosas git aquí. ¿Estás seguro de que la línea permite que la gitosis se ejecute como www-data? No estoy seguro de que sea así.En este momento estoy tratando de hacer algo como esto en/etc/suiders: gitosis ALL = (www-data)/ruta/a/script y la secuencia de comandos tiene el comando git pull. – Ibrahim

+0

Por cierto, ¿cómo se mueve una pregunta como esta a serverfault? – Ibrahim

+0

Los movimientos son realizados por moderadores. – Kimvais

3

en cuenta que estoy usando git nombre de usuario, por lo que, si está utilizando gitosis o cualquier otro nombre de usuario, ¡solo complete el de usted!

En la consola con raíz usuario ejecute este comando:

visudo 

El "vi" editor se abrirá. Añadir estas líneas:

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

En consecuencia el archivo (que se abre en el editor "vi" llamando "visudo") debería tener este aspecto:

# /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 

A continuación, pulse CTRL + O para guardar la archivo, luego presione Entrar para aceptar el nombre del archivo (bla bla bla), luego presione CTRL + X para cerrar el editor "vi".

Voila! Ahora git usuario puede ejecutar comandos como www-data usuario:

sudo -u www-data git pull origin master 
Cuestiones relacionadas