2009-09-02 2 views
5

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)

+0

혹시 이것을 알아 냈습니까? – Ibrahim

+0

하나의 문제는 오류 메시지를 인쇄하지만 system() 호출을 계속 실행한다는 것입니다. 또한 system() 호출의 결과를 무시한 다음 성공 (0) 상태로 종료합니다. –

+0

@Blake : "모든 사용자와 함께"비트가 불분명합니다. - 사용자가 푸시하는 사용자로 실행될 때 프로그램이 올바르게 실행됩니까? git에서 실행되는 환경을 복제하는 가장 가까운 방법은 다음과 같을 것이라고 생각합니다 :'ssh hostname 'cd/path/to/repo; .git/hooks/post-receive'' – Cascabel

답변

0

명령 프롬프트

에서 프로그램을 실행 해보십시오
+0

git을 통해 활성화되지 않으면 잘 작동합니다. –

1
  1. 망할 놈의 repo는 SUID 기능은 SSH (NO CAP_SETUID)
호출 명령에 대해 사용할 수 있습니다
  • SSH을 통해 추진하는 경우 NOSUID 옵션으로 장착 할 수있다 저장되는 파일 시스템 0

    어쨌든 당신이하려는 것은 매우 바람직하지 않습니다.

  • 1
    1. 프로그램을 데몬으로 실행하십시오.
    2. 소켓/명명 된 파이프/msgq에 대한 입력을 기다립니다.
    3. 후크에서 작업을 수행하는 데 필요한 정보를 사용하여 데몬에게 메시지를 보냅니다.
    4. 필요한 경우 상태로 후크로 메시지를 보냅니다.

    이 방법은 관리하기 쉽고 안전성이 높습니다.

    0

    부트 스트랩 스크립트를 작성해보십시오. ie

    #/usr/bin/sh 
    ./your_program 
    

    그런 다음 스크립트를 후크로 만드십시오.

    관련 문제