sudo로 후 수신 후크를 실행해야하는 git 저장소가 있습니다.setuid와 함께 git 'post-receive'후크가 실행되지 않습니다.
#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로 스크립트를 올바르게 실행합니다. 그러나 자식 후크에 의해 트리거 될 때 시스템은 uid를 설정하지 못합니다. 나는 실행을 시도했습니다 chmod u+s post-receive
다른 구성을 시도했지만 아이디어가 부족합니다. git이 그것을 트리거 할 때를 제외하고 모든 경우에 작동하는 이유는 무엇입니까? BTW
, 플랫폼 우분투 서버 9.04 (2.6.28-15), git1.6.0.4, GCC 버전 4.3.3 (우분투 4.3.3-5ubuntu4)
혹시 이것을 알아 냈습니까? – Ibrahim
하나의 문제는 오류 메시지를 인쇄하지만 system() 호출을 계속 실행한다는 것입니다. 또한 system() 호출의 결과를 무시한 다음 성공 (0) 상태로 종료합니다. –
@Blake : "모든 사용자와 함께"비트가 불분명합니다. - 사용자가 푸시하는 사용자로 실행될 때 프로그램이 올바르게 실행됩니까? git에서 실행되는 환경을 복제하는 가장 가까운 방법은 다음과 같을 것이라고 생각합니다 :'ssh hostname 'cd/path/to/repo; .git/hooks/post-receive'' – Cascabel