我有一个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;
}
geteuid()
检索post-receive
的所有者ID,然后尝试setuid。当与任何用户(包括超级用户)一起运行时,它以root身份正确运行脚本。但是,当由git hook触发时,系统无法设置uid。我已经尝试过运行chmod u+s post-receive
我也尝试过其他一些配置,但我的想法已经用完了。除非git触发它,否则它会在所有情况下都有效?
btw,平台Ubuntu Server 9.04(2.6.28-15),git1.6.0.4,gcc版本4.3.3(Ubuntu 4.3.3-5ubuntu4)
答案 0 :(得分:1)
无论如何,你要做的事情是非常不可取的。
答案 1 :(得分:1)
这可能更容易管理和保护。
答案 2 :(得分:0)
尝试从命令提示符运行程序
答案 3 :(得分:0)
尝试编写引导脚本。即
#/usr/bin/sh
./your_program
然后使脚本成为钩子。