2022年3月

黑掉你的系统,了解为什么配置 SELinux 作为你的第一道容器防线是很重要的。

 title=

当有些事情在你的 Linux 环境中不能正常工作时,最简单的方法就是禁用 安全增强型 Linux Security-Enhanced Linux SELinux)。而当它突然可以工作了,你就会忘记了禁用这件事 —— 这是一个常见的陷阱,意味着你已经失去了一个非常强大的安全工具。

随着容器、微服务和分布式架构的兴起,威胁也在上升。这是由于一个老的、众所周知的问题:速度。容器的优势在于它们能让你快速行动,做更多的事情,并迅速改变。这意味着容器的采用已经飞速发展,但它所提供的速度也意味着你会遇到更多的问题和漏洞。当你越来越快地做更多的事情时,这自然会发生。

如何减轻威胁

正如孙子所说,“不战而屈人之兵”。当涉及到容器的基本防御时,这句话真的很有共鸣。为了避免问题(战斗),确保你的容器主机是安全的,你可以使用 SELinux 作为你的第一道防线。

SELinux 是一个开源项目,于 2000 年发布,2003 年集成到 Linux 内核中。根据 红帽公司的解释,“SELinux 是 Linux 系统 的一个安全架构,允许管理员对谁可以访问系统有更多的控制。它最初是由美国国家安全局(NSA)开发的,是使用 Linux 安全模块(LSM)对 Linux 内核 的一系列补丁。”

开始吧

当你想到容器时,首先想到的可能是 Docker。Docker 在 2013 年出现后掀起了一场容器采用革命。它是容器爆炸性流行的主要原因之一,但如上所述,大量采用增加了用户对安全风险的脆弱性。

在你用 SELinux 保护你的 Docker 容器之前,你需要设置一些东西。

前置条件

  • 安装并配置了 CentOS 8/RHEL 8。
  • 安装并配置好 Docker CE
  • 创建两个账户:root 和 非 root 用户(下面的例子中是 mcalizo)。

如果你需要在你的 RHEL 8/CentOS 8 服务器上设置 Docker,你可以按照这些 说明。如果你运行的是 RHEL 8,你需要在开始之前删除预装的 Podman 和 runc 包。

首先,确保 SELinux 被启用:

[mcalizo@Rhel82 ~]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[mcalizo@Rhel82 ~]$

然后,验证你的操作系统版本和 Docker 正在运行。以 root 身份登录并运行:

