Pourquoi est-ce que j'obtiens «Autorisation refusée: make_sock: impossible de se lier à l'adresse» au démarrage d'Apache2?

25

Je peux l'arrêter en utilisant

/etc/init.d/apache2 stop

Mais quand je veux recommencer en utilisant:

/etc/init.d/apache2 start

Je reçois cette erreur:

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]
Artisan
la source

Réponses:

50

Quelques mots sur les erreurs que vous obtenez et qui, espérons-le, vous éviteront des situations similaires à l'avenir.

Sous Linux, les ports de 0 à 1024 sont réservés à l'utilisation du système. Cela signifie que pour en utiliser un, vous devez avoir le droit de modifier - accéder aux paramètres système de base. L'utilisateur root dispose de tels privilèges et peut réellement utiliser un port compris entre 0 et 1024.

Dans votre problème comme vous pouvez le voir, le système via la réponse Apache2 indique la racine du problème ([...] n'a pas pu se lier à l'adresse blah blah 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

Lorsque le démon http Apache2 démarre, il essaie de lier le port 80 car il s'agit du port par défaut à utiliser dans HTTP see , qui est un port dans les ports affectés au système et en tant que tel, il n'est accessible que par root.

Vous avez exécuté la commande de démarrage en tant qu'utilisateur standard sans privilèges root et vous avez échoué.

En termes simples:

Toi:

Salut Apache2. Je m'appelle Kongthap et je vous dis de commencer ( /etc/init.d/apache2 start)

Apache2:

D'ACCORD. Je démarre (Démarrage du serveur web apache2)

Système, veuillez me donner le port 80 à utiliser et écouter les connexions.

Système:

D'ACCORD. Un instant pour vérifier ...

Ahh ... Désolé Apache2 mais je ne peux pas vous laisser courir au port 80, c'est pour un usage personnel.

Et vous ne disposez pas des privilèges appropriés pour le lier. ( Operation not permitted)

Apache2:

Ohh, Kongthap, je n'ai pas réussi à démarrer, le système ne m'a pas laissé le faire ( (13)Permission denied:[...])

Conclusion

Il existe principalement deux solutions à ce problème:

  1. Exécutez le démon HTTP Apache2 avec les privilèges root en utilisant sudo:

    sudo service apache2 start
    

    ou:

    sudo /etc/init.d/apache2 start
    
  2. Changer le port par défaut de 80quelque chose plus que 1024, disons 2000, 2500, 9000, etc. Un port typique de courir quand dans une telle situation est8080

    sudo vi /etc/apache2/ports.conf
    

    chercher ou sinon y ajouter:

    Listen 8080
    

    ou tout autre port de votre choix tel que le port > 1024et le port sélectionné n'est pas utilisé par un autre processus.

Stef K
la source
4
Vraiment une excellente explication !!!
Artisan
Excellente explication, bien comprise!
Mwirabua Tim
Grande explication. Pourquoi utilise servicela méthode préférée?
Holloway
Ce sont des directives Upstart, consultez cette question et ses réponses askubuntu.com/q/19320/12218 et pour une vue plus détaillée, consultez le livre de recettes upstart upstart.ubuntu.com/cookbook . Gardez à l'esprit que ceux-ci se réfèrent aux services (démon) gérant (quand et comment démarrer-arrêter) cette question et ma réponse s'attaque également aux problèmes d'autorisation.
Stef K
Verbosité inutile. La réponse ne résout pas le problème.
reggie
7

Voici les commandes pour démarrer / arrêter / redémarrer le serveur apache:

  • Commencer:

    sudo /etc/init.d/apache2 start
    
  • Arrêter:

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

    sudo /etc/init.d/apache2 restart
    
Saurav Kumar
la source
Après avoir redémarré l'ordinateur, il semble correct avec toutes les commandes que vous avez suggérées, mais j'ai reçu ce message lors du redémarrage ... Redémarrage du serveur Web apache2 apache2: Impossible de déterminer de manière fiable le nom de domaine complet du serveur, en utilisant 127.0.1.1 pour ServerName
Artisan
1
@Kongthap: ce n'est pas une erreur. Je suis sûr que le Web est plein d'explications pour ce message.
Andrea Corbellini
Oui, @AndreaCorbellini est correct. Ce n'est pas une erreur, dit-il, car votre adresse IP n'a pas de nom de domaine complet, par exemple mail.google.com.
Saurav Kumar
4

Vérifiez le contexte du port selinux en émettant une commande

semanage port -l | grep http

S'il est présent dans la liste http_port_t, c'est OK, sinon ajoutez votre port en

semanage port -a -t http_port_t -p tcp 80

ou quelque chose que vous souhaitez attribuer.

zahid iqbal
la source
1

C'est une erreur selinux, ou du moins c'était dans mon cas. Modifiez le booléen, désactivez selinux ou définissez-le sur permissive avec setenforce 0.

Le changement booléen nécessiterait que vous exécutiez getenforce -a | grep httpet recherchez le "autoriser le réseau de connexion http". Copiez-le et remplacez "on" où la liste indique "- off"

tru
la source
Ubuntu utilise AppArmor et non SELinux, donc votre réponse n'est pas pertinente pour Ubuntu.
sgx1
En tant qu'utilisateur centos qui a eu ce problème et c'est la première question de stackoverflow à se poser, j'apprécie l'aide qui a résolu mon problème
Cacoon