403 에러는 권한 관련 에러 입니다.
발생 원인은 다양합니다.
이번 포스팅에서는 apache, tomcat 구성에서 403 에러가 발생할 수 있는 몇가지 원인을 살펴보고
정상동작하게 하는 방법에 대해서 알아보겠습니다.
1. 발생원인 첫번 째 - Apache Directory 권한설정
apache 경로의 conf/httpd.conf 파일을 보시면
<Directory> 태그를 보실 수 있습니다.
해당 태그는 디렉토리의 권한을 설정할 때 사용하는데 deny 가 설정되어 있으면 접근에 문제가 될 수 있습니다.
<Directory "/정적데이터경로">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
위와같이 설정되어 있다면 문제가 되지 않겠지만
'Require all denied' 나 'Require ip 특정IP' 가 설정되어 있다면 접근제한이나 특정IP에 대한 접근만 허용하게 되기 때문에 403이 발생할 수 있습니다.
2. 발생원인 두번 째 - Directory 실행권한
리눅스의 경우 정적데이터 파일에 접근하는 Directory의 실행권한이 없는 경우 403 에러가 발생할 수 있습니다.
'ls -l' 명령어를 사용하면 해당 Directory의 권한을 확인할 수 있습니다.
예를들어 r(Read, 읽기), w(Write, 쓰기), x(eXecute, 실행) 권한이 주어져 있지 않다면 해당 권한을 주어 접근 가능하게 설정해야 합니다.
예를들어 a/b/c Directory에 정적데이터 파일이 있다면 아래와 같이 chmod 를 사용하여 권한을 주어야 합니다.
chmod 775 /a
chmod 775 /a/b
chmod 775 /a/b/c
3. 발생원인 세번 째 - Tomcat RequiredSecret
tomcat의 ajp 설정 시 RequiredSecret 이 설정되어 있는 경우 해당 secret key와 apache의 secret key가 일치하지 않거나, tomcat에만 설정되어 있는 경우 403 에러가 발생할 수 있습니다.
예를들어 아래와 같이 server.xml 에 ajp 설정이 되어 있다면 apache의 workers.properties 설정에도 같은 키 값을 설정해야 합니다.
[tomcat server.xml]
<Connector protocol="AJP/1.3"
address="0.0.0.0"
port="8007"
/*secret="testKey" secretRequired="true" // tomcat7 */
requiredSecret="testKey" //tomcat8
/*secret="testKey" // tomcat9, secretRequired="true" 는 default */
redirectPort="8443" />
Tomcat Version | secretKey 설정 방법 |
Tomcat7 | secretRequired="true" secret="testKey" |
Tomcat8 | requiredSecret="testKey" |
Tomcat9 | secret="testKey" |
requiredSecret 의 경우 tomcat8 버전대에서만 사용하고 이후 버전부터는 secretRequired="true"가 default로 적용되어 있어 secret="시크릿키" 만 설정하시면 됩니다.
[apache workers.properties]
worker.ajp13.port=8007
worker.ajp13.host=host ip주소
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.ajp13.secret=testKey
만일 tomcat server.xml 설정에 secretRequired="false" 로 설정되어 있는 경우
cve-2020-1938 Tomcat ajp 프로토콜 취약점에 문제가 될 수 있으니 설정을 하셔야 합니다.
cve-2020-1938 에 대해서는 아래의 Link를 참고하세요.
Link : https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35292
추가적으로 403의 원인은 아니지만 ajp 설정 시 발생할 수 있는 문제에 대해 알아보겠습니다.
4. (기타) Loopback 설정 확인
ajp 주소가 Loopback 으로 설정된 경우 apache와 tomcat의 하드웨어가 분리되어 있다면 문제가 발생하게 됩니다.
아래와 같이 tomcat ajp 설정의 address를 Loopback 으로 설정하면 외부와 통신을 할 수 없습니다.
<Connector protocol="AJP/1.3"
address="::1"
port="8007"
requiredSecret="testKey"
redirectPort="8443" />
위와 같이 설정 후 netstat 으로 listen 된 포트를 확인해보면 127.0.0.1:8007 로 listen 된 것을 확인 하실 수 있습니다.
이를 해제하시려면 address="0.0.0.0" 으로 설정합니다. ( :::8007 listen)
loopback 에 대해서는 아래의 link를 확인하세요!
Link : https://ko.wikipedia.org/wiki/%EB%A3%A8%ED%94%84%EB%B0%B1
'알짜정보 > IT정보' 카테고리의 다른 글
Jenkins & Git Lab Gradle Procject CI/CD 구성 방법 (1) | 2023.06.08 |
---|---|
VSCode 추천 Extensions 개발 능률 향상! (0) | 2022.12.07 |
Git GUI SourceTree 설치 및 연결 (2) | 2022.06.22 |
Bonobo Repository 생성 및 이클립스 연동 방법 (0) | 2022.06.08 |
windows server Git 설치 (0) | 2022.05.31 |
댓글