Назад | Перейти на главную страницу

Обычный пользователь, использующий порты ниже 1024

Есть ли способ в Linux (CentOS, если это имеет значение) разрешить обычным пользователям использовать порты ниже 1024? (откройте прослушивающий TCP-сокет на этом порту)

В настоящее время я понимаю, что только root имеет права использовать эти порты.

Не в CentOS 3/4/5 (отсутствие возможностей файловой системы):

Вы можете установить возможность CAP_NET_BIND_SERVICE для программы, которая должна открыть этот порт. Root установит возможность для исполняемого файла, затем любой пользователь может запустить этот исполняемый файл, он сможет использовать порты <1024.

Чтобы установить возможность исполняемого файла:

setcap cap_net_bind_service=+ep /path/to/program

IIRC это невозможно или, если это так, не рекомендуется по соображениям безопасности.

Но если вы хотите, чтобы пользователи могли прослушивать определенный порт, вы всегда можете использовать пересылку TCP, например rinetd или правила iptables для перенаправления соединений с этого порта на тот, который они могут прослушивать, и заставить их настроить свою службу для прослушивания на этом порту более высокого уровня.

Например, строка

aa.bb.cc.dd    80      127.0.0.1   8000

в конфигурации rinetd перенаправляет соединения на порт 80 по адресу aa.bb.cc.dd на порт localhost 8000, который может прослушивать непривилегированный пользователь. Эквивалентное правило iptables будет примерно таким:

/sbin/iptables -t nat -A PREROUTING -p tcp -d aa.bb.cc.dd --dport 80 -j DNAT --to 127.0.0.1:8000

Любой способ дает вам гораздо более детальный контроль, чем разрешение любому пользователю прослушивать любой порт.

Подход iptables имеет то преимущество, что прослушивающее приложение будет видеть IP-адрес вызывающего клиента (при использовании метода rinetd оно будет видеть все соединения как исходящие от локального хоста). Метод iptables также допускает использование UDP, а также TCP.

Вы можете создать оболочку, которая запускает SUID и сбрасывает привилегии после открытия порта.

authbind горные породы.

Возможности - отличная штука, но для этого требуются правильно настроенные определенные версии ядра. некоторые программы, такие как sun java, не имеют возможности. authbind работает на всех версиях Linux.

authbind, однако, поддерживает только IPv4.

Это полностью вне контекста, или я упускаю что-то фундаментальное? http://smarden.org/runit/chpst.8.html & http://cr.yp.to/daemontools/setuidgid.html

http://isptools.sourceforge.net/suid-wrap.html

Это сделает всю работу за вас.