SVN의 커밋 후 후크에서 명령을 실행하려고 할 때 권한 문제

SVN의 커밋 후 후크에서 명령을 실행하려고 할 때 권한 문제

해결할 수 없을 것 같은 지루한 문제가 있습니다.

내가 뭘 하려는 거지?

post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass --submit-as=admin -p --target-groups=reviewers

내 사용자로 로그인한 bash에서 이것을 시도하면 모든 것이 괜찮습니다. 리뷰 게시, 게시 등 ==> 모든 권한 및 기타 기타 설정은 괜찮습니다.

SVN의 커밋 후 후크에서 이 작업을 시도하면 어떻게 되나요?

리소스가 커밋되었지만 svn 작업이 중단되었습니다. 실제로 커밋 후 후크가 완료되지 않았습니다.

문제가 무엇으로 좁혀졌나요?

사후 검토는 사후 커밋 후크를 실행하는 사용자(이 경우 www-data Apache 사용자)로 실행됩니다. 즉, www-data로 명령을 실행할 때:

sudo -u www-data post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass! --submit-as=admin -p --target-groups=reviewers -d

나는 다음과 같은 결과를 얻습니다(검토 후 명령 - DEBUG에서 -d 매개변수에 주목).

RBTools 0.4.1
Home = /home/borislav
Password for 'www-data':

이곳은 비밀번호가 입력될 때까지 기다리는 곳입니다. 커밋 작업이 완료되지 않고 그대로 유지됩니다. 나는 이미 이 문제에 대해 다른 사람들과 논의했습니다.이 게시물의 ReviewBoard의 Google 그룹.

반면에 디버그 출력으로 동일한 명령을 수행하지만 myuser로 수행하면 다음과 같은 결과를 얻습니다.

RBTools 0.4.1
Home = /home/borislav
HTTP GETting api/
HTTP GETting http://reviews.example.test/api/info/
Using the new web API
TTP GETting http://reviews.example.test/api/repositories/
HTTP GETting http://reviews.example.test/api/repositories/1/
HTTP GETting http://reviews.example.test/api/repositories/1/info/
HTTP GETting http://reviews.example.test/api/repositories/2/
HTTP GETting http://reviews.example.test/api/repositories/2/info/
HTTP GETting http://reviews.example.test/api/repositories/3/
HTTP GETting http://reviews.example.test/api/repositories/3/info/
HTTP GETting http://reviews.example.test/api/repositories/4/
HTTP GETting http://reviews.example.test/api/repositories/4/info/
Attempting to create review request on http://xxx.xxx.xxx.xxx/svn/testRepo2 for None
Submitting the review request as admin
HTTP POSTing to http://reviews.example.test/api/review-requests/: {'submit_as': 'admin', 'repository': 'http://xxx.xxx.xxx.xxx/svn/testRepo2'}
Review request created
Attempting to set field 'target_groups' to 'reviewers' for review request '22'
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'target_groups': 'reviewers'}
Uploading diff, size: 2316
HTTP POSTing to http://reviews.example.test/api/review-requests/22/diffs/: {'basedir': '/'}
Publishing
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'public': 1}
Review request #22 posted.

http://reviews.example.test/r/22/

따라서 실제로 게시/게시 등의 모든 작업이 작동합니다.

ReveiwBoard의 개발자 중 한 명이 다음과 같이 말했습니다."우리는 "''에 대한 비밀번호"라는 문자열을 표시하지 않습니다. 따라서 그것은 완전히 다른 것에서 나온 것입니다."

나는 그것이 일종의 실행 허가라고 확신합니다. Ubuntu Server에서 실행되어야 하므로 Debian을 생각해 보세요.

우분투의 "루트 로그인 없음" 패러다임과 관련이 있는지 궁금합니다.

SVN 서버가 Ubuntu Server에서 호스팅되기 때문에 실제로 옵션이 아닌 다른 Linux 배포판에서는 시도하지 않았습니다.

당신은 확인할 수 있습니다내가 가졌던 이 토론ReviewBoard의 고글 그룹에 있는 사람들과 함께요. 그만큼사후 검토바이너리는 다음 위치에 있습니다:/usr/local/bin/post-review

다음에 대한 권한을 추가해 보았습니다.www-데이터실행할 수 있도록사후 검토sudoers 파일에 있지만 운이 없습니다.

어떤 해결책을 생각할 수 있나요?

미리 감사드립니다, 보리슬라프.

답변1

비밀번호 프롬프트는 실제로 사후 검토가 아닌 svn에서 나옵니다. 사후 검토는 svn 바이너리를 호출하여 저장소에서 변경 사항을 검색합니다.

이미 인증했고 svn이 인증 정보를 저장했기 때문에 사용자에게는 비밀번호 프롬프트가 표시되지 않습니다. 아직 www-data 사용자로 이 작업을 수행하지 않았으므로 svn이 비밀번호를 묻습니다.

이 문제를 해결하는 가장 쉬운 방법은 www-data 사용자로 su하고 저장소에 인증하여 자격 증명을 캐시하는 것입니다.

관련 정보