В системах Unix привязка к tcp-порту <1024 для процесса без привилегий root запрещена.
Какова была первоначальная причина и остается ли она в силе?
Например, http-серверу не нужны привилегии root для обслуживания html-страницы.
Какой процесс / протокол нужен пользователю Unix, чтобы он работал с привилегиями root?
Спасибо
Этот диапазон портов не должен определяться программистом.
это зарезервировано IANA,
Хорошо известные порты - это порты от 0 до 1023.
Хорошо известные порты DCCP НЕ ДОЛЖНЫ использоваться без регистрации IANA. Процедура регистрации определена в [RFC4340], раздел 19.9.
Для проверки различных мнений,
Из linuxquestions ветка (подробнее читайте по ссылке)
Предел 1024 порта фактически кусает себя за хвост. Он заставляет демоническую практику, которая может открыть дыры в безопасности, что сделает ограничение неэффективным в качестве меры безопасности.
Некоторые из основных системных служб предоставляют удаленные интерфейсы для клиентских компонентов через удаленные вызовы процедур (RPC). В основном они доступны через конечные точки именованных каналов, доступные через протокол Common Internet File System (CIFS), хорошо известные порты TCP / UDP и, в некоторых случаях, временные порты TCP / UDP. Исторически сложилось так, что в сервисах было много уязвимостей, которыми могли воспользоваться анонимные пользователи. При эксплуатации эти уязвимости предоставляют злоумышленнику те же привилегии, что и служба на хосте.
В наши дни протоколы вроде BitTorrent и Skype переместились через временные порты в незарезервированное пространство и не беспокоятся о корневом доступе. Целью является не просто обходя эту старую систему безопасности зарезервированного порта; Сегодняшние протоколы хотят обходить даже периметр сети (Skype - хороший тому пример). Дело будет идти дальше по мере увеличения пропускной способности сети и доступности, когда каждый пользователь компьютера, вероятно, будет запускать веб-сервер самостоятельно -- и может быть, неосознаннобыть часть ботнет.
Нам нужна безопасность, к которой стремятся эти старые методы.
но теперь это нужно будет делать более новыми способами.
Что ж, первоначальная мысль, насколько я помню со времен BSD Unix, заключалась в том, что порты <1024 должны были быть зарезервированы для «хорошо известных служб», и все еще предполагалось, что серверы будут относительно редкими, и что люди с привилегиями root будут считаться в некотором роде "доверенным". Таким образом, у вас должна была быть привилегия привязать сокет для прослушивания порта, который будет представлять сетевую службу, к которой будут иметь доступ другие пользователи.
Порты 1024–4999 предназначались для использования в качестве «эфемерных» портов, которые будут представлять клиентскую сторону TCP-соединения. Порты 5000+ предназначались для некорневых серверов.
Очевидно, все эти предположения довольно быстро улетучились. Проверьте список зарезервированных номеров портов TCP IANA, чтобы увидеть, насколько высоки дела.
Одним из решений этой проблемы была идея Portmapper RPC. Вместо того, чтобы резервировать TCP-порт для каждой службы, служба запускалась бы на случайном порте и сообщала демону portmapper, где он слушает. Клиенты будут спрашивать portmapper, «где находится служба X», и переходить оттуда. Я не могу вспомнить, какие механизмы безопасности применялись для защиты известных служб RPC от подделки.
Я не уверен, что в наши дни для всего этого есть веская причина, но, как и в большинстве случаев в мире * nix, вещи имеют тенденцию накапливаться, а не заново изобретаться.
Кто-нибудь читал Вернора Винджа? Я помню, как он писал в одном из своих романов о компьютерной системе далекого будущего, которая включала в себя слои и слои кода из древнего прошлого, при этом время по-прежнему выражается числом секунд с некоторой древней даты (01.01.1970). если быть точным). Он, наверное, не за горами.
Раньше обычные пользователи входили в систему на Unix-машинах. Так что вы бы не хотели, чтобы средний пользователь настраивал поддельную службу ftp или что-то в этом роде.
В наши дни типичное использование состоит в том, что только администратор и несколько других доверенных лиц имеют доступ к серверу, поэтому, если бы модель была переделана сегодня, ограничение <1024 могло бы отсутствовать.
Это историческая конвенция.
Когда-то систем было намного меньше. Также не было DNS, FTP-сайты запрашивали анонимный пароль в качестве адреса электронной почты, и не было спама.
По сути, это было подразумеваемое «джентльменское соглашение». Системы были хорошо администрированы: если кто-то все испортил, вы знали, с кем поговорить, или, если они были раздражительны, отключение от сети в значительной степени означало оставаться в автономном режиме.
Сегодня, когда TCP / IP используется во всем, это больше не обеспечивает безопасности.
Для служб, которые принимают системные пароли, имеет смысл работать на привилегированных портах; это означает, что пользователи с учетными записями оболочки не могут настраивать «поддельные» службы на одном и том же порте для сбора учетных данных людей или запрещать доступ, настраивая нефункциональные службы на тех же портах.
Если у вас был многопользовательский компьютер, и непривилегированный пользователь смог настроить мошеннический демон ssh, он мог бы перехватить пароли других пользователей и получить доступ к их учетным записям (конечно, им пришлось бы сделать это, пока законный демон ssh был отключен, возможно, для обслуживания или во время запуска или выключения системы)
Вещи, которые не принимают системные пароли, не имеют большого значения, хотя есть серьезные проблемы с безопасностью при совместном использовании таких вещей, как веб-серверы, между пользователями в многопользовательском компьютере (как обнаружили провайдеры общего хостинга)