it-swarm-ru.tech

Почему первые 1024 порта доступны только пользователю root?

Это более праздное любопытство, чем все остальное. Мой друг спросил меня: "Какой диапазон портов может использовать только Linux в Linux?" Я сказал ему, что 0-1024 были ограничены. Затем он спросил, почему это так и ... я растерялся. Понятия не имею.

Есть ли причина, по которой эти порты ограничены, а 1025-65535 - нет?

Большинство основных сетевых служб (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP и т.д.) Находятся в этом диапазоне, поэтому я мог подумать о возможных ответах:

  • Ненадежный пользователь может запустить программу, которая прослушивает эти порты для получения сведений о входе в систему.
  • Ненадежный пользователь может запустить неавторизованное серверное приложение.

Кто-нибудь может пролить свет здесь?

53
Andrew Lambert

Предположим, вы обмениваетесь данными с компьютером через порт <1024, и вы знаете, что на компьютере работает какой-то вариант Unix. Затем вы знаете, что служба, запущенная на этом порту, одобрена системным администратором: она работает от имени пользователя root или, по крайней мере, должна была быть запущена от имени пользователя root.

В широком, диком мире Интернета это не имеет значения. Большинство серверов управляются теми же людьми, что и службы, работающие на них; Вы бы не доверяли корням больше, чем другим пользователям.

С многопользовательскими машинами, особенно в локальной сети, это может иметь значение. Например, в дни, предшествовавшие гражданской криптографии, популярным методом запуска команд Shell на другом компьютере был rsh ( r emote ш ​​ ELL); Вы можете использовать аутентификацию по паролю или подтвердить подлинность, просто доказав, что вы являетесь пользователем X на компьютере A (при этом машина B знает, что X @ A может войти в систему как X @ B без пароля). Как это доказать? Клиент rsh имеет значение setuid root и использует номер порта <1024, поэтому сервер знает, что клиент, с которым он общается, заслуживает доверия, и не будет лгать о том, какой пользователь на A вызывает его. Точно так же NFS был спроектирован прозрачным по отношению к пользователям и разрешениям, поэтому общая конфигурация состояла в том, что в локальной сети каждая машина использовала одну и ту же базу данных пользователей, и пользователь N в A, монтирующий файловые системы с сервера B, получит разрешения пользователя N в B. Опять же, тот факт, что NFS-клиент поступает с номером порта <1024, доказывает, что root в A проверил NFS-клиента, который должен убедитесь, что если он передает запрос, предназначенный для пользователя N, то этот запрос действительно от пользователя N.

Неавторизованные пользователи, не имеющие возможности запускать серверы на низких портах, являются еще одним преимуществом, но не основным. В те времена спуфинг был новинкой, и пользователи, использующие спуф-серверы, в любом случае были бы быстро аннулированы бдительными администраторами.

52
Gilles 'SO- stop being evil'