限制本地 Linux 用户只能访问自己的服务器(通过 UID)

限制本地 Linux 用户只能访问自己的服务器(通过 UID)

我希望你能用owneriptables 模块来做到这一点……

在单台机器上,如果:

  • userAserverA在(随机)端口上启动 TCP1111
  • userBserverB在(随机)端口上启动 TCP2222

… 我怎么能够:

  • 禁止userB连接到serverA,仅基于所有者serverA不是 userB而是其他用户,
  • 并且仍然允许userB连接到serverB,因为userB拥有的过程serverB

答案1

TCP 连接使用 IP 地址和端口号。它对“用户”一无所知。因此,除非每个用户都有唯一的固定 IP 地址,否则无法阻止用户 A 创建与服务器 B 的 TCP 连接。你为什么要这么做?如果服务器托管一个网站,请让它请求身份验证。用户 B 将无法登录服务器 A 上的网站,所以没有问题。

答案2

所有者 iptables 扩展的限制比你想象的要多。从iptables-扩展手册页:

所有者

此模块尝试匹配本地生成的数据包的数据包创建者的各种特征。此匹配仅在 OUTPUT 和 POSTROUTING 链中有效。转发的数据包没有任何与之关联的套接字。

  • 仅限制 OUTPUT,因此必须限制传出连接。
  • 不仅userB而且每一个您不想建立连接的用户。
  • 在每个主机上,因为如果userB从那里建立了这种连接,serverC就没有什么可以阻止它们。
  • userB如果要访问网络, 您还需要做出例外。因此,您仍然需要根据端口等连接元组来定义您的服务。
  • 另外显然所有者扩展对群组成员身份的行为不直观

更好的解决方案是在网络协议中使用身份验证。

如果必须限制特定用户的任意网络访问,请考虑编写类似于布尔值的 SELinux 策略 httpd_can_network_connect_db

相关内容