[root@rhel82 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[root@rhel82 ~]#

[root@rhel82 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-10-28 19:10:14 EDT; 15s ago
     Docs: https://docs.docker.com
 Main PID: 30768 (dockerd)
    Tasks: 8
   Memory: 39.0M
   CGroup: /system.slice/docker.service
           └─30768 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.889602941-04:00" level=error msg=">
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903413613-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903427451-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903538271-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.132060506-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.308943088-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.319438549-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.319570298-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.333419209-04:00" level=info msg="A>
Oct 28 19:10:14 rhel82.home.labs.com systemd[1]: Started Docker Application Container Engine

检查你的 Docker 版本:

[root@rhel82 ~]# docker --version
Docker version 19.03.13, build 4484c46d9d

黑掉主机

了解一个问题的最好方法之一就是去体验它。因此,我将告诉你,如果你的安全设置不当,向 Docker 主机注入恶意代码是多么容易。

为了能够在 Docker 主机上做坏事,“恶意”的非 root 用户(本教程中为 mcalizo)必须是可以实例化 Docker 容器的组的成员。

首先,确认 mcalizo 用户属于哪个组:

[root@Rhel82 ~]# groups mcalizo
mcalizo : mcalizo

输出显示,mcalizo 只属于它自己的组。这意味着 mcalizo 不能实例化 Docker 容器,如果它试图这样做,将会得到这个错误:

[mcalizo@Rhel82 ~]$ docker run -it --rm centos:latest /bin/sh
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

要允许 mcalizo 实例化容器,将用户加入 docker 组:

[root@Rhel82 ~]# usermod -G docker -a mcalizo
[root@Rhel82 ~]# groups mcalizo
mcalizo : mcalizo docker

接下来,部署一个 fedora:latest 的容器,并登录到实例化的容器中去探索它:

[mcalizo@Rhel82 ~]$ docker run -it --rm fedora:latest /bin/sh
Unable to find image 'fedora:latest' locally
latest: Pulling from library/fedora
ee7e89337106: Pull complete
Digest: sha256:b9ec86d36fca7b1d3de39cd7c258e8d90c377d312c21a7748071ce49069b8db4
Status: Downloaded newer image for fedora:latest
sh-5.0# cat /etc/redhat-release
Fedora release 33 (Thirty Three)

当你登录到新创建的容器时,你可以看到你是以 root 身份自动登录的:

sh-5.0# whoami
root
sh-5.0#

作为 root 用户,你可以在这个容器中做任何事情,这意味着你可以利用容器主机,做很多破坏。因为你可以实例化一个容器,即使你不属于主机的 sudoers 账户,你也可以对主机做一些事情。

退出你刚刚创建的容器,并创建一个新的容器来演示这个漏洞:

[mcalizo@Rhel82 ~]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@131043f2e306 /]#

-v 选项 将 Docker 主机的 / 目录挂载到 /exploit 目录下的容器:

[root@131043f2e306 /]#ls exploit/
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

因为它已被挂载,你可以在 Docker 主机上做任何事情。例如,你可以删除文件、编辑特定的配置来破害系统,甚至安装木马程序或其他恶意软件来窃取重要信息。

为什么会发生这种情况?

你可能想知道,既然 SELinux 处于强制模式,为什么会出现这种情况?深入挖掘 SELinux,看看哪里出了问题。

验证 SELinux 是否有一个 Docker 上下文

[mcalizo@Rhel82 ~]$ ps -eZ | grep docker
system_u:system_r:container_runtime_t:s0 30768 ? 00:00:04 dockerd
[mcalizo@Rhel82 ~]$

正如预期的那样,它确实有。这意味着 SELinux 管理着 Docker 守护进程。检查 Docker 守护进程,看看 SELinux 是否默认启用:

[mcalizo@Rhel82 ~]$ docker info | grep Security -A3
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-193.el8.x86_64

Docker 守护进程中的 SELinux 在默认情况下是 不启用 的。 这就是问题所在!要解决这个问题,按 文档 说明,通过更新或创建文件 /etc/docker/daemon.json 来启用 SELinux 来控制和管理 Docker(你必须有 root 权限才能这样做):

[root@Rhel82 ~]# cat /etc/docker/daemon.json
{
  "selinux-enabled": true
}
[root@Rhel82 ~]#
[root@Rhel82 ~]# systemctl restart docker

在创建或更新该文件并重启 Docker 后,你应该看到 Docker 守护进程中启用了 SELinux 支持:

[root@Rhel82 ~]# systemctl restart docker
[mcalizo@Rhel82 root]$ docker info | grep Security -A3
 Security Options:
  seccomp
   Profile: default
  selinux
[mcalizo@Rhel82 root]$

虽然仍然可以在你的 Docker 容器上挂载 Docker 主机中的特定文件系统,但不再允许更新或访问该文件:

[mcalizo@Rhel82 root]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@ecb5836da1f6 /]# touch /exploit/etc/shadow.sh
touch: cannot touch '/exploit/etc/shadow.sh': Permission denied
[root@ecb5836da1f6 /]#

了解更多

你在容器世界中的第一道防线取决于你对容器主机的操作系统的设置有多强。有许多方法可以实现 Linux 的安全性,包括市场上可供选择的方案,以增强你的安全态势。

SELinux 是一个额外的安全层,默认情况下内置于 Linux 发行版 中。为了借助它保护你的系统不被破坏,请确保 SELinux 保持开启状态。

如果你想了解更多,请参阅:


via: https://opensource.com/article/20/11/selinux-containers

作者:Mike Calizo 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

比特币挖矿正变得越来越不环保

过去比特币矿工对可再生能源的依赖度,经常在 40~70% 之间大幅波动。自中国清退高能耗加密货币挖矿行业以来,迁移到世界各地的比特币开采工作,正变得较以往任何时候更加不环保。专家指出00086-1),这可能是矿工使用了更多燃煤和天然气电力,而不是中国丰富的水电资源的结果。在比特币挖矿中,可再生能源发电的占比出现了大幅下降,从 2020 年的平均 42%、滑落到了 2021 年 8 月的 25% 。

老王点评:大量接收了比特币矿场的美国,不知道对此怎么看。

备份不再能有效阻止勒索软件攻击

