15.11.2011

Как обычному пользователю забиндиться на привилегированный порт (1-1023)

Как известно все ядра компилируют так, чтобы не-root не мог забиндится на порт 1-1023. Можно конечно пересобрать ядро и поменять эту настройку до компиляции, но поменять этот параметр на готовой работающей системе нельзя.
Есть еще вариант забиндить на непривилегированный порт, а привилегированный туда соединить либо через rinetd, либо через iptables такой командой:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Но зачастую это не подходит, особенно когда TCP-демон возвращает свой URI для работы, а не тот, за которым маскируется.


Неподходят также и варианты запуска через sudo, так как нам не нужен демон, запущенный от рута по причинам безопасности.


Единственные три варианта, это

либо использовать возможность setcap/getcap в новых ядрах:
apt-get install libcap2-bin
setcap 'cap_net_bind_service=+ep' /path/to/daemon

запуск:
/path/to/daemon

либо запускать через authbind:
apt-get install authbind
install -o my_user -m 500 /dev/null /etc/authbind/byport/443

запуск:
authbind /path/to/daemon

либо воспользоваться посредником supervisor:
apt-get install supervisor
и отконфигурировать его так.


***************
вообще команда install не особо популярна, но я ее написал, чтобы сократить количество команд. Если не понимаете, что она делает, то просто сделайте так:
touch /etc/authbind/byport/443
chown my_user /etc/authbind/byport/443
chmod 500 /etc/authbind/byport/443
***************

Комментариев нет:

Отправить комментарий