Linux/CentOS Stream 9
SVN https 서버 설정 (Centos Stream 9)
Ryan's Tech Note
2024. 5. 10. 21:13
SVN 을 svn:// 로 사용하거나 http:// 로 사용하는 경우 소스 코드가 평문으로 전송되어 안전하지 않다. 대안은 svn+ssh:// 를 사용하거나 https:// 를 사용하도록 설정하는 것인데 이 글에서는 https:// 를 사용하도록 설정해 보겠다.
이 방법은 apache 가 이미 설치되어 있고, SSL 도메인이 apache 에 이미 설정되어 있다고 가정하고 이 apache 에 SVN 을 연동하는 방법이다.
svn 설치
dnf -y install svn
OS 버전이 맞다면 아래 스크립트에서 프로젝트명만 수정해서 Copy & Paste 해도 된다.
#!/bin/bash
# 1. 필요한 패키지 설치: SVN, Apache SVN 모듈
sudo dnf install -y subversion mod_dav_svn
# 2. SVN 저장소 디렉토리 생성
sudo mkdir -p /home/svn
# 3. 저장소 초기화 (project_name 프로젝트)
sudo svnadmin create /home/svn/project_name
# 4. 프로젝트 디렉토리 구조 생성(trunk, branches, tags)
sudo svn mkdir file:///home/svn/project_name/trunk file:///home/svn/project_name/branches file:///home/svn/project_name/tags -m "Initial directory structure"
# 5. Apache 사용자에게 저장소 폴더의 소유권 부여
sudo chown -R apache:apache /home/svn/project_name
이 설정을 해야 권한 오류가 없어진다. (500 에러 등)
# 6. 디렉토리와 파일의 적절한 권한 설정
sudo find /home/svn/project_name -type d -exec chmod 770 {} \;
sudo find /home/svn/project_name -type f -exec chmod 660 {} \;
# 7. SELinux 컨텍스트 설정
sudo chcon -R -t httpd_sys_rw_content_t /home/svn/project_name
sudo chcon -t httpd_sys_rw_content_t /home/svn/svn-auth-accounts
sudo chcon -t httpd_sys_rw_content_t /home/svn/authz-file
SVN 사용자를 추가하고 권한 제어를 하도록한다.
# 8. 사용자 인증정보 파일 생성 및 첫 사용자 추가
sudo htpasswd -cmb /home/svn/svn-auth-accounts svn_user 'password'
# 9. SVN 접근 제어 파일 생성 및 설정
echo "[/]" > /home/svn/authz-file
echo "* = r" >> /home/svn/authz-file
echo "[project_name:/]" >> /home/svn/authz-file
echo "svn_user = rw" >> /home/svn/authz-file
sudo chown apache:apache /home/svn/authz-file
# 10. Apache에 SVN 설정 추가
echo "<Location /svn>" | sudo tee /etc/httpd/conf.d/subversion.conf
echo " DAV svn" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo " SVNParentPath /home/svn" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo " AuthType Basic" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo " AuthName \"Subversion Repository\"" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo " AuthUserFile /home/svn/svn-auth-accounts" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo " AuthzSVNAccessFile /home/svn/authz-file" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo " Require valid-user" | sudo tee -a /etc/httpd/conf.d/subversion.conf
echo "</Location>" | sudo tee -a /etc/httpd/conf.d/subversion.conf
# 11. Apache 서비스 재시작
sudo systemctl restart httpd
# 12. 설정 파일 확인
echo "Review Apache SVN Configuration:"
sudo cat /etc/httpd/conf.d/subversion.conf
echo "Review SVN Authz Configuration:"
sudo cat /home/svn/authz-file
echo "Review SVN Auth Accounts:"
sudo cat /home/svn/svn-auth-accounts
# 주석: 새로운 SVN 사용자 추가 방법
# 새 SVN 사용자를 추가하고 싶다면, 아래 명령을 사용하세요.
# sudo htpasswd -m /home/svn/svn-auth-accounts new_username
# 이 명령은 기존 사용자 목록에 새 사용자를 추가하고 비밀번호를 설정할 수 있게 합니다.
Eclipse 에서 SVN 연동됨을 확인하였다.
2025-05-18 보완사항
전체 업데이트를 하니, checkout 할 때 왠지 인증오류가 자꾸 떠서
svn: E175013: '/svn/myrepo/!svn/rvr/18'의 접근이 금지되었습니다 / [Sun May 18 13:16:48.155920 2025] [:error] [pid 128184:tid 128231] [client 192.168.0.1:53822] [client 192.168.0.1] ModSecurity: Warning. Match of "within %{tx.allowed_methods}" against "REQUEST_METHOD" required. [file "/etc/httpd/modsecurity.d/activated_rules/REQUEST-911-METHOD-ENFORCEMENT.conf"] [line "44"] [id "911100"] [msg "Method is not allowed by policy"] [data "PROPFIND"] [severity "CRITICAL"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/210/272/220/274"] [tag "PCI/12.1"] [hostname "mydomain.com"] [uri "/svn/myrepo/!svn/rvr/18"] [unique_id "aClfMBLYPGmwahdrL_7WugAAANM"] [Sun May 18 13:16:48.157658 2025] [:error] [pid 128184:tid 128231] [client 192.168.0.1:53822] [client 192.168.0.1] ModSecurity: Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file "/etc/httpd/modsecurity.d/activated_rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "153"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [severity "CRITICAL"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "mydomain.com"] [uri "/svn/myrepo/!svn/rvr/18"] [unique_id "aClfMBLYPGmwahdrL_7WugAAANM"] [Sun May 18 13:16:48.158081 2025] [:error] [pid 128184:tid 128231] [client 192.168.0.1:53822] [client 192.168.0.1] ModSecurity: Warning. Operator GE matched 5 at TX:inbound_anomaly_score. [file "/etc/httpd/modsecurity.d/activated_rules/RESPONSE-980-CORRELATION.conf"] [line "92"] [id "980130"] [msg "Inbound Anomaly Score Exceeded (Total Inbound Score: 5 - SQLI=0,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): individual paranoia level scores: 5, 0, 0, 0"] [ver "OWASP_CRS/3.3.5"] [tag "event-correlation"] [hostname "mydomain.com"] [uri "/svn/myrepo/!svn/rvr/18"] [unique_id "aClfMBLYPGmwahdrL_7WugAAANM"]
다음과 같이 해결하였다.
sudo nano /etc/httpd/modsecurity.d/svn-exceptions.conf
# SVN 경로에 대해서만 필요한 WebDAV 메소드 허용
SecRule REQUEST_URI "@beginsWith /svn/" \
"id:1000,\
phase:1,\
t:none,\
nolog,\
pass,\
ctl:ruleEngine=DetectionOnly,\
chain"
SecRule REQUEST_METHOD "@within PROPFIND REPORT OPTIONS MERGE MKACTIVITY" \
"t:none"
저장하고
systemctl restart httpd
도움이 되었다면 좋아요, 댓글, 비밀 댓글로 커피한잔 사주심 감사히 먹겠습니다.