원인

RHEL/CentOS 6까지는 httpd 프로세스가 httpd_sys_content_t 가 설정된 자원은 read/write 가 가능했으나 7 에서는 read 만 가능하게 변경되었다. 

이는 워드프레스같은 CMS 의 사용자가 많아짐에 따라 취약점을 이용하여 웹 쉘을 워드프레스 설치 폴더에 올려 놓고 해킹하는 등의 공격이 빈번해져서 보안 강화 차원에서 read와 write 권한을 분리한 게 아닌가 싶다.

이로 인해 PHP 같이 httpd context 로 구동하는 프로세스는 write 가 필요한 경우 정상 동작하지 않으며 오직 /var/www/html 폴더에 있어야만 write 가 가능하다.


이 내용은 다음 명령어로 커널의 audit 로그를 조회하면 확인할 수 있다.

audit2why < /var/log/audit/audit.log
CODE
auditwhy 조회 결과

type=AVC msg=audit(1441810800.407:18499): avc: denied { write } for pid=29003 comm="php-fpm" name="sessions" dev="xvda1" ino=788733950 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir

Was caused by:
The boolean httpd_unified was set incorrectly.
Description:
Allow httpd to unified

Allow access by executing:
# setsebool -P httpd_unified 1


조치

처리 방법은 여러 가지가 있다.

rw 가능한 컨텍스트 적용

워드프레스의 wp-content 같이 httpd 프로세스가 쓰기 권한이 필요한 폴더는 httpd_sys_content_t  대신 httpd_sys_rw_content_t 컨텍스트를 적용해야 한다.

chcon -R -t httpd_sys_rw_content_t /var/www/myweb
CODE


/var/www/html 으로 복사

var/www/html 은 기본적으로 쓰기 가능하므로 이 밑으로 복사(cp/mv 와 SELinux security context)한다. 특히 워드프레스는 취약점 공격이 많으므로 꼭 /var/www/html 밑에 설치하는게 좋다.

쓰기 가능하게 등록된 폴더는 다음 명령어로 확인 가능하다.

semanage fcontext  -l|grep html|grep httpd_sys_rw_content_t
CODE


httpd_unified boolean 적용 

httpd_unified 불린을 적용하면 CentOS 6 처럼 httpd_sys_content_t 컨텍스트를 읽고/쓸수 있지만 권장하지 않는다.

setsebool -P httpd_unified 1
CODE


Ref