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

53

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

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

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

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

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

Эндрю Ламберт
источник

Ответы:

52

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

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

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

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

Жиль "ТАК - перестань быть злым"
источник
2
Так что-то вроде аутентификации бедняка? Есть ли у этого соглашения реальное преимущество в современных * nix-подобных операционных системах?
Эндрю Ламберт
2
@Amazed: мир Unix консервативен, поэтому вопрос, который нужно задать, это: «Это вызывает какие-то реальные проблемы?» (и на это нужно ответить с полным осознанием того, что каждый работающий сервер имеет аргумент командной строки для изменения порта).
dmckee
5
@dmckee можно также утверждать, что такой дизайн приводит к большему количеству серверов, работающих как root, даже если у них есть возможность работать на альтернативных портах.
Эндрю Ламберт
5
@Amazed Это может все еще иногда быть полезным сегодня, в локальных сетях. Я не думаю, что это приведет к большему количеству серверов, работающих как root, службы могут привязать порт, затем отбросить привилегии, или использовать возможности, если они доступны, или администратор может перенаправить порт в конфигурации брандмауэра. Я не думаю, что это будет сделано, если бы Unix был разработан сегодня, но это не повредит.
Жиль "ТАК - перестань быть злым"
1
Эта ерунда давно должна уйти из ядра. Никакой номер порта не должен иметь никакого особого значения. «Обоснование» этого дизайна давно устарело (я думаю, оно было спорным даже во время разработки). Но что хуже, чем идея любых специальных диапазонов чисел, которые «заслуживают доверия», так это последствия. Веб-серверы должны быть выполнены как root только для обслуживания веб-страниц. Один эксплойт и дырочный сервер исчез. А для чего? Для устаревшего дизайна, который никогда даже не работал.
Маси