owncloud “CSRF check failed” 에러 처리


증상

owncloud  로그인 시 다음 에러가 발생

  1. "CSRF check failed" 
  2. "You took too long to login, please try again now"

원인

owncloud 는 PHP 의 세션 기능을 사용하는데 여러 가지 원인으로 세션 데이타를 쓰지 못하고 이때문에 CSRF 정보를 검증 실패

조치

다음 순서대로 조치

  1. php.ini 의 session.save_path 가 설정되었는지 확인

    $ php -r "phpinfo();" |grep -i session.save_path
    
    
    /var/lib/php/session
  2. 웹 서버와 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
  3. 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



Ref