2011-03-28 6 views
0

나는 'foo'사용자에게 속한 svn 저장소를 가지고 있고 아파치를 통해 접근한다. 그리고 foo가 소유하고있는 디렉토리에서 post-commit hook에서 svn update를 실행하려고한다.svn 업데이트 래퍼에서 setuid가 작동하지 않습니까?

나는 foo가 소유 한 C 래퍼를 만들고 http://subversion.apache.org/faq.html#website-auto-update에 제안 된대로 suid 비트를 설정했습니다.이 커밋은 post-commit 스크립트에 의해 호출되어야하며 사용자 www-data가 실행해야합니다.

아직 빈 환경에서 사용자 www-data의 래퍼를 실행할 때 svn update를 사용자 foo로 호출하지만 설명이없는 svn이 사용자 www-data의 암호를 묻는 메시지를 표시합니다.

svnupdater.c라는 래퍼의 코드는 공식 FAQ에서 제안한 것과 동일합니다 (물론 정확한 경로와 동일합니다). 그것은 사용자 foo에 의해 생성되고 컴파일됩니다. SUID 비트를 설정 한 후, LS는 -l 내부/후크 다른 사람들을 보여줍니다

-rwxr-xr-x 1 www-data foo 74 2011-03-28 12:54 post-commit 
-rwsr-sr-x 1 foo  foo 7144 2011-03-28 12:16 svnupdater 

그때 '스와 www가 데이터'를 실행하면 'ENV - ./svnupdater'(sh 또는 bash가에서 중)

foo 20260 3.7 0.8 14008 4492 pts/0 S+ 12:18 0:00 svn update /home/foo/foosvn 

을하지만 여전히 나는 나를 자극 SVN 업데이 트를 볼 수 있습니다 : PS의 보조가 제대로 표시 통화를 포스트 커밋 할 때 작동하지 않습니다 모든 것을

Authentication realm: <http://xxxxxx> xxxxx 
Password for 'www-data': 

물론.

난 정말이 전략을 제안 공식이기 때문에 문제가, 어디 이해할 수없는 것,하지만 ... SVN 업데이트입니다 setuid를 우회하고 여전히 실제 사용자를 사용하여 같은

답변

1

외모를 본다 나는 해결책을 찾은 것처럼.

wrapper 안에 (this처럼) --config-dir 매개 변수를 추가해야합니다. 그렇지 않으면 svn이 올바른 디렉토리의 인증 파일을 그렇지 않으면 읽을 수 없기 때문입니다.

저는 이것이 아파치 FAQ에 문서화되어야한다고 생각합니다.