调查发现,83% 的成功勒索攻击使用了替代勒索方法:38% 使用窃取的数据勒索客户,35% 向暗网泄露数据,只有 17% 的攻击只要求赎金以换取解密密钥。备份能最小化数据被加密带来的影响,但无法阻止勒索软件组织使用窃取的数据进行二次甚至三次勒索。调查发现 18% 的受害者在支付赎金之后数据仍然泄露,这一比例甚至高于 16% 拒绝支付赎金的受害者。

老王点评:对抗勒索攻击已经成为各个稍有规模的公司必须认真面对的事情了。

Mozilla 计划建立新的社区 Connect

Mozilla 在去年 6 月推出了 Mozilla Ideas,以让用户可以贡献想法、和开发者沟通。但该项目已经失败,一方面是 Ideas 在一个需要创建账户的私人服务上,而用户不喜欢;另外一方面是没有用户浪费他们的时间来贡献想法,也没有开发者投入他们的时间来浏览该网站。Mozilla Ideas 将在Mozilla Connect 品牌下重新出现,支持 Firefox 账号,会有 Mozilla 员工的更多参与。但目前还不知道 Mozilla Connect 何时开放。

老王点评:问题是,就算有这样的沟通社区,Mozilla 也得听才行。

回音

  • 英伟达 反击黑客失败 后,黑客开始开始出售窃取的数据,并销售一种可以绕过 RTX 30 系列中的 挖矿限制 的代码。

通过查看创建一个吊舱或一个部署时的 10 个步骤,可以更好地了解 Kubernetes。

 title=

当你在 Kubernetes 上使用容器时,你经常把应用程序组合在一个 吊舱 pod 中。当你把一个容器或一个吊舱发布到生产环境中时,它被称为一个 部署 deployment 。如果你每天甚至每周都在使用 Kubernetes,你可能已经这样做过几百次了,但你有没有想过,当你创建一个吊舱或一个部署时到底会发生什么?

我发现在高层次上了解事件链条是有帮助的。当然,你不一定要理解它。即使你不知道为什么,它仍然在工作。我不打算列出每一件发生的小事,但我的目标是涵盖所有重要的事情。

这里有一张 Kubernetes 不同组件如何互动的视觉地图。

 title=

你可能注意到,在上图中,我没有包括 etcd。API 服务器是唯一能够直接与 etcd 对话的组件,而且只有它能够对 etcd 进行修改。因此,你可以认为 etcd 在这张图中存在于(隐藏的)API 服务器后面。

另外,我在这里只讲到了两个主要的控制器( 部署控制器 Deployment controller 复制集控制器 ReplicaSet controller )。其他的控制器的工作方式类似。

下面的步骤描述了当你执行 kubectl create 命令时会发生什么。

步骤 1

当你使用 kubectl create 命令时,一个 HTTP POST 请求被发送到 API 服务器,其中包含部署清单。API 服务器将其存储在 etcd 数据存储中,并返回一个响应给 kubectl

步骤 2 和 3

API 服务器有一个观察机制,所有观察它的客户都会得到通知。客户端通过打开与 API 服务器的 HTTP 连接来观察变化,API 服务器会流式地发出通知。其中一个客户端是部署控制器。部署控制器检测到一个 部署 Deployment 对象,它用部署的当前规格创建一个 复制集 ReplicaSet 。该资源被送回 API 服务器,并存储在 etcd 数据存储中。

步骤 4 和 5

与上一步类似,所有观察者都会收到关于 API 服务器中的变化的通知。这一次,复制集控制器会接收这一变化。该控制器了解所需的副本数量和对象规格中定义的吊舱选择器,创建吊舱资源,并将这些信息送回 API 服务器,存储在 etcd 数据存储中。

步骤 6 和 7

Kubernetes 现在拥有运行吊舱所需的所有信息,但吊舱应该在哪个节点上运行? 调度器 Scheduler 观察那些还没有分配到节点的吊舱,并开始对所有节点进行过滤和排序,以选择最佳节点来运行吊舱。一旦节点被选中,该信息将被添加到吊舱规格中。而且它被送回 API 服务器并存储在 etcd 数据存储中。

步骤 8、9 和 10

