用setuid运行git'post-receive'钩子失败了

Bla*_*ers 5 c++ git permissions ubuntu setuid

我有一个git存储库,需要以sudo的形式运行post-receive hook.我编译为测试它的二进制文件如下所示:

#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;
}
Run Code Online (Sandbox Code Playgroud)

geteuid()检索的所有者ID post-receive,然后试图对setuid.当与任何用户(包括超级用户)一起运行时,它以root身份正确运行脚本.但是,当由git hook触发时,系统无法设置uid.我试过运行chmod u+s post-receive 我也尝试了一些其他配置,但我的想法已经用完了.除非git触发它,否则它会在所有情况下都有效?

顺便说一句,平台Ubuntu Server 9.04(2.6.28-15),git1.6.0.4,gcc版本4.3.3(Ubuntu 4.3.3-5ubuntu4)

yan*_*nce 0

尝试从命令提示符运行您的程序