현상

다음 에러 메시지 발생.

[error] init_jk::mod_jk.c (3235): Initializing shm:/etc/httpd/logs/mod_jk.shm.1552 errno=13. Load balancing
workers will not function properly.

 

원인

  1. /etc/http/conf.d/mod_jk.conf 중 Shared Memory file name 을 지정하는 JkShmFile Keyword가 다음과 같이 되어 있음

    JkShmFile     logs/mod_jk.shm
  2. apache와 tomcat 을 연계하는 mod_jk 의 SELinux 의 context 를 조회해 보니 httpd_modules_t  로 설정되어 있음

    # ls -lZ /etc/httpd/modules/mod_jk.so 
    -rwxr-xr-x. root root unconfined_u:object_r:httpd_modules_t:s0 /etc/httpd/modules/mod_jk.so
    BASH

     

  3. httpd_modules_t  의 global context 를 조회

     

    # semanage fcontext -l|grep httpd_modules_t
    /etc/httpd/modules                                 all files          system_u:object_r:httpd_modules_t:s0
    /usr/lib(64)?/apache(/.*)?                         all files          system_u:object_r:httpd_modules_t:s0
    /usr/lib(64)?/apache2/modules(/.*)?                all files          system_u:object_r:httpd_modules_t:s0
    /usr/lib(64)?/cherokee(/.*)?                       all files          system_u:object_r:httpd_modules_t:s0
    /usr/lib(64)?/httpd(/.*)?                          all files          system_u:object_r:httpd_modules_t:s0
    /usr/lib(64)?/lighttpd(/.*)?                       all files          system_u:object_r:httpd_modules_t:s0
  4. httpd_modules_t 는 /etc/httpd/logs 에 write 할수가 없음

처리방법

  1. mod_jk 가 logs 에 접근할 수 있게 SELinux context를 설정 -> 추천하지 않음
  2. semanage fcontext -l|grep var_run_t|grep httpd 를 조회해 보니/var/run/httpd 에 write 가 가능하므로  설정을 다음과 같이 변경

    JkShmFile     run/mod_jk.shm