Итак, у меня есть блок RedHat 5, в котором я хочу запустить написанное мной приложение, реализующее SLP. SLP использует порт 427 для ответа на служебные запросы. Насколько я понимаю, порты ниже 1024 являются «привилегированными» и, следовательно, не могут быть связаны кем-либо, кроме root. Я не могу запустить это приложение как root, так как оно запускается через tomcat.
Одно из творческих решений, которое мне действительно нравится, - это просто написать правило iptables для маршрутизации привилегированного порта на непривилегированный. В моих проверках концептуальных тестов это прекрасно работает. К сожалению, было бы очень (и понятно) желанием, если бы мое приложение не требовало возиться с iptables при установке.
Итак, я услышал слух и не могу найти ничего, что могло бы подтвердить это, что существует какая-то команда или параметр, которые можно установить, чтобы сделать любой порт, который я хочу, непривилегированным. Это правда? Если да, то как это делается? Спасибо!
ОБНОВИТЬ
Итак, я увидел этот пост на Stack Overflow: https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-1024-on-l Похоже, он использовал то, что называется способностями. Проблема в том, что, похоже, требуется ядро 2.6.24+, но у меня есть доступ только к ядру 2.6.18. Есть ли способ установить возможности на коробке 2.6.18?
По сути, вы спрашиваете то же самое:
https://stackoverflow.com/questions/5544713/starting-tomcat-on-port-80-on-centos-release-5-5-final
Итак, используйте jsvc.
Бандажный подход - это прослушивание непривилегированного порта, а затем перенаправление с помощью xinetd с привилегированного порта.
$ grep bandaid /etc/services
bandaid 190/tcp # bandaid
$ cat /etc/xinetd.d/bandaid
service bandaid
{
disable = no
bind = 10.0.0.45
socket_type = stream
protocol = tcp
wait = no
user = nobody
redirect = localhost 8888
}
Это ужасная идея, IMO, но иногда у вас нет других вариантов.