owncloud “CSRF check failed” 에러 처리
증상
owncloud 로그인 시 다음 에러가 발생
- "CSRF check failed"
- "You took too long to login, please try again now"
원인
owncloud 는 PHP 의 세션 기능을 사용하는데 여러 가지 원인으로 세션 데이타를 쓰지 못하고 이때문에 CSRF 정보를 검증 실패
조치
다음 순서대로 조치
php.ini 의 session.save_path 가 설정되었는지 확인
$ php -r "phpinfo();" |grep -i session.save_path /var/lib/php/session
웹 서버와 php 프로세스가 session.save_path 폴더의 소유자이며 쓰기 권한이 있는지 확인
$ php -r "phpinfo();" |grep -i session.save_path|awk '{print "ls -ld "$3}'|sh -x drwxr-xr-x. 2 nginx nginx 50 Jan 18 14:01 /data/php/session
SELinux 가 session.save_path 에 쓰기를 허용하는지 여부(httpd_sys_rw_content_t 가 부여되어야 함)
$ php -r "phpinfo();" |grep -i session.save_path|awk '{print "ls -ldZ "$3}'|sh -x drwxr-xr-x. nginx nginx unconfined_u:object_r:httpd_sys_rw_content_t:s0 /data/php/session
php-fpm 의 경우 php.ini 가 아니라 pool 설정 파일(/etc/php-fpm.d/www.conf) 에 세션 경로가 설정되어 있으므로 이걸 수정하고 fpm 을 재구동해야 함.
/etc/php-fpm.d/www.conf
; Set session path to a directory owned by process user php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache