아파치 포트가 1024보다 크고, root 권한으로 실행하는데,

아래와 같은 오류가 발생하면서 아파치 서버가 실행되지 않는 경우가 있다.

service httpd start
Starting httpd: 
(13)Permission denied: make_sock: could not bind to address [::]:8000
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:8000
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

이 경우 SELinux(Security-Enhanced Linux) 정책으로 인한 문제이므로, 아래와 같이 확인한다.

sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

setenforce 0

service httpd start
Starting httpd: 
                                                           [  OK  ]

setenforce 1

이 방식으로는 restart를 하게 되면 동일한 오류가 또 발생하기 때문에,
setenforce를 아예 꺼버리거나 아니면 semanage를 이용하여 SELinux 설정을 변경한다.

semanage가 없으면 설치한다.

yum list policycoreutils-python

설치 완료되면, 
http 포트로 지정되어 있는 설정 정보를 확인한다.

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, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

사용하려는 포트가 지정된 포트인지 확인한다.
semanage port -m -t http_port_t -p tcp 8000
/usr/sbin/semanage: tcp/800에 대한 포트가 지정되지 않았습니다

포트가 지정되어 있지 않으면, 해당 포트를 추가한다.
semanage port -a -t http_port_t -p tcp 8000

정상적으로 등록되었는지 확인한다.
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      8000, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

아파치 restart를 다시 실행한다.
# service httpd restart
httpd 를 정지 중:                                          [  OK  ]
httpd (을)를 시작 중:                                      [  OK  ]


위와 같이 정상적으로 실행된 상태에서,
php 페이지 호출하는 403 fobidden이 발생하고, 아래와 같은 오류가 발생하는 경우는...

[error] (13)Permission denied: access to /wordpress/wp-admin/install.php

getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> on
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_manage_ipa --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off

빨간색 표시된 넘들을 on으로 설정해 준다.

setsebool -P httpd_can_network_connect_db on
setsebool -P httpd_enable_homedirs on

httpd_can_network_connect_db는 http 호출시 db 접속을 허용하는 것이고,
httpd_enable_homedirs은 http 호출시 home dir 접근을 허용한다.

httpd를 재시작해준다.
service httpd restart

-------------------------------------------------------------

출처 : http://dochi575.egloos.com/4867779

복사했습니다!