2011-08-10 10 views
3

MySQL 데이터베이스를 사용하여 클라이언트를 인증하는 클라이언트 용 Subversion 서버와 다른 사용자 (공급 업체)를 저장소에 인증하는 AuthUserFile (htpasswd)이 있습니다.Subversion Authz - 하나만 제외하고 모두 액세스 할 수 있습니다.

직원 * = rw에 액세스하고 공급 업체의 하위 트리에만 액세스 할 수 있어야합니다. (이런 식으로 뭔가가) :

[/] 
* = rw #employees 
vendor_user = 

[/sub-repo] 
vendor_user = rw 

불행하게도 SVN의 인증의 디자인은 사람이 조언이있는 경우 vendor_user =

처럼 더 제한 규정에도 불구하고 모든 것을 내려 * = rw 계단식 것, 나는 깊이 감사 수 있습니다!

답변

2

나는 이것이 가능하다고 생각하지 않지만, 그렇다고해도 이런 식으로하는 것이 좋습니다. 보안 관점에서 볼 때 블랭킷 읽기/쓰기 권한을 부여한 다음 선택적으로 사용 권한을 제거하는 것은 매우 위험합니다. 예를 들어 새로 추가 된 공급 업체의 사용 권한을 제거하는 것을 잊어 버린 경우 어떻게해야합니까? 또한

[/] 
@employees = rw 
vendor_user = 

:

[groups] 
employees = user1,user2,user3 

그런 다음 당신은 그냥 갈 수

아마도 당신은 "직원"그룹을 정의 할 수 아마 생성하는 스크립트를 작성하는 것이 바람직 할 것입니다 /를 유지 명부. 모든 사용자가 데이터베이스에 나열되므로 스크립트에서 데이터베이스를 쿼리하고 필요에 따라 새 액세스 목록을 생성 할 수 있습니다.

+0

조언 해 주셔서 감사합니다. 이 그룹을 구현하는 방법을 스크립팅하는 것이 왜 더 나은지 이해할 수 있습니다. – Excalibur

2

그룹은 확실히 갈 길이지만 여전히 문제가 있습니다. 사용자가 루트 폴더를 볼 수 없으면 볼 수있는 하위 폴더로 이동할 수 없습니다. 내가 최고 수준의 예에서 의미있는 폴더의 최소와의 repo 구조 이러한 이유로

:

[groups] 
core = user1, user2, user3 
client = user4 

[repo:/] 
* = r 

[repo:/trunk/client] 
@core = rw 
@client = rw 

[repo:/trunk/services] 
@core = rw 
@client = 

[repo:/trunk/api] 
@core = rw 
@client = r 

자레드는 다음과 같습니다 그런

trunk/ 
    client/ 
    services/ 
    api/ 

담요를 사용하여 권한을 설정 액세스, 즉 읽기 이것이 위험을 가지고 있다는 것을 고쳐야하고 사용자가 어디서도 파일을 삭제하지 않도록주의해야합니다 (파일을 지우는 것은 고통이므로 일반적으로 핵심 사용자에 대해서만 읽기를 사용합니다).하지만 설정하는 한 (예 : 트렁크 상단 미러링) authz 파일을 간단하게 유지하기 위해 브랜치 아래의 레벨 구조), 이는 작업을 수행하는 효과적인 방법입니다.