1.软文推荐

2.软文推荐

3.软文推荐

Podman(Pod Manager)是一个功能齐全的容器引擎,它是一个简单的无守护工具。 Podman提供了一个类似Docker-CLI的命令行,可以简化从其他容器引擎的转换,并允许管理pod,容器和图像。

什么是审计?

Linux 内核有一个有趣的安全功能,叫做审计。它允许管理员在系统上监视安全事件,并将它们记录到audit.log 中,该文件可以本地存储或远程存储在另一台机器上,以防止黑客试图掩盖他的踪迹。

/etc/shadow 文件是一个经常要监控的安全文件,因为向其添加记录可能允许攻击者获得对系统的访问权限。管理员想知道是否有任何进程修改了该文件,你可以通过执行以下命令来执行此操作:

# auditctl -w /etc/shadow

现在让我们看看当我修改了/etc/shadow 文件会发生什么:

# touch /etc/shadow
# ausearch -f /etc/shadow -i -ts recent
type=PROCTITLE msg=audit(10/10/2018 09:46:03.042:4108) : proctitle=touch /etc/shadow type=SYSCALL msg=audit(10/10/2018 09:46:03.042:4108) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7ffdb17f6704 a2=O_WRONLY|O_CREAT|O_NOCTTY| O_NONBLOCK a3=0x1b6 items=2 ppid=2712 pid=3727 auid=dwalsh uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=3 comm=touch exe=/usr/bin/touch subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)`

审计记录中有很多信息,但我重点注意到它记录了 root 修改了 /etc/shadow 文件,并且该进程的审计 UID(auid)的所有者是 dwalsh。

内核修改了这个文件了么?

跟踪登录 UID

登录 UID(loginuid),存储在 /proc/self/loginuid 中,它是系统上每个进程的 proc 结构的一部分。该字段只能设置一次;设置后,内核将不允许任何进程重置它。

当我登录系统时,登录程序会为我的登录过程设置 loginuid 字段。

我(dwalsh)的 UID 是 3267。

$ cat /proc/self/loginuid
3267

现在,即使我变成了 root,我的登录 UID 仍将保持不变。

$ sudo cat /proc/self/loginuid
3267

请注意,从初始登录过程 fork 并 exec 的每个进程都会自动继承 loginuid。这就是内核知道登录的人是 dwalsh 的方式。

容器

现在让我们来看看容器。

sudo podman run fedora cat /proc/self/loginuid
3267

甚至容器进程也保留了我的 loginuid。 现在让我们用 Docker 试试。

sudo docker run fedora cat /proc/self/loginuid
4294967295
为什么Podman运行容器更安全?为什么Podman运行容器更安全?

Podman 对于容器使用传统的 fork/exec 模型,因此容器进程是 Podman 进程的后代。Docker 使用客户端/服务器模型。我执行的 docker 命令是 Docker 客户端工具,它通过客户端/服务器操作与 Docker 守护进程通信。然后 Docker 守护程序创建容器并处理 stdin/stdout 与 Docker 客户端工具的通信。

进程的默认 loginuid(在设置 loginuid 之前)是 4294967295(LCTT 译注:232 – 1)。由于容器是 Docker 守护程序的后代,而 Docker 守护程序是 init 系统的子代,所以,我们看到 systemd、Docker 守护程序和容器进程全部具有相同的 loginuid:4294967295,审计系统视其为未设置审计 UID。

cat /proc/1/loginuid
4294967295
为什么不一样?

让我们来看看如果 Docker 启动的容器进程修改/etc/shadow 文件会发生什么。

$ sudo docker run --privileged -v /:/host fedora touch /host/etc/shadow
$ sudo ausearch -f /etc/shadow -i type=PROCTITLE msg=audit(10/10/2018 10:27:20.055:4569) : proctitle=/usr/bin/coreutils --coreutils-prog-shebang=touch /usr/bin/touch /host/etc/shadow type=SYSCALL msg=audit(10/10/2018 10:27:20.055:4569) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7ffdb6973f50 a2=O_WRONLY|O_CREAT|O_NOCTTY| O_NONBLOCK a3=0x1b6 items=2 ppid=11863 pid=11882 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=touch exe=/usr/bin/coreutils subj=system_u:system_r:spc_t:s0 key=(null)

在 Docker 情形中,auid 是未设置的(4294967295);这意味着安全人员可能知道有进程修改了 /etc/shadow 文件但身份丢失了。

如果该攻击者随后删除了 Docker 容器,那么在系统上谁修改 /etc/shadow 文件将没有任何跟踪信息。

怎么会被滥用?

现在让我们看看相同的场景在 Podman 下的情况。

$ sudo podman run --privileged -v /:/host fedora touch /host/etc/shadow
$ sudo ausearch -f /etc/shadow -i type=PROCTITLE msg=audit(10/10/2018 10:23:41.659:4530) : proctitle=/usr/bin/coreutils --coreutils-prog-shebang=touch /usr/bin/touch /host/etc/shadow type=SYSCALL msg=audit(10/10/2018 10:23:41.659:4530) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7fffdffd0f34 a2=O_WRONLY|O_CREAT|O_NOCTTY| O_NONBLOCK a3=0x1b6 items=2 ppid=11671 pid=11683 auid=dwalsh uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=3 comm=touch exe=/usr/bin/coreutils subj=unconfined_u:system_r:spc_t:s0 key=(null)

由于它使用传统的 fork/exec 方式,因此 Podman 正确记录了所有内容。

这只是观察 /etc/shadow 文件的一个简单示例,但审计系统对于观察系统上的进程非常有用。使用 fork/exec 容器运行时(而不是客户端/服务器容器运行时)来启动容器允许你通过审计日志记录保持更好的安全性。

最后的想法

在启动容器时,与客户端/服务器模型相比,fork/exec 模型还有许多其他不错的功能。例如,systemd 功能包括:

SD_NOTIFY:如果将 Podman 命令放入 systemd 单元文件中,容器进程可以通过 Podman 返回通知,表明服务已准备好接收任务。这是在客户端/服务器模式下无法完成的事情。 套接字激活:你可以将连接的套接字从 systemd 传递到 Podman,并传递到容器进程以便使用它们。这在客户端/服务器模型中是不可能的。

在我看来,其最好的功能是作为非 root 用户运行 Podman 和容器。这意味着你永远不会在宿主机上授予用户 root 权限,而在客户端/服务器模型中(如 Docker 使用的),你必须打开以 root 身份运行的特权守护程序的套接字来启动容器。在那里,你将受到守护程序中实现的安全机制与宿主机操作系统中实现的安全机制的支配 —— 这是一个危险的主张。

本文来源:www.lxlinux.net/7842.html,若引用不当,请联系修改。

相关文章 8

1

好的建设网站有哪些?建设网站需要多少钱?(好的建设网站有那些) 2分钟前

??在互联网时代,所谓的竞争度都特别激烈,公司或企业要想有一个好的发展,往往会通过做网站来进行营销,很多朋友会问到,好的建设网...

2

Linux下搭建Python3环境 4分钟前

Python是一门面向对象编程语言,是众多编程语言中的一种、语法简洁、优雅、编写的程序容易阅读、易于学习,Python相对于C++,Java,JavaScript等...

3

Linux系统如何安装pycharm 7分钟前

pycharm是py程序猿常用的一款继承开发工具,pycharm可以大幅提升开发效率,可以选择安装一些集成开发环境,这样编辑代码、运行程序、调试...

4

linux——拖拽上传文件 12分钟前

lrzsz是一款在linux里可代替ftp上传和下载的程序。在linux中支持直接拖拽上传的插件;同时也支持rz和sz进行命令上传和下载。 服务器上安装插...

5

搬瓦工:VPS全场87折,年付74折,洛杉矶GIA/香港GIA/日本软银线路,1-10Gbps带宽,线路稳定(搬瓦 14分钟前

搬瓦工怎么样? 搬瓦工这两年虽然把产品的价格提升了,全是商家的机器一直是稳如狗的,目前有香港cn2 gia、洛杉矶cn2 gia、洛杉矶CN2 GT、...

6

简单讲解一下LACP与PAGP异同 16分钟前

在跨交换机或路由器等网络设备配置Etherchannel时,最广泛使用的两种协商协议是LACP(链路聚合控制协议)和PAGP(端口聚合协议)。在聚合链接并...

7

10g.biz:7月末超值促销,香港/洛杉矶CN2 CU2专用服务器全线6.5折抢购 19分钟前

10g.biz 7月末超值促销上线! 香港/洛杉矶CN2 CU2 专用服务器全线6.5折抢购,特价香港/洛杉矶/硅谷10G带宽专用服务器续费同价。全新上线价格优...

8

便宜云服务器靠谱吗?便宜的云服务器到底值不值得使用?(超便宜的云服务器) 22分钟前

便宜云服务器靠谱吗? 随着网络攻击事件的不断发生,用户对于服务器的要求不再局限于性能和价格等,还有安全性。 云服务器哪家好?...