저는 Dokuwiki용 Apache2(httpd) 서버를 운영하고 있습니다. Dokuwiki는 업그레이드나 플러그인 설치 기능을 사용할 수 없습니다.문제는 여기에 있다).
사용자가아파치네트워크/인터넷에 액세스할 수 없습니다.
시험
루트로서 컬은 잘 작동합니다.
root @alpha:~$ curl https://download.dokuwiki.org -L
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Download DokuWiki</title> ...
하지만 사용자 apache로 동일한 작업을 시도하면 다음과 같습니다.
root @alpha:~$ sudo -H -u apache bash -c 'curl https://download.dokuwiki.org -L'
curl: (7) Failed to connect to 2a01:4f8:172:3483::2: Network is unreachable
또는 wget을 루트로 사용하십시오.
root @alpha:~$ wget https://download.dokuwiki.org
--2016-12-05 17:01:57-- https://download.dokuwiki.org/
Connecting to <proxy>:3128.... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
[ <=> ] 25,350 --.-K/s in 0.02s
2016-12-05 17:01:57 (1.40 MB/s) - ‘index.html’ saved [25350]
Apache 사용자와 비교:
root @alpha:~$ sudo -H -u apache bash -c 'wget https://download.dokuwiki.org'
--2016-12-05 17:02:26-- https://download.dokuwiki.org/
Resolving download.dokuwiki.org (download.dokuwiki.org)... 138.201.137.132, 2a01:4f8:172:3483::2
Connecting to download.dokuwiki.org (download.dokuwiki.org)|138.201.137.132|:443... failed: No route to host.
Connecting to download.dokuwiki.org (download.dokuwiki.org)|2a01:4f8:172:3483::2|:443... failed: Network is unreachable.
대리인
서버가 프록시 뒤에 있습니다.이것은 루트에게는 알려진 것 같지만 사용자 apache에는 알려지지 않은 것 같습니다.
프록시는 /etc/profile.d/proxy.sh
(대리인자리 표시자입니다):
MY_PROXY_URL="http://<proxy>:3128"
HTTP_PROXY=$MY_PROXY_URL
HTTPS_PROXY=$MY_PROXY_URL
FTP_PROXY=$MY_PROXY_URL
http_proxy=$MY_PROXY_URL
https_proxy=$MY_PROXY_URL
ftp_proxy=$MY_PROXY_URL
export HTTP_PROXY HTTPS_PROXY FTP_PROXY
export http_proxy https_proxy ftp_proxy
또한 프록시 설정을 시도했습니다./etc/구성 파일(위와 동일한 코드 사용) 서버를 다시 시작했지만 도움이 되지 않았습니다.
루트의 경우 변수를 설정합니다. root @alpha:~$ echo $http_proxy http:// 그러나 apache의 경우는 해당되지 않습니다. root @alpha:~$ sudo -H -u apache bash -c 'echo $http_proxy' /출력 없음/
(del, 테스트 방법이 잘못되었기 때문입니다)
/root/.bash_profile 또는 /root/.bashrc에는 특별한 것이 없습니다.(중요하지 않음)
SELinux
SELinux가 원인인 것 같습니다. Dokuwiki에서 "Wiki Upgrade"를 사용하려고 하면 /var/log/audit/audit.log에 두 개의 새로운 항목이 있습니다:
type=AVC msg=audit(1481032251.392:768): avc: denied { name_connect } for pid=1368 comm="httpd" dest=3128 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:squid_port_t:s0 tclass=tcp_socket
type=AVC msg=audit(1481032251.394:769): avc: denied { name_connect } for pid=1368 comm="httpd" dest=3128 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:squid_port_t:s0 tclass=tcp_socket
여기서 문제가 무엇입니까? httpd 서비스는 포트 3128에 연결할 수 없습니까?
답변1
고치다
문제는 SELinux에 있습니다. 설정 확인:
getsebool -a | grep httpd_can_network_connect
나는 가지고있다:
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
그리고:
setsebool -P httpd_can_network_connect on
네트워크 액세스를 전환합니다.httpd 프로세스존재하다. (설치해야했는데strategycoreutils-python먼저, rpm -qa | grep selinux
이미 갖고 있는지 보여주세요. )
경고하다!
아직 SELinux에 익숙하지 않으며 이 변경으로 인해 부작용이 발생할 수 있습니다.시스템 보안을 손상시키다!
사이드 노트
apache 사용자로 명령을 테스트하는 방법에 대해 혼란스러워서(문제의 제거된 콘텐츠 참조) 여기에서 방법을 보여 드리겠습니다. apache 사용자에 대해 새 셸을 시작하면 됩니다. :)
sudo -u apache /bin/bash
참고: SELinux가 변경된 후에도 httpd 프로세스만 네트워크에 액세스할 수 있도록 허용하므로 컬은 여전히 Apache 사용자에 대해 작동하지 않습니다.
답변2
Centos는 기본적으로 SElinux를 사용합니다. Apache의 IDS 규칙을 확인했습니까?
제 영어가 모국어가 아니어서 죄송합니다.