Dlaczego pojawia się komunikat „Odmowa zezwolenia: make_sock: nie można powiązać z adresem” podczas uruchamiania Apache2?

25

Mogę przestać go używać

/etc/init.d/apache2 stop

Ale kiedy chcę go ponownie uruchomić za pomocą:

/etc/init.d/apache2 start

Otrzymuję ten błąd:

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]
Rzemieślnik
źródło

Odpowiedzi:

50

Kilka słów o błędach, które otrzymujesz, które, mam nadzieję, uratują cię od podobnych sytuacji w przyszłości.

W systemie Linux porty od 0 do 1024 są zarezerwowane do użytku systemowego. Oznacza to, że aby go użyć, musisz mieć uprawnienia do zmiany - dostęp do podstawowych ustawień systemu. Użytkownik root ma takie uprawnienia i może faktycznie korzystać z portu z zakresu od 0 do 1024.

W twoim problemie, jak widać, system za pośrednictwem odpowiedzi Apache2 wskazuje na przyczynę problemu ([...] nie mógł powiązać z adresem 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

Podczas uruchamiania demona HTTP Apache2 próbuje powiązać port 80, ponieważ jest to domyślny port do użycia w HTTP see , który jest portem w przypisanych do systemu portach i jako taki może być dostępny tylko przez root.

Wykonałeś polecenie start jako typowy użytkownik bez uprawnień roota i doprowadziłeś do niepowodzenia.

W prostych słowach:

Ty:

Cześć Apache2. Jestem Kongthap i mówię wam, żebyście zaczęli ( /etc/init.d/apache2 start)

Apache2:

DOBRZE. Zaczynam (Uruchamianie serwera WWW apache2)

System, daj mi port 80 do używania i nasłuchiwania połączeń.

System:

DOBRZE. Chwileczkę, by sprawdzić ...

Ahh ... Przepraszam, Apache2, ale nie mogę pozwolić, abyś uruchomił się na porcie 80, to jest do użytku osobistego.

I nie masz odpowiednich uprawnień, aby go związać. ( Operation not permitted)

Apache2:

Ohh, Kongthap nie udało mi się uruchomić, System nie pozwolił mi tego zrobić ( (13)Permission denied:[...])

Wniosek

Istnieją głównie dwa rozwiązania tego problemu:

  1. Uruchom demona HTTP Apache2 z uprawnieniami administratora, używając sudo:

    sudo service apache2 start
    

    lub:

    sudo /etc/init.d/apache2 start
    
  2. Zmienić domyślny port od 80do czegoś większego niż 1024, powiedzmy 2000, 2500, 9000, itd. Typowe portu do uruchomienia gdy w takiej sytuacji jest8080

    sudo vi /etc/apache2/ports.conf
    

    poszukaj lub jeśli nie, dodaj:

    Listen 8080
    

    lub dowolny inny > 1024wybrany port, taki jak port, a wybrany port nie jest używany przez inny proces.

Stef K.
źródło
4
Naprawdę doskonałe wytłumaczenie !!!
Rzemieślnik
Świetne wyjaśnienie, dobrze zrozumiane!
Mwirabua Tim
Świetne wyjaśnienie. Dlaczego korzystasz servicez preferowanej metody?
Holloway,
Są to dyrektywy Upstart, sprawdź to pytanie i odpowiedzi askubuntu.com/q/19320/12218, a dla bardziej szczegółowego widoku sprawdź książkę kucharską upstart.ubuntu.com/cookbook . Należy pamiętać, że odnoszą się one do obsługi usług (demona) (kiedy i jak zacząć-zatrzymać) to pytanie, a moja odpowiedź dotyczy również problemów z pozwoleniami.
Stef K
Niepotrzebna gadatliwość. Odpowiedź nie rozwiązuje problemu.
reggie
7

Poniżej znajdują się polecenia uruchomienia / zatrzymania / restartu serwera Apache:

  • Zacząć:

    sudo /etc/init.d/apache2 start
    
  • Zatrzymać:

    sudo /etc/init.d/apache2 stop
    
  • Zrestartować:

    sudo /etc/init.d/apache2 restart
    
Saurav Kumar
źródło
Po ponownym uruchomieniu komputera wydaje się, że wszystkie polecenia, które zasugerowałeś, są w porządku, ale dostałem ten komunikat podczas ponownego uruchamiania ... Ponowne uruchamianie serwera WWW apache2 apache2: Nie można wiarygodnie określić w pełni kwalifikowanej nazwy domeny serwera, używając 127.0.1.1 dla ServerName
Artisan
1
@Kongthap: to nie jest błąd. Jestem pewien, że sieć jest pełna wyjaśnień dla tej wiadomości.
Andrea Corbellini
Tak, @AndreaCorbellini jest poprawny. To nie jest błąd, mówi, ponieważ twój ip nie ma w pełni kwalifikowanej nazwy domeny, na przykład mail.google.com.
Saurav Kumar
4

Sprawdź kontekst portu selinux, wydając polecenie

semanage port -l | grep http

Jeśli jest obecny na liście http_port_t, to jest OK, w przeciwnym razie dodaj swój port przez

semanage port -a -t http_port_t -p tcp 80

lub coś, co chcesz przypisać.

zahid iqbal
źródło
1

To błąd selinux, a przynajmniej tak było w moim przypadku. Zmień wartość logiczną, wyłącz selinux lub ustaw na permissive za pomocą setenforce 0.

Zmiana wartości logicznej wymagałaby uruchomienia getenforce -a | grep httpi wyszukania „zezwól na połączenie sieci http”. Skopiuj go i zastąp „on” tam, gdzie na liście jest napisane „off”

tru
źródło
Ubuntu używa AppArmor, a nie SELinux, więc twoja odpowiedź nie ma znaczenia dla Ubuntu.
sgx1
Jako użytkownik centos, który dostał ten problem i jest to pierwsze pytanie dotyczące
przepełnienia stosu,