o apache httpd não consegue se conectar à internet

1

Título original : o usuário apache não pode usar o curl (conectar-se à internet) . Mudou depois que a resposta ficou clara, para ajustar melhor o problema e a solução.

Introdução

Eu corro um servidor Apache2 (httpd) para o Dokuwiki. O Dokuwiki não pode usar sua atualização ou instalar o plugin (veja Pergunta aqui ).

Parece que o usuário apache não consegue acessar a rede / internet.

Testes

Como raiz, e. Onda funciona bem:

root @alpha:~$ curl https://download.dokuwiki.org -L
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Download DokuWiki</title> ...

mas quando eu tento o mesmo que o usuário 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

ou com wget como root:

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]

vs como usuário 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.

Proxy

O servidor está por trás de um proxy. Para root, parece saber disso, mas não para o usuário apache.

As configurações de proxy estão definidas em /etc/profile.d/proxy.sh ( proxy é um espaço reservado):

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

Eu também tentei configurar o proxy em / etc / profile (com o mesmo código acima) e reiniciei o servidor, mas isso não ajudou.

Para root, as vars estão definidas:     root @alpha: ~ $ echo $ http_proxy     http: // mas não para o apache:     root @alpha: ~ $ sudo -H -u apache bash -c 'echo $ http_proxy'     / nenhuma saída / (del, porque foi uma maneira errada de testar)

Não há nada especial em /root/.bash_profile ou /root/.bashrc. (não importante)

SELinux

Parece que o SELinux é a causa. Quando tento usar o "Wiki Upgrade" do Dokuwiki, há duas novas entradas em /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

Qual é o problema aqui? O serviço httpd não tem permissão para se conectar a uma porta 3128?

    
por dice 05.12.2016 / 17:02

2 respostas

0

A correção

O problema foi com o SELinux. Verifique as configurações com:

 getsebool -a | grep httpd_can_network_connect

Eu tenho:

 httpd_can_network_connect --> off
 httpd_can_network_connect_cobbler --> off
 httpd_can_network_connect_db --> off

Com:

setsebool -P httpd_can_network_connect on

você ativa o acesso à rede para o link . (Eu tive que instalar o policycoreutils-python primeiro, rpm -qa | grep selinux mostra se você já o tem.)

Aviso!

Eu não estou familiarizado com o SELinux (ainda) e pode haver efeitos colaterais para essa mudança que compromete a segurança do seu sistema !

Sidenote

Eu estava confuso sobre como testar comandos como o usuário do apache (veja coisas deletadas na questão) então mostrarei uma maneira aqui: Simplesmente inicie um novo shell para o usuário apache :):

sudo -u apache /bin/bash

Por favor, note: Após a mudança no SELinux, o curl ainda não funcionará para o usuário do apache, porque ele só permite que o processo httpd acesse a rede.

    
por 07.12.2016 / 10:30
0

O Centos usa o SElinux por padrão, você revisou alguma das regras deste IDS para o apache?

Por favor, perdoe meu inglês, não é minha língua nativa

    
por 05.12.2016 / 22:36