Skip to content

如何增强容器安全:

ruri提供一系列安全选项,下面是它们的使用说明:

日常:

使用rootless容器:

在现代的GNU/Linux上,一般只要配置好/etc/subuid和/etc/subgid,安装uidmap(shadow)包,即可使用rootless容器。
如果你的设备支持,可以使用-r选项来以普通用户运行无特权容器。

使用普通用户:

如果你的设备不支持,你还有一个选项,在容器中创建一个普通用户,并使用-E username选项来使用普通用户在容器中运行命令。请确保username在容器的/etc/passwd中有正确记录。
如果你不需要使用sudo,可以同时开启no_new_privs(-n)选项。

开启unshare:

ruri支持除网络外的常用命名空间(网络命名空间仅用于禁用网络),你可以使用-u选项尝试开启支持的命名空间。
unshare功能至少依赖mount ns,并会默认使用pivot_root(2)来替代chroot(2)来提供更高的安全性。

Capabilities(权限集合):

ruri支持Linux的capability控制,你可以使用-d cap/num来移除一个capability,-k来保留。
ruri默认已经移除了大部分可能危害宿主机的capability,但如果你有其他不需要的特权,也可以选择移除。

关闭.rurienv支持:

ruri默认会在容器中创建/.rurienv来统一容器配置,这份配置文件通过设置只读属性(immutable)和移除容器修改此属性的特权(CAP_LINUX_IMMUTABLE)来保证安全,如果你觉得还不够安全,可以使用-N选项禁用此文件。

设置内存/cpu限制:

ruri支持cgroup的memory/cpu/cpuset控制组,你可以使用-l选项来设置这些限制。

挂载外部挂载点为只读:

ruri支持挂载外部挂载点为只读,如果你只需要访问文件而不需要修改,请使用-M选项来代替-m选项。

开启seccomp:

ruri内置了一份黑名单模式seccomp配置,你可以使用-s选项来开启它。

极客:

自己编写Seccomp配置:

ruri内置的seccomp配置足以应对大多威胁,但如果你需要更激进的策略,可以手动编辑src/seccomp.c来写入自己的配置文件。

激进:

Hidepid:

ruri支持为/proc设置hidepid选项,使用-i 1/2 来开启。

开启no_new_privs:

您可以使用-n选项来开启NO_NEW_PRIVS,开启后sudo等程序将无法运行。

挂载根目录为只读:

您可以使用-R选项来使整个容器根目录只读。开启后,/sys和/proc也将为完全只读。

禁用网络:

您可以使用-x选项来完全禁用容器网络,这需要NET命名空间,并会自动开启unshare。

默认安全保护:

ruri默认还提供如下安全防护:

  • /dev下只创建必须文件
  • /sys和/proc下部分敏感目录/文件为只读,部分被直接屏蔽
  • 移除大部分可能导致危害宿主机的特权