¿Por qué obtengo "Permiso denegado: make_sock: no se pudo vincular a la dirección" al iniciar Apache2?

25

Puedo detenerlo usando

/etc/init.d/apache2 stop

Pero cuando quiero comenzar de nuevo usando:

/etc/init.d/apache2 start

Me sale este error:

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]
Artesano
fuente

Respuestas:

50

Algunas palabras sobre los errores que obtienes que con suerte te salvarán de situaciones similares en el futuro.

En Linux, los puertos del 0 al 1024 están reservados para uso del sistema. Esto significa que para usar uno, debe tener la autoridad para cambiar: acceder a la configuración básica del sistema. El usuario root tiene tales privilegios y puede usar un puerto del rango 0 - 1024.

En su problema, como puede ver, el sistema a través de la respuesta de Apache2 indica la raíz del problema ([...] no se pudo vincular para abordar bla, bla, 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

Cuando se inicia el demonio http Apache2, intenta vincular el puerto 80, ya que es el puerto predeterminado para usar en HTTP see , que es un puerto dentro de los puertos asignados al sistema y, como tal, solo se puede acceder desde la raíz.

Ejecutó el comando de inicio como un usuario típico sin privilegios de root y provocó que no lo hiciera.

En palabras simples:

Tú:

Hola apache2. Soy Kongthap y te estoy diciendo que comiences ( /etc/init.d/apache2 start)

Apache2:

OKAY. Estoy empezando (Iniciando el servidor web apache2)

Sistema, por favor dame el puerto 80 para usar y escuchar las conexiones.

Sistema:

OKAY. Un momento para comprobar ...

Ahh ... Lo siento, Apache2, pero no puedo dejarte correr en el puerto 80, es para uso personal.

Y no tiene los privilegios correctos para vincularlo. ( Operation not permitted)

Apache2:

Ohh, Kongthap no pude iniciar, el sistema no me dejó hacerlo ( (13)Permission denied:[...])

Conclusión

Existen principalmente dos soluciones a este problema:

  1. Ejecute el demonio HTTP Apache2 con privilegios de root usando sudo:

    sudo service apache2 start
    

    o:

    sudo /etc/init.d/apache2 start
    
  2. Cambiar el puerto por defecto a partir 80de algo más grande que 1024, por ejemplo 2000, 2500, 9000, etc. Un típico puerto de correr cuando en tal situación es8080

    sudo vi /etc/apache2/ports.conf
    

    busca o si no hay agrega:

    Listen 8080
    

    o cualquier otro puerto de su elección, como el puerto > 1024y el puerto seleccionado no es utilizado por otro proceso.

Stef K
fuente
44
Realmente excelente explicación !!!
Artesano
Gran explicación, entendido bien!
Mwirabua Tim
Gran explicación ¿Por qué está usando serviceel método preferido?
Holloway
Son directivas de Upstart, verifique esta pregunta y responda askubuntu.com/q/19320/12218 y para una vista más detallada, consulte el upstart cookbook upstart.ubuntu.com/cookbook . Tenga en cuenta que estos se refieren al manejo de servicios (daemon) (cuándo y cómo iniciar-detener) esta pregunta y mi respuesta también aborda los problemas de permisos.
Stef K
Palabrería innecesaria. La respuesta no aborda el problema.
reggie
7

Los siguientes son los comandos para iniciar / detener / reiniciar el servidor apache:

  • Para comenzar:

    sudo /etc/init.d/apache2 start
    
  • Para detener:

    sudo /etc/init.d/apache2 stop
    
  • Para reiniciar:

    sudo /etc/init.d/apache2 restart
    
Saurav Kumar
fuente
Después de reiniciar la computadora, parece estar bien con todos los comandos que sugirió, pero recibí este mensaje durante el reinicio ... Reinicio del servidor web apache2 apache2: No se pudo determinar de manera confiable el nombre de dominio completo del servidor, usando 127.0.1.1 para ServerName
Artisan
1
@Kongthap: eso no es un error. Estoy seguro de que la web está llena de explicaciones para ese mensaje.
Andrea Corbellini
Sí, @AndreaCorbellini es correcta. No es un error, dice porque su ip no tiene ningún nombre de dominio completo, por ejemplo mail.google.com.
Saurav Kumar
4

Verifique el contexto del puerto selinux emitiendo un comando

semanage port -l | grep http

Si está presente en la lista http_port_t, entonces está bien; de lo contrario, agregue su puerto

semanage port -a -t http_port_t -p tcp 80

o algo que quieras asignar.

zahid iqbal
fuente
1

Este es un error de selinux, o al menos lo fue en mi caso. Cambie el valor booleano, desactive selinux o configúrelo como permisivo con setenforce 0.

El cambio booleano requeriría que usted ejecute getenforce -a | grep httpy busque "permitir la red http connect". Cópielo y reemplace "on" donde la lista dice "- off"

tru
fuente
Ubuntu usa AppArmor no SELinux, por lo que su respuesta es irrelevante para ubuntu.
sgx1
Como usuario de centos que tuvo este problema y esta es la primera pregunta de stackoverflow que aparece, agradezco la ayuda que solucionó mi problema
Cacoon el