본문 바로가기

리눅스

Apache 서버에서 발생한 문제를 해결하는 방법

반응형

Apache 서버에서 발생한 문제를 해결하는 방법

오류

$ /usr/local/apache2/bin/apachectl -t
httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied

이 오류는 Apache 서버가 /usr/local/apache2/modules/libphp5.so 파일을 로드하려고 할 때 발생하는데 이 파일의 메모리 보호 설정과 관련된 문제가 발생한 것입니다. 이 문제는 주로 SELinux(Security-Enhanced Linux)가 활성화된 시스템에서 발생합니다. SELinux는 특정 파일에 대한 접근 권한을 엄격하게 관리하며 메모리 보호 설정을 엄격하게 제한할 수 있습니다.

1. setenforce 명령어로 SELinux를 일시적으로 비활성화

SELinux를 일시적으로 Permissive 모드로 전환합니다. Permissive 모드에서는 SELinux 규칙이 적용되지 않으며 오류가 발생하는 대신 경고 메시지만 출력됩니다.

sudo setenforce 0

Apache를 다시 시작하고 문제가 해결되었는지 확인합니다.

sudo /usr/local/apache2/bin/apachectl restart

2. chcon 명령어로 파일의 보안 컨텍스트 수정

SELinux가 특정 파일에 대해 적절한 보안 컨텍스트를 적용하지 않았을 수 있습니다. 이를 수정하기 위해 chcon 명령어를 사용하여 적절한 보안 컨텍스트를 설정합니다.

libphp5.so 파일에 대해 httpd_exec_t 유형의 보안 컨텍스트를 적용합니다. 이는 Apache가 해당 파일을 올바르게 로드할 수 있도록 합니다.

sudo chcon -t httpd_exec_t /usr/local/apache2/modules/libphp5.so

다시 Apache를 시작합니다.

sudo /usr/local/apache2/bin/apachectl restart

3. SELinux의 설정을 영구적으로 변경하기

setenforce 0 명령어로 문제를 해결한 경우 SELinux를 영구적으로 Permissive 모드로 변경하려면 /etc/selinux/config 파일을 편집해야 합니다. 하지만 이는 보안상 권장되지 않으므로 권한 문제를 올바르게 해결하는 것이 좋습니다.

 

$ restorecon -v /usr/local/apache2/modules

$ cd /usr/local/apache2/modules/

$ restorecon -v libphp5.so
restorecon reset /usr/local/apache2/modules/libphp5.so context root:object_r:usr_t:s0->system_u:object_r:lib_t:s0

$ chcon -t texrel_shlib_t libphp5.so

$ /usr/local/apache2/bin/apachectl -t
Syntax OK

 

728x90
반응형