J’ai un repository git qui doit exécuter un hook post-réception sous le nom de sudo. Le binary que j’ai compilé pour tester ceci ressemble à ceci:
#include #include #include 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; }
geteuid()
récupère l’ID de propriétaire de post-receive
, puis essaie de définir. Lorsque vous exécutez cela avec un utilisateur (y compris le super utilisateur), il exécute correctement le script en tant que root. Cependant, lorsqu’ils sont déclenchés par le hook git, les systèmes ne parviennent pas à définir le uid. J’ai essayé de faire fonctionner chmod u+s post-receive
J’ai également essayé d’autres configurations, mais je suis à court d’idées. Une raison pour laquelle cela fonctionnerait dans tous les cas, sauf quand git le déclenche?
btw, plateforme Ubuntu Server 9.04 (2.6.28-15), git1.6.0.4, gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
Dans tous les cas, ce que vous essayez de faire est très déconseillé.
Cela sera probablement plus facile à gérer et à sécuriser correctement.
essayez d’exécuter votre programme à partir de l’invite de commande
Essayez d’écrire un script bootstrap. c’est à dire
#/usr/bin/sh ./your_program
Ensuite, faites que le script devienne le crochet.