Почему root требуется для прослушивания обратной связи в Java? - PullRequest
0 голосов
/ 02 октября 2011

Почему, когда я пытаюсь прослушать петлевой хост в Java (используя обычный старый сокет), он требует root-доступа, но если я использую nio, это не так?Если я попытался прослушать любой другой язык в loopback, он также не требует повышенных привилегий.

Это мой код прямо сейчас:

import java.net.*;

class Test
{
    public static void main( String[] args )
        throws Exception
    {
        ServerSocket server = new ServerSocket( 80 );
        while( true )
        {
            Socket socket = server.accept();
            System.out.print( "." );
        }
    }
}

Когда я запускаю это какобычному пользователю выдается это исключение: Exception in thread "main" java.net.BindException: Permission denied.Тем не менее, когда я запускаю это как root, он работает нормально, как и ожидалось.

1 Ответ

4 голосов
/ 02 октября 2011

Для привязки сокета в диапазоне портов 0-1023 вам необходимы права root.Эти порты используются для общих служб, таких как HTTP и SSH, и было бы опасно разрешать случайным пользователям привязывать свои произвольные приложения к этим портам.

См. Википедию: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports

Edit : имейте в виду, что произвольные приложения могут подключать к известным портам, но не привязывать к ним.В противном случае пользователи не смогут запускать честные программы ssh или mozilla.Вероятно, поэтому вы не можете воспроизвести эту ошибку на других языках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...