Apache + mod_fcgid + chroot com mod_security. CentOS / RHEL 6

3

Eu estou tentando configurar um servidor web executando o Apache + mod_fcgid + mod_security chroot ativado e tendo dificuldades reais para que isso funcione. O Apache foi instalado a partir do repositório oficial do CentOS e o mod_fcgid e o mod_security foram instalados a partir do repositório EPEL.

No começo, eu ainda não consegui iniciar o Apache enquanto o chroot está ativado, mas eu consertei muitas coisas, mas ainda há algumas que preciso resolver.

Primeiro problema, quando eu tento iniciar o Apache enquanto ele está parado, ele começa sem problemas, no entanto, quando eu tento reiniciá-lo enquanto estiver executando isso é o que eu recebo;

$ service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

Log de erros do Apache;

[Mon Jun 17 07:47:51 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Jun 17 07:47:52 2013] [notice] ModSecurity: chroot checkpoint #1 (pid=954 ppid=953)
[Mon Jun 17 07:47:52 2013] [notice] ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/) configured.
[Mon Jun 17 07:47:52 2013] [notice] ModSecurity: APR compiled version="1.3.9"; loaded version="1.3.9"
[Mon Jun 17 07:47:52 2013] [notice] ModSecurity: PCRE compiled version="7.8 "; loaded version="7.8 2008-09-05"
[Mon Jun 17 07:47:52 2013] [notice] ModSecurity: LUA compiled version="Lua 5.1"
[Mon Jun 17 07:47:52 2013] [notice] ModSecurity: LIBXML compiled version="2.7.6"
[Mon Jun 17 07:47:52 2013] [notice] Digest: generating secret for digest authentication ...
[Mon Jun 17 07:47:52 2013] [notice] Digest: done
[Mon Jun 17 07:47:53 2013] [notice] ModSecurity: chroot checkpoint #2 (pid=955 ppid=1)
[Mon Jun 17 07:47:53 2013] [notice] ModSecurity: chroot successful, path=/var/www
[Mon Jun 17 07:47:53 2013] [notice] Apache/2.2.15 (Unix) DAV/2 mod_fcgid/2.3.7 configured -- resuming normal operations

O segundo problema é que arquivos HTML regulares estão sendo servidos sem problemas, mas as páginas PHP não são.

logs mod_security;

--98586c48-A--
[17/Jun/2013:08:01:37 --0400] Ub76oUJVtI0AAAPEDiYAAAAG CLIENT_IP_GOES_HERE 51722 SERVER_IP_GOES_HERE 80
--98586c48-B--
GET /testphp.php HTTP/1.1
Host: hostname
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: PHPSESSID=5a9jqak7dt30l2vvrs9c74lo81
Connection: keep-alive
Cache-Control: max-age=0

--98586c48-F--
HTTP/1.1 500 Internal Server Error
Content-Length: 543
Connection: close
Content-Type: text/html; charset=iso-8859-1

--98586c48-E--

--98586c48-H--
Apache-Error: [file "fcgid_proc_unix.c"] [line 637] [level 4] [status 104] mod_fcgid: error reading data from FastCGI server
Apache-Error: [file "/builddir/build/BUILD/httpd-2.2.15/server/util_script.c"] [line 435] [level 19] Premature end of script headers: testphp.php
Apache-Handler: fcgid-script
Stopwatch: 1371470497629709 2809 (- - -)
Stopwatch2: 1371470497629709 2809; combined=25, p1=3, p2=10, p3=1, p4=1, p5=9, sr=0, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/).
Server: Apache
Engine-Mode: "ENABLED"

--98586c48-Z--

Onde eu estou errado? O que eu estou sentindo falta?

    
por compixtr 17.06.2013 / 14:22

1 resposta

0

Primeira edição

O primeiro problema é relativamente fácil. Isso significa que outro daemon / serviço já está usando a porta 80, que é a porta TCP que o Apache deseja usar para escutar conexões de navegadores.

Este comando mostrará o que está sendo usado:

$ netstat -tapn |grep :80
Por exemplo:
$ netstat -tapn |grep :80
tcp        0      0 :::80                       :::*                        LISTEN      13415/httpd         
tcp        0      0 ::ffff:127.0.0.1:80         ::ffff:127.0.0.1:35880      TIME_WAIT   -                   
tcp        0      0 ::ffff:127.0.0.1:80         ::ffff:127.0.0.1:35909      TIME_WAIT   -                   
tcp        0      0 ::ffff:192.168.1.105:80     ::ffff:192.168.1.6:40061    TIME_WAIT   -                   
tcp        0      0 ::ffff:192.168.1.105:80     ::ffff:192.168.1.6:40060    TIME_WAIT   -   

Aqui podemos ver que o Apache (httpd) já está em execução e o ID do processo é 13415.

Você pode matá-lo ou descobrir o que mais está escutando na porta 80.

Segunda edição

Para sua segunda edição, acho que o que está acontecendo é que você já tem um servidor Apache em execução, mas não aquele que você acha que é. Então mate-o e veja se o seu segundo problema desaparece.

Se isso não acontecer, você precisará instalar alguns pacotes adicionais dos repositórios do CentOS. Especificamente PHP e qualquer outra coisa que seja necessária para sua aplicação particular.

Por acaso, verifique se você está parando / iniciando o serviço Apache como raiz ou usando o comando sudo . Usuários normais não podem parar / iniciar este serviço.

Terceira questão

Como o OP apontou que o uso de suEXEC em uma jaula chrooted não é suportado diretamente por suEXEC , então é necessário fazer um patch. Este parece ainda ser o caso com a versão atual de suEXEC .

Aqui está um tutorial muito bom sobre a arquitetura geral da configuração do Apache dessa maneira junto com as etapas para recompilar o suEXEC para que ele possa suportar o chroot.

    
por 17.06.2013 / 15:14