到目前为止的所有步骤都发生在 控制平面 control plane 本身。 工作节点 worker node 还没有做任何工作。不过,吊舱的创建并不是由控制平面处理的。相反,在所有节点上运行的 kubelet 服务观察 API 服务器中的吊舱规格,以确定它是否需要创建任何吊舱。在调度器选择的节点上运行的 kubelet 服务获得吊舱规格,并指示工作节点上的容器运行时创建容器。这时就会下载一个容器镜像(如果它还不存在的话),容器就会实际开始运行。

理解 Kubernetes 的部署

对这个一般流程的理解可以帮助你理解 Kubernetes 中的许多事件。考虑一下 Kubernetes 中的 守护进程集 DaemonSet 状态集 StatefulSet 。除了使用不同的控制器外,吊舱的创建过程是一样的。

课后作业:如果部署被修改为有三个应用程序的副本,导致创建吊舱的事件链条会是什么样子?你可以参考图表或列出的步骤,但你肯定有你需要弄清楚的知识。知识就是力量,你现在有了了解 Kubernetes 的一个重要组成部分。


via: https://opensource.com/article/22/3/visual-map-kubernetes-deployment

作者:Nived Velayudhan 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Fedora 36 很快就要发布了,预期会有哪些功能呢?还有,它准备什么时候发布?

Fedora 36 是 今年最值得期待的发布 之一。

虽然我们期待每一个重要的发布,但去年,Fedora 35 以 GNOME 41 和一个新的 KDE 流派(Kinoite)让人期待它带来一些令人兴奋的变化。

别着急;如果你等不及要看到 Fedora 36,我将重点指出有关该版本的基本细节。

Fedora 36 发布日期

按照官方的时间表,Fedora 36 测试版的早期发布日期是 2022 年 3 月 15 日。而且,Fedora 36 测试版的延迟发布日期(万一延迟)是 2022 年 3 月 22 日

一旦公开测试完成,最终的发布日期可望在 2022 年 4 月 19 日。如果出现延迟,发布日期将被推至 2022 年 4 月 26 日

你还应该注意,Fedora Linux 34 将在 2022 年 5 月 17 日 走到其生命的终点。

你现在可以尝试用每夜构建版来下载 Fedora 36(链接在本文底部),但是距离测试版发布还有几周时间,你应该等等。

Fedora 36 功能

像往常一样,Fedora 36 拥有最新的 GNOME 以及其他的补充和改进。

主要的亮点包括:

1、GNOME 42

GNOME 42 是一次令人兴奋的升级,有各种视觉和功能的变化。

它还包括性能和视觉上的调整及其他改进。如果你没了解过 GNOME 41 增加的功能,你也应该看看。

当然,你可以预期在 Fedora 36 中找到所有这些变化。在这里,我将重点指出那些 Fedora 36 中的细节(如果你没有用上 GNOME 42)。

2、全系统的深色模式

Fedora 36 享有从 GNOME 42 引入的全系统深色模式。

虽然在其他 Linux 发行版上有深色模式的实现,但 GNOME 42 帮助 Fedora 36 成为桌面用户的一个有吸引力的选择。

深色模式完美地融合在一起,给人一种干净的 GNOME 体验。

3、新壁纸

如果没有一张新的壁纸,其他的改进听起来都很乏味。

所以,Fedora 设计团队在 Fedora 36 中带来了一张制作精美的壁纸,这是一张风景插图,看起来很不错。

默认的壁纸有日间/夜间的变体。正如你所注意到的上面的白天的壁纸,下面是晚上的艺术作品。

两者看起来都很奇妙,对眼睛也很舒畅。

4、Linux 内核 5.17

众所周知,Fedora 36 提供最新的 Linux 内核版本。截至目前,它正在运行即将发布的 Linux 内核 5.17 的候选版本。

随着 Fedora 36 的最终发布,你应该看到 Linux 内核 5.17 的稳定版本。

5、深色/浅色壁纸

除了 Fedora 36 的新默认壁纸之外,它还具有与 GNOME 42 一起引入的深色/浅色模式壁纸集。

截至目前,在测试 Fedora 36 工作站(预发布版本)时,我只能找到其中一张壁纸,而不是 GNOME 42 中的整个系列。

所以,你也许可以期待在 Fedora 36 测试版中增加更多的内容。

你可以从外观上选择壁纸及其可用的深色/浅色变体。

6、屏幕截图用户界面和本地屏幕录制

