php 가 session 디렉터리에 쓰지 못할 때

 

증상

다음과 같이 PHP가 세션을 쓰지 못한다는 에러가 발생.

"PHP message: PHP Warning:  session_start(): open(/var/lib/php/session/, O_RDWR) failed: Permission denied (13) in /var/www/myapp/common.php on line 2" while reading response header from upstream, client: 192.168.1.1, server: example.com, request: "GET / HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "example.com"

 

원인1

RHEL/CentOS 7 부터는 httpd_sys_rw_content_t 가 있어야 SELinux 가 접근을 허용하지만 PHP 의 파일 세션 디렉터리(/var/lib/php/session/) 에 해당 context 를 부여하지 않음.

$  ls -lZ /var/lib/php/session/
 
-rw-------. apache apache system_u:object_r:httpd_var_run_t:s0 

 

해결

selinux context 수정

chcon -R -t httpd_sys_rw_content_t /var/lib/php/session

 

원인2

nginx 를 사용할 경우 session 디렉터리 소유자가 apache 라 쓰지 못함

해결

chown -R nginx:nginx /var/lib/php/session

 

 

같이 보기