PHP is_writable() 오동작?
도쿠위키 사용을 위해 설치 과정을 정상적으로 마쳤지만 왠일인지 위키에 접속이 되지 않았다. 오류 문구는 conf 폴더와 data 폴더에 권한이 없다는 것. 나름 리눅스 바닥에서 오래 굴러봤기 때문에 이를 모를리 없다. 단숨에 해당 폴더들의 권한을 수정 했지만 문제는 여전했다.
뭐가 문제일까? 해당 오류를 출력하는 코드를 살펴보니 PHP 코드의 is_writable() 라는 함수였다. conf와 data 폴더에 쓰기권한이 있는지 확인하는 코드. 분명 디렉토리에 대한 권한은 모두 설정했기 때문에 이제는 is_writable 함수의 오동작을 의심했다.
그리고 구글 검색을 통해 확인해보니 역시나 모두 conf, data 폴더의 권한을 맞춰주라는 글 뿐. 이리저리 유용한 정보를 확인 하던 도중.. 문제는 의외로 쉬운 곳에 있었으니.. 바로 SELINUX 라는 것. 시스템의 또 다른 보안을 담당하시는 분 되시겠다. 그간 커널을 커스텀해서 사용하고 관심을 두지 않아 몰랐던 부분이다.
일단 아래 명령어로 data와 conf의 보안레벨을 확인한다.
ls -Z
그리고 읽고 쓰기가 가능하도록 아래처럼 권한을 맞춰준다.
chcon -R -t httpd_sys_rw_content_t conf
chcon -R -t httpd_sys_rw_content_t data
이제 위키를 확인해보면 되겠다. 역시 항상 겸손해야 겠다는 생각을 갖게 하는 문제였다..
추가로 PHP is_writable을 의심했으니 PHP 개발자(PHP’로’ 개발하는 사람이 아닌 PHP’를’ 개발한) 분들께는 죄송..