Perché ricevo "Autorizzazione negata: make_sock: impossibile associare l'indirizzo" all'avvio di Apache2?


25

Posso smettere di usare

/etc/init.d/apache2 stop

Ma quando voglio ricominciare usando:

/etc/init.d/apache2 start

Ottengo questo errore:

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]

Risposte:


50

Alcune parole sugli errori che ricevi che si spera ti salveranno da situazioni simili in futuro.

In Linux le porte da 0 a 1024 sono riservate per l'uso del sistema. Ciò significa che per poterne utilizzare uno, è necessario disporre dell'autorità per la modifica: accedere alle impostazioni di base del sistema. L'utente root dispone di tali privilegi e può effettivamente utilizzare una porta compresa tra 0 e 1024.

Nel tuo problema, come puoi vedere, il sistema attraverso la risposta Apache2 indica la radice del problema ([...] non potrebbe essere associato a 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

All'avvio del daemon http di Apache2, tenta di associare la porta 80 in quanto è la porta predefinita da utilizzare in HTTP see , che è una porta all'interno delle porte assegnate al sistema e come tale è accessibile solo da root.

Hai eseguito il comando start come utente tipico senza privilegi di root e hai portato a non farlo.

In parole semplici:

Tu:

Ciao Apache2. Sono Kongthap e ti sto dicendo di iniziare ( /etc/init.d/apache2 start)

apache2:

OK. Sto iniziando (Avvio del web server apache2)

Sistema, per favore dammi la porta 80 da usare e ascoltare le connessioni.

Sistema:

OK. Un momento per controllare ...

Ahh ... Mi dispiace Apache2 ma non posso lasciarti funzionare a 80 porte, è per uso personale.

E non hai i privilegi corretti per vincolarlo. ( Operation not permitted)

apache2:

Ohh, Kongthap non sono riuscito a iniziare, il sistema non mi ha permesso di farlo ( (13)Permission denied:[...])

Conclusione

Esistono principalmente due soluzioni a questo problema:

  1. Esegui il demone HTTP Apache2 con i privilegi di root usando sudo:

    sudo service apache2 start
    

    o:

    sudo /etc/init.d/apache2 start
    
  2. Cambiare la porta di default da 80a qualcosa di più grande 1024, diciamo 2000, 2500, 9000, ecc Una tipica porta a correre quando in tale situazione è8080

    sudo vi /etc/apache2/ports.conf
    

    cercare o in caso contrario aggiungere:

    Listen 8080
    

    o qualsiasi altra porta di tua scelta come porta > 1024e la porta selezionata non viene utilizzata da un altro processo.


4
Spiegazione davvero eccellente !!!
Artigiano,

Grande spiegazione, ben compresa!
Mwirabua Tim,

Ottima spiegazione Perché sta usando serviceil metodo preferito?
Holloway,

Sono direttive Upstart, controlla questa domanda e risposte askubuntu.com/q/19320/12218 e per una visione più dettagliata controlla il ricettario upstart upstart.ubuntu.com/cookbook . Tieni presente che si riferiscono alla gestione dei servizi (demone) (quando e come iniziare-interrompere) questa domanda e la mia risposta affronta anche i problemi di autorizzazione.
Stef K,

Inutile verbosità. La risposta non risolve il problema.
Reggie,

7

Di seguito sono riportati i comandi per avviare / arrestare / riavviare il server apache:

  • Iniziare:

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

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

    sudo /etc/init.d/apache2 restart
    

Dopo aver riavviato il computer, sembra ok con tutti i comandi che hai suggerito ma ho ricevuto questo messaggio durante il riavvio ... Riavvio del server Web apache2 apache2: Impossibile determinare in modo affidabile il nome di dominio completo del server, utilizzando 127.0.1.1 per ServerName
Artisan

1
@Kongthap: non è un errore. Sono sicuro che il web è pieno di spiegazioni per quel messaggio.
Andrea Corbellini,

Sì, @AndreaCorbellini è corretto. Non è un errore, dice perché il tuo ip non ha alcun nome di dominio completo, ad esempio mail.google.com.
Saurav Kumar,

4

Controllare il contesto della porta selinux emettendo il comando

semanage port -l | grep http

Se è presente nell'elenco http_port_t, va bene, altrimenti aggiungi la tua porta

semanage port -a -t http_port_t -p tcp 80

o qualcosa che vuoi assegnare.


1

Questo è un errore selinux, o almeno lo è stato nel mio caso. Cambia il valore booleano, disabilita selinux o impostalo su permissive consetenforce 0 .

La modifica booleana richiederebbe l'esecuzione getenforce -a | grep httpe la ricerca di "consenti la connessione http". Copiarlo e sostituire "on" dove l'elenco dice "- off"


Ubuntu usa AppArmor non SELinux, quindi la tua risposta è irrilevante per Ubuntu.
sgx1,

Come utente Centos che ha riscontrato questo problema e questa è la prima domanda di StackOverflow, apprezzo l'aiuto che ha risolto il mio problema
Cacoon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.