2012-12-19 2 views
1

로컬 수신 확인을 가져오고 Java 서버를 다시 시작하는 bash 스크립트를 호출하는 수신 후크가 있습니다.Git 사후 수신 후크가 실패합니다 : 작동이 허용되지 않습니다.

여기에 포스트받을 후크의 소유자 정보입니다 :

-rwsr-x--x 1 cyril devs 676 19 dec. 14:45 post-receive 

당신이 볼 수 있듯이, 내가 다른 사용자도 cyril/devs로 실행하기 위해이 스크립트에 setuid bit을 설정합니다. 또한 setuid.

내가 서버에 뭔가를 누르면 :

-rwsr-x--- 1 cyril devs 1515 19 dec. 14:41 start_dev 

참고 :

echo "Running post-receive hook" 
echo "Server will be up and running in about 1 minute" 
/home/project/start_dev restart & 

내 스크립트 start_dev 그 권한이 :

이 스크립트의 내용은 오히려 간단하다 cyril 계정으로 완벽하게 작동합니다. 다른 사람이, 타 계정으로 서버에 누르면

, 그들은 가지고 :

remote: /home/project/start_dev: line 52: kill: (11490) - Operation not allowed 

(킬 (kill) 인스턴스를 중지하는 데 사용됩니다.)

가이 오류가 왜 , 스크립트는 사용자가 아닌 cyril으로 실행해야합니다. 따라서이 인스턴스를 종료 할 권한이 있어야합니다. 맞습니까?

내가 뭘 잘못하고 있니?

도움 주셔서 감사합니다.

답변

1

분명히 대부분의 Linux 배포판은 셸 스크립트에 대해 setuid을 사용하지 않을 수 있습니다. 더 많은 정보는 here이고 setuid Wikipedia page입니다. setuid를 기능은 많은 경우에 매우 유용하지만 setuid를 속성이 설계 신중하지 실행 프로그램에 할당 된 경우

, 그것의 부적절한 사용은 보안 위험을 초래할 수 있습니다. 잠재적 인 보안 문제로 인해 많은 운영 체제는 실행 가능한 셸 스크립트에 적용될 때 setuid 특성을 무시합니다. 그 훅으로

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() 
{ 
    setuid(0); 
    system("/path/to/script.sh"); 

    return 0; 
} 

그런 setuid 결과 C 프로그램을하고 사용하십시오 Tuxation 페이지에서

한 가지 가능한 솔루션은 다음을 수행하는 것입니다. 이 비록 Tuxation 페이지에 그 후이 해설도있다 : setuid를 매우 안전하지 않습니다와 쉘 스크립트를 실행 말했다 모두와 함께

, 그리고 배포판 디자이너는이 때 무엇을하고 있었 꽤 좋은 생각을했다 많은 사람들이 그것을 막았습니다.

+0

와우 : 어떻게해야합니까? 아이디어가 있습니까? –

+0

Tuxation에서 추가 된 용액. – asm

+0

팁 주셔서 감사! :) –

관련 문제