증상

SELinux 가 enforce 일 경우 WebLogic connector를 설정하고 apache httpd 를 구동하면 다음 에러가 발생하고 실패함

Stopping httpd: [ OK ]
Starting httpd: httpd: Syntax error on line 209 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_wl_22.so into server: /etc/httpd/modules/mod_wl_22.so: cannot enable executable stack as shared object requires: Permission denied

 

원인

httpd 실패 원인을 찾기 위해 다음 명렁어 실행

audit2why  < /var/log/audit/audit.log 

 

type=AVC msg=audit(1377509093.200:4852): avc: denied { execstack } for pid=5358 comm="httpd" scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:system_r:httpd_t:s0 tclass=process

Was caused by:
The boolean httpd_execmem was set incorrectly. 
Description:
Allow httpd scripts and modules execmem/execstack

Allow access by executing:
# setsebool -P httpd_execmem 1

 

WebLogic connector 가 httpd의 메모리 영역에 있는 code 를 실행할수 있는 권한이 필요하나(이유는 모름) SELinux rule에 의해 차단되어서 발생 (관련 boolean httpd_execmem )

해결

1. boolean value on

httpd의 execmem 을 on 으로 수정

 

execmem 이 on 되면 Stack Overflow 공격이 가능해 지므로 보안에 취약해 짐

## 현재 bool 확인
getsebool -a |grep httpd_execmem
  httpd_execmem --> off
## bool on
setsebool httpd_execmem on
 
## 설정 확인
getsebool -a |grep httpd_execmem
  httpd_execmem --> on
BASH

 

2. execstack util 로 weblogic connector 의 execstack off

ELF 실행 포맷에 execstack bit 가 있음. 

prelink 패키지에 있는 execstack util 은 ELF 포맷을 설정할 수 있고 이 유틸로 weblogic connector module 의 execstack 비트를 clear

exec -c /etc/httpd/modules/mod_wl_22.so
 
## 정상 설정 여부 확인
readelf -l /etc/httpd/modules/mod_wl_22.so 
CODE

 

Ref