ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я знаю, как запускать демонов, которые прослушивают порты <1024, используя privbind
или несколько iptables
НАПРАВЛЕНИЕ. Или, в более общем смысле, как сделать демонов доступными на привилегированных портах, которые обычно там не работают.
Сам вопрос - это своего рода мета-вопрос.
ВОПРОС: С какой стати порты <1024 обычно зарезервированы для пользователя root. С прагматической точки зрения я бы хотел иметь возможность просто указать демону, на каком порту следует выполнять лицензию, и не заботиться о привилегиях root. Чем больше я об этом думаю, тем больше прихожу к выводу, что именно такая «безопасность» - просто исторический раздув.
Sysctl в духе sysctl -w net.ipv[46].conf.port.80=www-data
(что-то в этом роде, я надеюсь, что идея именно такая) было бы тем, чего я действительно желал бы.
Таким образом можно было бы поддерживать «текущий уровень безопасности», но при этом позволять произвольным пользователям прослушивать более низкие порты. Возможности Linux (CAP_NET_BIND_SERVICE
) являются первым шагом в правильном направлении - по крайней мере, на мой взгляд, - но, учитывая, что я привык к тому, что порты <1024 являются чем-то особенным, я не решаюсь полностью отказаться от ограничения. Я просто не вижу объективной причины, почему это так.
Кто-нибудь, просветите меня, пожалуйста :)
Заметка: Да, я читал некоторые похожие названия, но меня не вполне устраивает фраза «Тебе не следует этого делать». Необходимость перепрыгивать через обручи, чтобы apache прослушивал порт 80, где все, что он делает, запускается с root
и тогда отбрасывать привилегии не нужно (по крайней мере, я так думаю). Почему я не могу просто позволить ему работать как обычный пользователь и работать. Таким образом, ошибка повышения привилегий не допускает даже привилегий root. Все есть привилегии www-data
(или что угодно, что есть у пользователя выбранного дистрибутива)
Насколько я знаю, это действительно в основном просто историческая конвенция; Идея состоит в том, что при доступе к порту ниже 1024 вы можете быть уверены, что получаете доступ ко всему, что администратор сервера настроил для работы на сервере. Это имело больше смысла, когда серверов было мало и они огромны, и вам нужен был простой способ аутентификации или, по крайней мере, оценки надежности службы такими простыми средствами.
Кстати, вы можете обнаружить, что Возможности делай что хочешь. Видеть этот ТАК вопрос для получения дополнительной информации об альтернативах, но вот пример использования:
setcap 'cap_net_bind_service=+ep' /path/to/program