Подтвердить что ты не робот

Почему порты ниже 1024 привилегированных?

Я слышал, что это означает функцию безопасности, но часто это кажется проблемой безопасности. Если я хочу написать сервер, который использует привилегированный порт, мне не только нужно беспокоиться о том, насколько безопасен мой код, но я должен особо беспокоиться о том, пользуюсь ли я правильной настройкой setuid и отменяет привилегии.

4b9b3361

Ответ 1

True. Но это также означает, что любой, кто разговаривает с вами, знает, что вам нужно иметь права root для запуска этого сервера. Когда вы входите на сервер на порту 22 (скажем), вы знаете, что разговариваете с процессом, который запускался от root (проблемы с безопасностью в стороне), поэтому вы доверяете ему свой пароль для этой системы или другую информацию, которую вы можете не доверяйте никому с учетной записью пользователя в этой системе.

Ссылка: http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html.

Отредактируйте, чтобы подробно рассказать о причинах: множество наиболее важных сетевых сервисов - telnet (да, он по-прежнему используется - на удивление часто), SSH, множество HTTP-сервисов, FTP и т.д. - включают передачу важных данных, таких как пароли, провод. В защищенной установке какое-то шифрование, независимо от того, связано ли оно с протоколом (SSH) или обернуто вокруг него (stunnel, IPSec), защищает данные от того, как их обрушивают на провод, но все эти защиты заканчиваются на сервере.

Чтобы защитить ваши данные правильно, вы должны быть уверены, что разговариваете с "настоящим" сервером. Сегодня безопасные сертификаты являются наиболее важным способом сделать это в Интернете (и в других местах): вы предполагаете, что только "реальный" сервер имеет доступ к сертификату, поэтому, если вы убедитесь, что на сервере, с которым вы разговариваете, есть этот сертификат, вы Я верю в это.

Привилегированные порты работают очень схожим образом: только root имеет доступ к привилегированным портам, поэтому, если вы разговариваете с привилегированным портом, вы знаете, что разговариваете с root. Это не очень полезно в современной сети: важно то, что сервер, а не его IP-адрес. В других типах сетей это не так: в академической сети, например, серверы часто физически контролируются доверенным персоналом в безопасных номерах, но студенты и сотрудники имеют свободный доступ как пользователей. В этой ситуации можно с уверенностью предположить, что вы всегда можете доверять root, так что вы можете безопасно входить в личный доступ и отправлять личные данные в привилегированный порт. Если обычные пользователи могут прослушивать все порты, вам понадобится дополнительный слой, чтобы убедиться, что определенной программе доверяют определенные данные.

Ответ 2

Вы не говорите, какую платформу вы используете, но по Linux вы, по крайней мере, можете использовать возможности (в частности, CAP_NET_BIND_SERVICE), чтобы позволить процессу, не зависящему от root, прослушивать порт менее 1024. См., например, Есть ли способ для не-корневых процессов связываться с "привилегированными" порты в Linux?

Другой альтернативой является настройка правил iptables для пересылки трафика из привилегированного порта в непривилегированный порт (я использовал это в производстве, и он довольно прост и хорошо работает). Он также описан в приведенной выше ссылке.