Por que estou recebendo "Permissão negada: make_sock: não foi possível vincular ao endereço" ao iniciar o Apache2?

25

Eu posso parar usando

/etc/init.d/apache2 stop

Mas quando eu quero iniciá-lo novamente usando:

/etc/init.d/apache2 start

Eu recebo este erro:

Starting web server apache2                                                  /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]
Artesão
fonte

Respostas:

50

Algumas palavras sobre os erros que você provavelmente salvará de situações semelhantes no futuro.

No Linux, as portas de 0 a 1024 são reservadas para uso do sistema. Isso significa que, para usar um, você deve ter autoridade para alterar - acessar as configurações básicas do sistema. O usuário root possui esses privilégios e pode realmente usar uma porta do intervalo de 0 a 1024.

No seu problema, como você pode ver, o sistema através da resposta do Apache2 indica a raiz do problema ([...] não foi possível vincular o endereço blá blá 80 ):

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

Quando o daemon http Apache2 é iniciado, ele tenta ligar a porta 80, pois é a porta padrão para uso em HTTP see , que é uma porta dentro das portas atribuídas pelo sistema e, como tal, só pode ser acessada pela raiz.

Você executou o comando start como um usuário típico sem privilégios de root e levou à falha ao fazê-lo.

Em palavras simples:

Vocês:

Oi Apache2. Eu sou Kongthap e estou lhe dizendo para começar ( /etc/init.d/apache2 start)

Apache2:

ESTÁ BEM. Estou iniciando (Iniciando o servidor web apache2)

Sistema, por favor, me dê a porta 80 para usar e ouvir conexões.

Sistema:

ESTÁ BEM. Um momento para verificar ...

Ahh ... Desculpe o Apache2, mas não posso deixá-lo rodar na porta 80, é para uso pessoal.

E você não tem os privilégios corretos para vinculá-lo. ( Operation not permitted)

Apache2:

Ohh, Kongthap eu falhei ao iniciar, o sistema não me deixou fazê-lo ( (13)Permission denied:[...])

Conclusão

Existem principalmente duas soluções para esse problema:

  1. Execute o daemon HTTP Apache2 com privilégios de root usando sudo:

    sudo service apache2 start
    

    ou:

    sudo /etc/init.d/apache2 start
    
  2. Alterar a porta padrão 80da maior algo do que 1024, digamos 2000, 2500, 9000, etc. Uma porta típica para ser executado quando em tal situação é8080

    sudo vi /etc/apache2/ports.conf
    

    procure ou, se não houver, adicione:

    Listen 8080
    

    ou qualquer outra porta de sua escolha, como a porta > 1024e a porta selecionada, não é usada por outro processo.

Stef K
fonte
4
Realmente excelente explicação !!!
Artesão
Ótima explicação, entendi bem!
Mwirabua Tim
Ótima explicação. Por que usar serviceo método preferido?
Holloway
São diretivas Upstart, verifique esta pergunta e respostas askubuntu.com/q/19320/12218 e, para uma visão mais detalhada, verifique o livro de receitas upstart upstart.ubuntu.com/cookbook . Lembre-se de que eles se referem ao tratamento de serviços (daemon) (quando e como iniciar e parar) esta pergunta e minha resposta também aborda os problemas de permissão.
Stef K
Palavras desnecessárias. A resposta não resolve o problema.
reggie
7

A seguir estão os comandos para iniciar / parar / reiniciar o servidor apache:

  • Para iniciar:

    sudo /etc/init.d/apache2 start
    
  • Parar:

    sudo /etc/init.d/apache2 stop
    
  • Reiniciar:

    sudo /etc/init.d/apache2 restart
    
Saurav Kumar
fonte
Após reiniciar o computador, parece que está tudo bem com todos os comandos que você sugeriu, mas recebi esta mensagem durante a reinicialização ... Reiniciando o servidor da Web apache2 apache2: Não foi possível determinar com segurança o nome de domínio totalmente qualificado do servidor, usando 127.0.1.1 para ServerName
Artisan
1
@ Kongthap: isso não é um erro. Tenho certeza de que a web está cheia de explicações para essa mensagem.
Andrea Corbellini 28/08
Sim, @AndreaCorbellini está correto. Não é um erro, é porque o seu ip não possui nenhum nome de domínio totalmente qualificado, por exemplo mail.google.com.
precisa saber é o seguinte
4

Verifique o contexto da porta selinux emitindo o comando

semanage port -l | grep http

Se ele estiver presente na lista http_port_t, tudo bem. Caso contrário, adicione sua porta

semanage port -a -t http_port_t -p tcp 80

ou algo que você deseja atribuir.

zahid iqbal
fonte
1

Este é um erro do selinux, ou pelo menos foi no meu caso. Altere o booleano, desative o selinux ou defina-o como permissivo setenforce 0.

A alteração booleana exigiria que você executasse getenforce -a | grep httpe procure a "permitir conexão de rede http". Copie-o e substitua "on" onde a lista diz "- off"

tru
fonte
O Ubuntu usa o AppArmor e não o SELinux, então sua resposta é irrelevante para o ubuntu.
sgx1
Como um usuário centos que tem este problema e esta é a primeira pergunta stackoverflow para chegar Agradeço a ajuda este fixo meu problema
Cacoon