GNOME 42 引入的新的屏幕截图用户界面是一个奇妙的补充。另外,只需切换一下,你就可以开始录制你的屏幕了!

你可以看到 Fedora 36 的这个功能,工作得非常好。

7、桌面环境更新

由于显而易见的原因,你应该在 Fedora 36 看到提供的最新的桌面环境。

最基本的应该是 GNOME 42、KDE Plasma 5.24 和 Xfce 4.16。

除此之外,LXQt 也已经更新到 1.0.0。

8、重要的技术变化

除了视觉上的变化和 Linux 内核的升级,Fedora 36 还有各种技术改进。

其中一些值得一提的包括:

  • 将系统的 openJDK 包从 Java 11 更新为 Java 17。
  • 引入了即将推出的 Golang 1.18 版本。
  • 将各种语言的字体切换为 Noto 字体作为默认字体,以确保文本渲染的一致性。
  • 今后自动升级时排除推荐软件包的行为(如果你没有安装它们)。
  • GNU 工具链更新至 gcc 12 和 glibc 2.35。
  • 修复某些情况下的升级性问题。
  • 默认的 Wayland 会话与 NVIDIA 专有驱动程序。
  • 更新 PHP 栈到最新的 8.1.x。
  • RPM 数据库将被重新定位到 /usr 目录,目前它在 /var

关于更多的技术细节,你可以参考 官方变更集。如果你想下载预发布版本,你可以从下面的链接抓取 ISO。

总结

Fedora 36 将会是一个令人激动的版本。

当它发布时,我很期待在 Fedora 36 工作站上尝试 Wayland 会话与 NVIDIA 专有驱动程序。

你对这个版本有什么期待?请在下面的评论中告诉我。


via: https://news.itsfoss.com/fedora-36-release-date-features/

作者:Ankush Das 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

大部分 Rust 程序员认为 Rust 很有挑战性,但值得

在对 Rust 社区的 年度调查中发现,使用 Rust 的人中,81% 的人至少每周都在使用这种语言。75% 的 Rust 用户表示用于生产环境。在工作中使用 Rust 的人,83% 的人认为它具有挑战性。只有 13% 的受访者认为该语言拖累了他们的团队,而 82% 的人认为 Rust 有助于他们的团队实现他们的目标。只有 1% 的受访者认为挑战不值得,而 79% 的受访者说肯定值得。90% 的人表示将有可能在未来再次使用 Rust。96% 的人使用它的人是因为它可以“构建相对正确和没有错误的软件”,其次是 92% 的人因为性能选择了它。

老王点评:Rust 虽然很难,但是明显已经准备好在生产环境取代 C 语言了。

FSF 公布五篇探讨 GitHub Copilot 的论文

FSF 称微软的 GitHub Copilot 为“服务即软件替代物(SaaSS)”,他们认为它“立即对自由软件运动和我们保障用户和开发者自由的能力提出了严重的问题”,因而向社区征文讨论这一新生事物。现在他们 公布了其中五篇论文,虽然 FSF 不一定同意或反对这些论文的观点,但认为它们推动了对这一问题的讨论。

顺便说一句,Copilot 的意思不是“复制许多”,而是指(飞机上的)“副驾驶”、“自动驾驶仪”,虽然确实是由 AI 从代码库中“复制”出许多代码的。

老王点评:这种写出的代码版权和知识产权该如何界定,还需要讨论,但是我认为这种技术是一种有益的进步。

中国手机品牌几乎统治欧洲最大的通信展

下周,世界最大的手机贸易展,世界移动通信大会(WMC)将在巴塞罗那举办。从目前的情况来看,展会上所有最大的硬件发布似乎都可能 来自中国,如 OPPO、荣耀、TCL、小米的子品牌 Poco 和华为,而不是前些年来自欧洲、美国,甚至像韩国这样的亚洲国家的品牌。截至去年,IDC 报告称,全球最受欢迎的五大智能手机品牌中的三个(小米、Oppo 和 vivo)总部都在中国,虽然第一和第二的位置被三星和苹果占据。

老王点评:虽然苹果和谷歌不太重视这个展会,但是也代表了中国手机制造行业的兴盛。

回音

  • 之前我们 报道过 Linux 讨论废弃 ReiserFS 文件系统,现在已经标记该文件系统为废弃,并将在 2025 年删除它。另外,它的作者因杀妻入狱 15 年后,将在 2023 年获释