ejecutando git 'post-receive' gancho con setuid falla

Tengo un repository git que necesita ejecutar un gancho post-recepción como sudo. El binary que compilé para probar esto se ve así:

#include <stdlib.h> #include <unistd.h> #include <stdio.h> int main() { int ret; ret = setuid(geteuid()); if(!ret) { fprintf(stderr, "error setting uid %d \n", ret); } system("[...command only sudo can access...]"); return 0; } 

El geteuid() recupera la identificación del propietario de la post-receive , luego intenta establecer. Al ejecutar esto con cualquier usuario (incluido el superusuario) ejecuta el script correctamente como root. Sin embargo, cuando se activa por el gancho git, los sistemas no pueden configurar el uid. He intentado ejecutar chmod u+s post-receive . También probé algunas otras configuraciones, pero me estoy quedando sin ideas. ¿Alguna razón por la que funcionaría en todos los casos, excepto cuando git lo active?

btw, plataforma Ubuntu Server 9.04 (2.6.28-15), git1.6.0.4, gcc versión 4.3.3 (Ubuntu 4.3.3-5ubuntu4)

  1. El sistema de files donde se almacena el git repo se puede montar con la opción nosuid
  2. Si está presionando sobre ssh, la capacidad de suid se puede deshabilitar para los commands invocados con ssh (sin CAP_SETUID)

En cualquier caso, lo que estás tratando de hacer es muy desaconsejable.

  1. Ejecute su progtwig como un daemon.
  2. Espere la input en un socket / named pipe / msgq.
  3. En el gancho, envíe un post a su daemon con la información que necesite para realizar la operación.
  4. Si es necesario, envíe un post al enganche con estado.

Es probable que esto sea más fácil de administrar y asegurar adecuadamente.

intente ejecutar su progtwig desde el símbolo del sistema

Intenta escribir un script de arranque. es decir

 #/usr/bin/sh ./your_program 

Luego haz que el script sea el gancho.