我想让 syslog 在我的 Linux 机器上以非 root 用户身份运行。这样它就无法绑定到端口 514 - 因为这是一个特权端口。有什么方法可以授予非管理员用户“foo”监听端口 514 的能力吗?
答案1
setcap 'cap_net_bind_service=+ep' /path/to/syslogd
需要一个不太古老的 Linux 内核(2.6.24或更高版本)
答案2
您可以配置rinetd
(在大多数(如果不是全部)发行版的标准存储库中可用)监听端口 514 并将连接转发到其他端口(大于 1024,例如 1514)。这样,非特权用户进程可以监听 1514 并转发连接,rinetd
因此它似乎正在监听 514。
但这仅适用于 TCP 连接。如果您需要以这种方式支持 UDP(或其他任何协议)以及 TCP,那么您可以使用 iptables 转换规则来实现相同的效果。
答案3
刚刚在这里发现了一个非常好的讨论:https://stackoverflow.com/questions/413807/是否有办法让非根进程绑定到特权端口1024-on-li
看起来不容易
答案4
监听非特权端口并使用 iptables dnat 重定向连接。