我有一個git倉庫需要運行post-receive鉤子作爲sudo。我編譯測試這個二進制樣子:運行git'post-receive'鉤子setuid失敗
#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鉤子觸發時,系統無法設置uid。我試過運行chmod u+s post-receive
我也嘗試了一些其他配置,但我的想法已經不多了。任何理由爲什麼它會在所有情況下工作,除非當git觸發它?
順便說一句,平臺Ubuntu服務器9.04(2.6.28-15),git1.6.0.4,gcc版本4.3.3(Ubuntu的4.3.3-5ubuntu4)
你有沒有想過這個? – Ibrahim 2009-12-23 07:09:21
一個問題是,您打印一條錯誤消息,但繼續執行system()調用。您也可以忽略system()調用的結果,然後以成功(0)狀態退出。 – 2010-02-06 04:18:04
@Blake:「與任何用戶一起使用」的位都不清楚 - 當你像用戶那樣運行時,程序是否正確運行?我認爲最好的方式來複制git所運行的環境:'ssh hostname'cd/path/to/repo; .git/hooks/post-receive'' – Cascabel 2010-04-03 16:53:00