본문 바로가기
IT

SVN - Permission Denied 문제.

by 내꿈은한량 2012. 1. 17.
최근 프로젝트에서 사용준인 SVN 서버에서 파일을 commit할 때 아래와 같은 문제가 발생했다.

$ svn commit -m "" 
svn: Commit failed (details follow):
svn: Can't open file '/path/to/my/svn/repos/project/db/txn-current-lock': Permission denied


이 문제는 두가지 상황일 경우 발생하게 된다.

1. 파일 권한 문제.

SVN 서버가 실행된 사용자가 "/path/tomy/svn/repos/project/db/txn-current-lock" 파일에 쓰기를 할 수 없는 상태일 때, 발생한다.

해결책은 svn repository 로 사용하는 "/path/tomy/svn/repos" 부터 SVN 서버를 실행하는 사용자가
읽기, 쓰기를 할 수 있는 권한을 주는 방법으로 해결이 가능하다.

1-1. repository 디렉터리의 소유 권한을 SVN 서버를 실행하는 사용자로 변경.
만약, SVN 서버를 apache http server 로 구동하는 형태라면, 아래 명령어로 해결할 수 있을 것이다.
(CentOS 6.2 기준)

$ chown -R apache.apache /path/tomy/svn/repos



1-2. repository 디렉터리에 소유자 뿐만 아니라, 같은 그룹(g), 다른 사용자(o)에게 쓰기 권한을 부여.

$ chmod -R go+w /path/tomy/svn/repos/




2. SELinux 설정 문제.

CentOS/Fedora 에서 SVN을 apache http server 로 구동할 경우 국한된 문제일 수도 있는데,
(다른 OS에서는 아직 확인을 못했다.)
CentOS 6.2 에는 보안 기능을 강화한 SELinux(Security-Enhanced Linux) 보안 모듈로 인해
Apache Http Server 에서는 파일에 대한 읽기만 가능하고 쓰기 기능 자체는 불가능하도록 미리 설정되어 있다.

따라서, 1번의 파일 권한 문제를 해결했다고 하더라도, SELinux 기능이 활성되어 있는 이상, SELinux 설정을
바꾸지 않는다면, 원하는 해결책을 얻을 수 없을 것이다. 

SELinux 의 옵션을 변경하는 방법은 아래의 두가지이다.

2-1. httpd_sys_content_rw_t 로 svn repository 를 설정하기.

chcon -R -t httpd_sys_content_rw_t /path/tomy/svn/repos/



2-2. SELinux 의 httpd_unified 설정을 사용하도록 바꾸기.

setsebool -P httpd_unified=1



http 서버가 해야 하는 역할들일 많다면, 2-2 옵션을 적용하는 것을 추천한다.


참고

- SVN Permission Denied 문제에 대한 stackoverflow 답변 : http://stackoverflow.com/a/6167402
- SELinux 에 대하여 : http://centos.pe.kr/owiki/index.php?url=centos&no=11