시험

시험

저는 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 규칙을 확인했습니까?

제 영어가 모국어가 아니어서 죄송합니다.

관련 정보