Как открыть в Linux порт ниже 1024 без полномочий root
Иногда требуется запустить сетевой сервис, использующий порт ниже 1024. Например, обычный web-сервер использует по умолчанию 80-й порт. Но для этого программа потребует полномочия root. А, как вы понимаете, смотрящий в интернет порт с полномочиями суперпользователя — не самая лучшая идея.
Порт ниже 1024 в Linux
В Linux существует прекрасная команда setcap, наделяющая программы дополнительными полномочиями. В частности, разрешающая открывать любые порты непривилегированным пользователям.
Допустим, нам нужно запустить HTTP-сервер на Питоне. Для этого нужен 80 порт. Но не под рутом же его запускать! Берем непривилегированного поциента с оболочкой по умолчанию /bin/false и тюнингуем немного интерпретатор Питона:
$ sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python2.7
Проверяем:
$ getcap /usr/bin/python2.7
/usr/bin/python2.7 = cap_net_bind_service+eip
Запускаем web-сервер на 80 порту не под рутом. О чудо! Всё работает!
$ /usr/bin/python2.7 -m SimpleHTTPServer 80
По окончанию экспериментов не забываем отозвать права:
$ sudo setcap -r /usr/bin/python2.7
Я пользователь Минта и ничего не понял
Открытые порты — любимое лакомство хакеров. Хакеры сканируют диапазоны IP-адресов на открытые порты (nmap), определяют вид сервиса и применяют эксплоиты. С какими привилегиями работает программа, открывшая порт, такие привилегии и получит хакер. Поэтому хорошей практикой является создание для каждого сервиса отдельного пользователя и группы с ограниченными полномочиями и пустышкой вместо шелла.
Комментировать