본문으로 바로가기

Apache + Tomcat 여러대 운영시 SELinux 문제 해결(403 Permission, Port)

category Server/linux 2019.01.17 12:00

아파치 톰캣 연동중 8009포트를 제외한 별도로 설정한 포트를 사용할 경우 SELinux 보안때문에 연결이 되지 않음을 알았습니다.

그래서 SELinux로 인하여 영향을 받게 되는 것들을 까먹기 전에 정리 하려고 포스팅 합니다.


1. SELinux 보안 사용 안함 설정

[root@*** ~]# vi /etc/selinux/config 

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

# SELINUX=enforcing

SELINUX=disabled 

# SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted


위의 같이 사용할 경우 403 에러등의 문제와 더불어 말한 port문제가 말끔히 해결이 됩니다.

하지만 이렇게 할 경우 보안상 위험에 노출되게 됩니다.(추천안함)


2. 403 Permission 문제 해결

Apache + Tomcat 연동시 폴더/파일의 권한을 755로 해줬음에도 불구하고 403 에러가 뜨는 경우가 있습니다.(이것도 selinux 영향일듯 하다)

구글링 해보면 selinux가 http접근시 httpd_sys_content_t 로 된 폴더/파일만 755 권한을 부여준다는것을 알았습니다.

[root@* was]# ll -Z

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 tomcat-**

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 tomcat-**

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 tomcat-**

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 tomcat-**


위의 WAS 경로에  httpd_sys_content_t 가 보이지 않을 경우 아래의 명령어로 해결 하시면 됩니다.

[root@*** ~]#  chcon -R -h -t httpd_sys_content_t 폴더경로


2. SELinux 보안 문제 해결(PORT)

일단 mod_jk.log 를 살펴보면

[root@** logs]# cat /etc/httpd/logs/mod_jk.log

[Wed Jan 16 18:35:56.449 2019] [4944:140285244893248] [error] ajp_service::jk_ajp_common.c (2796): (tomcat-**) connecting to tomcat failed (rc=-3, errors=4, client_errors=0).

[Wed Jan 16 18:35:56.449 2019] [4944:140285244893248] [info] jk_handler::mod_jk.c (2980): Service error=-3 for worker=tomcat-dkinsa

[Wed Jan 16 18:35:58.088 2019] [4836:140285244893248] [info] jk_open_socket::jk_connect.c (816): connect to ** failed (errno=113)

[Wed Jan 16 18:35:58.088 2019] [4836:140285244893248] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1065): (tomcat-**) Failed opening socket to (**) (errno=113)

[Wed Jan 16 18:35:58.088 2019] [4836:140285244893248] [error] ajp_send_request::jk_ajp_common.c (1725): (tomcat-**) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=113)


위와 같은 ajp 연결 실패라는 로그가 발생할 경우 해결 방법 입니다.

1) semanage설치(selinux 관리 패키지)

 yum install -y policycoreutils-python

2) 현재 설정된 포트보기

semanage port -l|grep http_port_t

(80,443,8080,8009,8443 등의 selinux가 허용한 기본 포트만 나열됨)

3) 포트추가(ajp 설정한 포트를 추가 해주시면 됩니다.)

semanage port -a -p tcp -t http_port_t 포트




댓글을 달아 주세요