使用 SELinux 或 AppArmor 限制单个进程的网络访问

信息安全 网络 访问控制 selinux 服装
2021-08-14 13:57:51

我有一个访问网络的 Python 脚本,有时我想拒绝它的网络访问。如何使用 SELinux 或 AppArmor 实现这一目标?我希望能够以受限的访问权限启动这个特定的脚本。

3个回答

AppArmor 能够阻止来自应用程序的网络连接。我自己从未做过,但您应该查看AppArmor 社区页面网络规则页面,了解如何做的详细信息。

从外观上看,该deny network指令应该允许您阻止应用程序的所有网络访问。

如果您启用了 SELinux,我的印象是默认操作是拒绝访问,所以您想要做的是有时允许网络访问,对吗?

我怀疑您将不得不在 serverfault 上执行类似此答案的操作,其中包含单个进程的 SE Linux 配置httpd,然后将该配置与iptables控制网络访问相结合。

要添加time方面,iptables 中有一个time模块这是一个链接,显示了另一个论坛上的一些实际用法。

AppArmor 已经得到了很好的回答:)

本案例的 AppArmor 配置文件为:

profile nonetwork /path/to/exec {
  # Allow all rules...
  capability,
  network,
  mount,
  remount,
  umount,
  pivot_root,
  ptrace,
  signal,
  dbus,
  unix,
  file,
  # ...but no network
  deny network,
  deny capability net_admin,
  deny capability net_bind_service,
  deny capability net_broadcast,
  deny capability net_raw,
}

现在并不是所有的 linux 发行版都支持某些特性,例如 Debian 10 不支持network, unix,dbus规则。因此,此配置文件在此类发行版中不起作用。