Warum erhalte ich beim Starten von Apache2 die Meldung "Berechtigung verweigert: make_sock: konnte nicht an Adresse gebunden werden"?

25

Ich kann damit aufhören

/etc/init.d/apache2 stop

Aber wenn ich es neu starten möchte mit:

/etc/init.d/apache2 start

Ich erhalte diesen Fehler:

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]
Handwerker
quelle

Antworten:

50

Einige Worte zu den Fehlern, die Sie in Zukunft hoffentlich vor ähnlichen Situationen bewahren werden.

In Linux sind Ports von 0 bis 1024 für die Verwendung durch das System reserviert. Dies bedeutet, dass Sie die Berechtigung haben müssen, auf grundlegende Systemeinstellungen zuzugreifen, um eine zu verwenden. Der Root-Benutzer hat solche Rechte und kann tatsächlich einen Port zwischen 0 und 1024 verwenden.

Wie Sie sehen können, gibt das System durch die Apache2-Antwort die Wurzel des Problems an ([...] konnte nicht an die Adresse bla bla 80 gebunden werden ):

(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

Wenn der Apache2-http-Daemon gestartet wird, versucht er, den 80-Port zu binden, da dies der Standardport für die Verwendung in HTTP ist. Dies ist ein Port innerhalb des Systems, dem Ports zugewiesen sind, und als solcher kann nur root darauf zugreifen.

Sie haben den Befehl start als typischer Benutzer ohne Root-Berechtigungen ausgeführt und dies nicht getan.

In einfachen Worten:

Du:

Hallo Apache2. Ich bin Kongthap und ich sage dir, dass du anfangen sollst ( /etc/init.d/apache2 start)

Apache2:

OKAY. Ich starte (Starte Webserver apache2)

System, bitte geben Sie mir Port 80, um Verbindungen zu verwenden und zu überwachen.

System:

OKAY. Einen Moment, um zu überprüfen ...

Ahh ... Entschuldigung Apache2, aber ich kann nicht zulassen, dass Sie bei 80 Port laufen, es ist für den persönlichen Gebrauch.

Und Sie haben nicht die richtigen Berechtigungen, um es zu binden. ( Operation not permitted)

Apache2:

Ohh, Kongthap ich konnte nicht starten, das System hat es nicht zugelassen ( (13)Permission denied:[...])

Fazit

Es gibt hauptsächlich zwei Lösungen für dieses Problem:

  1. Führen Sie den Apache2-HTTP-Daemon mit Root-Rechten aus sudo:

    sudo service apache2 start
    

    oder:

    sudo /etc/init.d/apache2 start
    
  2. Ändern Sie den Standard - Port von 80etwas mehr als 1024, sagen wir 2000, 2500, 9000usw. Ein typischer Hafen laufen , wenn in einer solchen Situation ist8080

    sudo vi /etc/apache2/ports.conf
    

    suchen oder wenn nicht da hinzufügen:

    Listen 8080
    

    oder ein anderer Port Ihrer Wahl, z. B. Port, > 1024und der ausgewählte Port wird von keinem anderen Prozess verwendet.

Stef K
quelle
4
Wirklich hervorragende Erklärung !!!
Artisan
Tolle Erklärung, gut verstanden!
Mwirabua Tim
Tolle Erklärung. Warum wird servicedie bevorzugte Methode verwendet?
Holloway
Dies sind Upstart-Anweisungen. Überprüfen Sie diese Frage und die Antworten auf askubuntu.com/q/19320/12218. Weitere Informationen finden Sie im upstart- Kochbuch upstart.ubuntu.com/cookbook . Denken Sie daran, dass sich diese Informationen auf die Behandlung von Diensten (Daemons) beziehen (wann und wie diese gestoppt werden). Meine Antwort befasst sich auch mit den Berechtigungsproblemen.
Stef K
Unnötige Wörtlichkeit. Die Antwort behebt das Problem nicht.
Reggie
7

Es folgen die Befehle zum Starten / Stoppen / Neustarten des Apache-Servers:

  • Anfangen:

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

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

    sudo /etc/init.d/apache2 restart
    
Saurav Kumar
quelle
Nach dem Neustart des Computers scheinen alle von Ihnen vorgeschlagenen Befehle in Ordnung zu sein, aber beim Neustart wurde folgende Meldung angezeigt ... Neustart des Webservers apache2 apache2: Der vollständig qualifizierte Domänenname des Servers konnte mit 127.0.1.1 für Servername
Artisan,
1
@Kongthap: das ist kein fehler. Ich bin sicher, das Web ist voller Erklärungen für diese Nachricht.
Andrea Corbellini
Ja, @AndreaCorbellini ist richtig. Es handelt sich nicht um einen Fehler, da Ihre IP-Adresse keinen vollständig qualifizierten Domain-Namen hat, zum Beispiel mail.google.com.
Saurav Kumar
4

Überprüfen Sie den Kontext des Selinux-Ports, indem Sie den Befehl eingeben

semanage port -l | grep http

Wenn es in der http_port_t-Liste vorhanden ist, ist es in Ordnung, andernfalls fügen Sie Ihren Port durch hinzu

semanage port -a -t http_port_t -p tcp 80

oder etwas, das Sie zuweisen möchten.

zahid iqbal
quelle
1

Dies ist ein Selinux-Fehler, oder zumindest war es in meinem Fall. Ändern Sie entweder den Booleschen Wert, deaktivieren Sie Selinux oder setzen Sie ihn auf "Permissive" mit setenforce 0.

Die boolesche Änderung würde erfordern, dass Sie ausführen getenforce -a | grep httpund nach "http connect network zulassen" suchen. Kopiere es und ersetze "on", wo auf der Liste "- off" steht

tru
quelle
Ubuntu verwendet AppArmor nicht SELinux, daher ist Ihre Antwort für Ubuntu irrelevant.
SGX1
Als Centos-Benutzer, der dieses Problem hat und dies ist die erste Stackoverflow-Frage, die auftaucht, weiß ich die Hilfe zu schätzen, mit der dieses Problem
behoben wurde