我希望在环回接口的端口上启动监听进程的用户是唯一可以连接到此端口的用户。保留端口。无需身份验证。
我希望其他用户能够在任何可用的环回端口上执行相同操作。
是否有任何机制(例如 selinux 或 apparmor)能够实现这一点?
[编辑] 需要澄清的是,该场景是多用户计算机上的 cntlm。每个用户都使用 cntlm 通过代理进行身份验证,使用自己的凭据登录到环回接口上的唯一端口。我正在尝试找到一种方法来隔离这种情况,以便用户无法使用彼此的代理连接进行连接。
答案1
如果你所说的环回是指仅与本地主机建立网络连接,请考虑AF_UNIX 套接字。又称为 UNIX 域套接字。又称为非 IP 方式,可连接到 PostgreSQL 或 MySQL 数据库。
在 Linux 上,这样做的优点是尊重文件权限。如果不以用户身份写入套接字,则无法工作。这种行为可能不规范。
IP 网络不携带发送数据包的操作系统用户 ID。也许在 nftables 防火墙规则中,您可以过滤 uid,但仅限于主机防火墙中的本地套接字。更好的做法是使用某种身份验证协议。
答案2
Iptables 完全可以满足我的要求。下面是一个我测试过的、可以运行的 iptables 示例。我只需要编写一个包装器,将 cntlm 命令夹在 iptables 命令中。我可以将其命名为 lunch.sh
# To reserve port 7777 on lo to a user "foo"
iptables -I OUTPUT -o lo -p tcp --dport 7777 -j DROP
iptables -I OUTPUT -o lo -p tcp --dport 7777 --match-owner --uid-owner foo -j ACCEPT
# To release the port
iptables -D OUTPUT -o lo -p tcp --dport 7777 -j DROP
iptables -D OUTPUT -o lo -p tcp --dport 7777 --match-owner --uid-owner foo -j ACCEPT