Вопрос по ip, unix – Почему порты ниже 1024 являются привилегированными? [закрыто]

51

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

Кажется, больше вещей Superuser. Может перенести вопрос? Martijn
В Linux, если вы устанавливаете программу с помощью CAP_NET_BIND_SERVICE, эта программа может прослушивать привилегированные порты, будучи другим пользователем. человек Rahly

Ваш Ответ

2   ответа
8

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

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

56

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

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

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

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

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

Наоборот, это очень большая и важная причина - ясно, что я не достаточно хорошо объяснил выше.
@Rahly: Ваше предположение неверно: это правда, что только root можетinitiate сервисы, которые прослушивают привилегированные порты. Но после запуска служба обычно удаляет привилегии root и запускается как пользователь с ограниченными правами (например,www-dataв целях безопасности, о которых вы упомянули. Таким образом, службы на привилегированных портах должны быть авторизованы пользователем root, но обычно они не запускаются с привилегиями root.
@Rahly: если корневая учетная запись вашего компьютера скомпрометирована или если корневая учетная запись управляется идиотом, у вас возникнет более серьезная проблема, поскольку любая служба, работающая на этой машине, будет подозрительной. Короче говоря, вы никогда не должны подключаться к машине, которой вы не доверяете.
Кажется, это такая маленькая причина для такого раздражающего ограничения. num1
На моем Ubuntu они запускаются с правами root:nginx master process, smbd, sshd, cupsd, cups-browsed, nmbd, dhclient, Эти дроп привилегии:lighttpd, dnsmasq, exim4, mongod, mysqld, avahi-daemon, dictd ntpd, Так что вы оба не правы, я имею в виду правильно.

Похожие вопросы