Я хочу, чтобы syslog запускался на моем Linux-сервере как пользователь без полномочий root. Это делает невозможным его привязку к порту 514, потому что это привилегированный порт. Есть ли способ предоставить пользователю "foo", не являющемуся администратором, возможность прослушивания порта 514?
setcap 'cap_net_bind_service=+ep' /path/to/syslogd
Требуется не-древнее ядро linux (2.6.24 или позже)
Вы можете настроить rinetd
(доступен в большинстве, если не во всех, стандартных репозиториях дистрибутива) для прослушивания порта 514 и пересылки соединений на какой-либо другой порт (выше 1024, скажем, 1514). Таким образом, непривилегированный пользовательский процесс может прослушивать 1514 и rinetd
будет перенаправлять соединения, так что кажется, что он прослушивает 514.
Однако это будет работать только для TCP-соединений. Если вам нужно поддерживать UDP (или что-то еще) таким же образом, а также или вместо TCP, вы можете использовать правила трансляции iptables для достижения того же эффекта.
Только что нашел здесь очень хорошее обсуждение: https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-1024-on-li
Не выглядит легко
Слушайте непривилегированный порт и используйте iptables dnat для перенаправления соединений.