Docker 如何防止时间变化

Docker 如何防止时间变化

我知道默认情况下不允许直接从容器内部设置时间,即当我运行时:

date -s 10:10

我收到一条错误信息:date: cannot set date: Operation not permitted

我使用

sudo docker run -it ubuntu:latest

因此进程本身具有 root 权限。我在容器内部运行:

  • whoami-> 结果是root
  • ls -l /bin/date-> 结果是-rwxr-xr-x 1 root root

所以实际上我有足够的权限并且应该能够运行它。

我知道还有另一种机制阻止我设置数据,我的问题是这究竟是如何实现的?

答案1

Docker 使用安全计算,这是一个系统调用过滤器——它可以将特定的内核调用列入白名单或黑名单,例如阻止模块加载或时间调整。

Docker 可以使用应用装甲,这是一个安全模块,旨在强制执行超出普通 UID 权限的每个应用程序策略。(某些发行版甚至对标准应用程序也使用 AppArmor。)

Docker 还可以使用用户命名空间,允许每个容器具有与主机系统不同的 UID。您的容器进程思考他们的 uid 是 0,但只在自己的域(用户命名空间)内具有类似 root 的权限,而主机系统看到的是普通的非 root uid。每个容器的 uid 0 也与其他每个容器的 uid 0 是分开的。

相关内容