#20140418-01 :: Apache :: (13)Permission denied

오늘 서버 작업을 하면서 매우 곤란한 문제를 마주했었습니다.


환경

- Cent OS 6.4

- Apache 2.4.9


간단한 웹서비스 페이지를 하나 올려야 했고

서비스 포트로 8082를 지정 받았습니다.


아파치를 설치하고 몇 가지 설정을 하니 아래와 같은 에러와 마주하게 되었습니다.


$ sudo service httpd start

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:8082

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:8082

no listening sockets available, shutting down

Unable to open logs


한참을 검색하고 삽질을 하다가 알게 된 사실은

Cent OS에서는 httpd에 대하여 특정 포트만을 허용하고 있다는 것이었습니다.

자세한 내용은 아래와 같이 볼 수 있습니다.


$ sudo semanage port -l|grep http

http_cache_port_t              tcp      3128, 8080, 8118, 8123, 10001-10010

http_cache_port_t              udp      3130

http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989


위의 목록에서 http_port_t에 8082가 없기 때문에 계속 에러가 난 것입니다.


해결 방법은 다음과 같습니다.


$ sudo yum -y install policycoreutils-python

$ sudo semanage port -a -t http_port_t -p tcp 8082


검색을 해 보니 SELinux에는 semanage 가 기본으로 있는 것 같은데 

Cent OS에는 설치되어 있지 않았기 때문에 별도로 설치하였습니다.

그리고 semanage를 통해 8082 포트를 허용해 주도록 추가 등록 하였습니다.