2021年5月

cron 是一个调度守护进程,它以指定的时间间隔执行任务,这些任务称为 corn 作业,主要用于自动执行系统维护或管理任务。例如,你可以设置一个 cron 作业来自动执行重复的任务,比如备份数据库或数据,使用最新的安全补丁更新系统,检查磁盘空间使用情况,发送电子邮件等等。 cron 作业可以按分钟、小时、日、月、星期或它们的任意组合运行。

cron 的一些优点

以下是使用 cron 作业的一些优点:

  • 你可以更好地控制作业的运行时间。例如,你可以精确到分钟、小时、天等。
  • 它消除了为循环任务逻辑而去写代码的需要,当你不再需要执行任务时,可以直接关闭它。
  • 作业在不执行时不会占用内存,因此你可以节省内存分配。
  • 如果一个作业执行失败并由于某种原因退出,它将在适当的时间再次运行。

安装 cron 守护进程

幸运的是,Fedora Linux 预先配置了运行重要的系统任务来保持系统更新,有几个实用程序可以运行任务例如 cron、anacronatbatch 。本文只关注 cron 实用程序的安装。cron 和 cronie 包一起安装,cronie 包也提供 cron 服务。

要确定软件包是否已经存在,使用 rpm 命令:

$ rpm -q cronie
 Cronie-1.5.2-4.el8.x86_64

如果安装了 cronie ,它将返回 cronie 包的全名。如果你的系统中没有安装,则会显示未安装。

使用以下命令安装:

$ dnf install cronie

运行 cron 守护进程

cron 作业由 crond 服务来执行,它会读取配置文件中的信息。在将作业添加到配置文件之前,必须启动 crond 服务,或者安装它。什么是 crond 呢?crond 是 cron 守护程序的简称。要确定 crond 服务是否正在运行,输入以下命令:

$ systemctl status crond.service
● crond.service - Command Scheduler
      Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
      Active: active (running) since Sat 2021-03-20 14:12:35 PDT; 1 day 21h ago
    Main PID: 1110 (crond)

如果你没有看到类似的内容 Active: active (running) since…,你需要启动 crond 守护进程。要在当前会话中运行 crond 服务,输入以下命令:

$ systemctl run crond.service

将其配置为开机自启动,输入以下命令:

$ systemctl enable crond.service

如果出于某种原因,你希望停止 crond 服务,按以下方式使用 stop 命令:

$ systemctl stop crond.service

要重新启动它,只需使用 restart 命令:

$ systemctl restart crond.service

定义一个 cron 作业

cron 配置

以下是一个 cron 作业的配置细节示例。它定义了一个简单的 cron 作业,将 git master 分支的最新更改拉取到克隆的仓库中:

*/59 * * * * username cd /home/username/project/design && git pull origin master

主要有两部分:

  • 第一部分是 */59 * * * *。这表明计时器设置为第 59 分钟执行一次。(LCTT 译注:原文此处有误。)
  • 该行的其余部分是命令,因为它将从命令行运行。 在此示例中,命令本身包含三个部分:

    • 作业将以用户 username 的身份运行
    • 它将切换到目录 /home/username/project/design
    • 运行 git 命令拉取 master 分支中的最新更改

时间语法

如上所述,时间信息是 cron 作业字符串的第一部分,如上所属。它决定了 cron 作业运行的频率和时间。它按以下顺序包括 5 个部分:

  • 分钟
  • 小时
  • 一个月中的某天
  • 月份
  • 一周中的某天

下面是一种更图形化的方式来解释语法:

  .--------------- 分钟 (0 - 59)
 |  .------------- 小时 (0 - 23)
 |  |  .---------- 一月中的某天 (1 - 31)
 |  |  |  .------- 月份 (1 - 12) 或 jan、feb、mar、apr …
 |  |  |  |  .---- 一周中的某天 (0-6) (周日=0 或 7)
 |  |  |  |  |            或 sun、mon、tue、wed、thr、fri、sat
 |  |  |  |  |               
 *  *  *  *  *  user-name  command-to-be-executed 

星号的使用

星号(*)可以用来替代数字,表示该位置的所有可能值。例如,分钟位置上的星号会使它每分钟运行一次。以下示例可能有助于更好地理解语法。

这个 cron 作业将每分钟运行一次:

* * * * [command]

斜杠表示分钟的间隔数。下面的示例将每小时运行 12 次,即每 5 分钟运行一次:

*/5 * * * * [command]

下一个示例将每月的第二天午夜(例如 1 月 2 日凌晨 12:00,2 月 2 日凌晨 12:00 等等):

0 0 2 * * [command]

(LCTT 译注:关于 cron 时间格式,还有更多格式符号,此处没有展开)

使用 crontab 创建一个 cron 作业

cron 作业会在后台运行,它会不断检查 /etc/crontab 文件和 /etc/cron.*/ 以及 /var/spool/cron/ 目录。每个用户在 /var/spool/cron/ 中都有一个唯一的 crontab 文件。

不应该直接编辑这些 cron 文件。crontab 命令是用于创建、编辑、安装、卸载和列出 cron 作业的方法。

更酷的是,在创建新文件或编辑现有文件后,你无需重新启动 cron。

$ crontab -e

这将打开你现有的 crontab 文件,或者创建一个。调用 crontab -e 时,默认情况下会使用 vi 编辑器。注意:要使用 Nano 编辑 crontab 文件,可以设置 EDITOR=nano 环境变量。

使用 -l 选项列出所有 cron 作业。如果需要,使用 -u 选项指定一个用户。

$ crontab -l
$ crontab -u username -l

使用以下命令删除所有 cron 作业:

$ crontab -r

要删除特定用户的作业,你必须以 root 用户身份运行以下命令:

$ crontab -r -u username

感谢你的阅读。cron 作业看起来可能只是系统管理员的工具,但它实际上与许多 Web 应用程序和用户任务有关。

参考

Fedora Linux 文档的 自动化任务


via: https://fedoramagazine.org/scheduling-tasks-with-cron/

作者:Darshna Das 选题:lujun9972 译者:MjSeven 校对:wxy

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

使用容器工作是很多用户和开发者的日常任务。容器开发者经常需要频繁地(重新)构建容器镜像。如果你开发容器,你有想过减小镜像的大小吗?较小的镜像有一些好处。在下载的时候所需要的带宽更少,而且在云环境中运行的时候也可以节省开销。而且在 Fedora CoreOSIoT 以及Silverblue 上使用较小的容器镜像可以提升整体系统性能,因为这些操作系统严重依赖于容器工作流。这篇文章将会提供一些减小容器镜像大小的技巧。

工具

以下例子所用到的主机操作系统是 Fedora Linux 33。例子使用 Podman 3.1.0 和Buildah 1.2.0。Podman 和 Buildah 已经预装在大多数 Fedora Linux 变种中。如果你没有安装 Podman 和 Buildah,可以用下边的命令安装:

$ sudo dnf install -y podman buildah

任务

从一个基础的例子开始。构建一个满足以下需求的 web 容器:

  • 容器必须基于 Fedora Linux
  • 使用 Apache httpd web 服务器
  • 包含一个定制的网站
  • 容器应该比较小

下边的步骤也适用于比较复杂的镜像。

设置

首先,创建一个工程目录。这个目录将会包含你的网站和容器文件:

$ mkdir smallerContainer
$ cd smallerContainer
$ mkdir files
$ touch files/index.html

制作一个简单的登录页面。对于这个演示,你可以将下面的 HTML 复制到 index.html 文件中。

<!doctype html>

<html lang="de">
<head>
  <title>Container Page</title>
</head>

<body>
  <header>
    <h1>Container Page</h1>
  </header>
  <main>
    <h2>Fedora</h2>
    <ul>
      <li><a href="https://getfedora.org">Fedora Project</a></li>
      <li><a href="https://docs.fedoraproject.org/">Fedora Documentation</a></li>
      <li><a href="https://fedoramagazine.org">Fedora Magazine</a></li>
      <li><a href="https://communityblog.fedoraproject.org/">Fedora Community Blog</a></li>
    </ul>
    <h2>Podman</h2>
    <ul>
      <li><a href="https://podman.io">Podman</a></li>
      <li><a href="https://docs.podman.io/">Podman Documentation</a></li>
      <li><a href="https://github.com/containers/podman">Podman Code</a></li>
      <li><a href="https://podman.io/blogs/">Podman Blog</a></li>
    </ul>
    <h2>Buildah</h2>
    <ul>
      <li><a href="https://buildah.io">Buildah</a></li>
      <li><a href="https://github.com/containers/buildah">Buildah Code</a></li>
      <li><a href="https://buildah.io/blogs/">Buildah Blog</a></li>
    </ul>
    <h2>Skopeo</h2>
    <ul>
      <li><a href="https://github.com/containers/skopeo">skopeo Code</a></li>
    </ul>
    <h2>CRI-O</h2>
    <ul>
      <li><a href="https://cri-o.io/">CRI-O</a></li>
      <li><a href="https://github.com/cri-o/cri-o">CRI-O Code</a></li>
      <li><a href="https://medium.com/cri-o">CRI-O Blog</a></li>
    </ul>
  </main>
</body>

</html>

此时你可以选择在浏览器中测试上面的 index.html 文件:

$ firefox files/index.html

最后,创建一个容器文件。这个文件可以命名为 Dockerfile 或者 Containerfile

$ touch Containerfile

现在你应该有了一个工程目录,并且该目录中的文件系统布局如下:

smallerContainer/
|- files/
|    |- index.html
|
|- Containerfile

构建

现在构建镜像。下边的每个阶段都会添加一层改进来帮助减小镜像的大小。你最终会得到一系列镜像,但只有一个 Containerfile

阶段 0:一个基本的容器镜像

你的新镜像将会非常简单,它只包含强制性步骤。在 Containerfile 中添加以下内容:

# 使用 Fedora 33 作为基镜像
FROM registry.fedoraproject.org/fedora:33

# 安装 httpd
RUN dnf install -y httpd

# 复制这个网站
COPY files/* /var/www/html/

# 设置端口为 80/tcp
EXPOSE 80

# 启动 httpd
CMD ["httpd", "-DFOREGROUND"]

在上边的文件中有一些注释来解释每一行内容都是在做什么。更详细的步骤:

  1. FROM registry.fedoraproject.org/fedora:33 的基础上创建一个构建容器
  2. 运行命令: dnf install -y httpd
  3. 将与 Containerfile 有关的文件拷贝到容器中
  4. 设置 EXPOSE 80 来说明哪个端口是可以自动设置的
  5. 设置一个 CMD 指令来说明如果从这个镜像创建一个容器应该运行什么

运行下边的命令从工程目录创建一个新的镜像:

$ podman image build -f Containerfile -t localhost/web-base

使用一下命令来查看你的镜像的属性。注意你的镜像的大小(467 MB)。

$ podman image ls
REPOSITORY                         TAG     IMAGE ID      CREATED        SIZE
localhost/web-base                 latest  ac8c5ed73bb5  5 minutes ago  467 MB
registry.fedoraproject.org/fedora  33      9f2a56037643  3 months ago   182 MB

以上这个例子中展示的镜像在现在占用了467 MB的空间。剩下的阶段将会显著地减小镜像的大小。但是首先要验证镜像是否能够按照预期工作。

输入以下命令来启动容器:

$ podman container run -d --name web-base -P localhost/web-base

输入以下命令可以列出你的容器:

$ podman container ls
CONTAINER ID  IMAGE               COMMAND               CREATED        STATUS            PORTS                  NAMES
d24063487f9f  localhost/web-base  httpd -DFOREGROUN...  2 seconds ago  Up 3 seconds ago  0.0.0.0:46191->80/tcp  web-base

以上展示的容器正在运行,它正在监听的端口是 46191 。从运行在主机操作系统上的 web 浏览器转到 localhost:46191 应该呈现你的 web 页面:

$ firefox localhost:46191

阶段 1:清除缓存并将残余的内容从容器中删除

为了优化容器镜像的大小,第一步应该总是执行“清理”。这将保证安装和打包所残余的内容都被删掉。这个过程到底需要什么取决于你的容器。对于以上的例子,只需要编辑 Containerfile 让它包含以下几行。

[...]
# Install httpd
RUN dnf install -y httpd && \
    dnf clean all -y
[...]

构建修改后的 Containerfile 来显著地减小镜像(这个例子中是 237 MB)。

$ podman image build -f Containerfile -t localhost/web-clean
$ podman image ls
REPOSITORY            TAG     IMAGE ID      CREATED        SIZE
localhost/web-clean   latest  f0f62aece028  6 seconds ago  237 MB

阶段 2:删除文档和不需要的依赖包

许多包在安装时会被建议拉下来,包含一些弱依赖和文档。这些在容器中通常是不需要的,可以删除。 dnf 命令有选项可以表明它不需要包含弱依赖或文档。

再次编辑 Containerfile ,并在 dnf install 行中添加删除文档和弱依赖的选项:

[...]
# Install httpd
RUN dnf install -y httpd --nodocs --setopt install_weak_deps=False && \
    dnf clean all -y
[...]

构建经过以上修改后的 Containerfile 可以得到一个更小的镜像(231 MB)。

$ podman image build -f Containerfile -t localhost/web-docs
$ podman image ls
REPOSITORY            TAG     IMAGE ID      CREATED        SIZE
localhost/web-docs    latest  8a76820cec2f  8 seconds ago  231 MB

阶段 3:使用更小的容器基镜像

前面的阶段结合起来,使得示例镜像的大小减少了一半。但是仍然还有一些途径来进一步减小镜像的大小。这个基镜像 registry.fedoraproject.org/fedora:33 是通用的。它提供了一组软件包,许多人希望这些软件包预先安装在他们的 Fedora Linux 容器中。但是,通用的 Fedora Linux 基镜像中提供的包通常必须要的更多。Fedora 项目也为那些希望只从基本包开始,然后只添加所需内容来实现较小总镜像大小的用户提供了一个 fedora-minimal 镜像。

使用 podman image search 来查找 fedora-minimal 镜像,如下所示:

$ podman image search fedora-minimal
INDEX               NAME   DESCRIPTION   STARS   OFFICIAL   AUTOMATED
fedoraproject.org   registry.fedoraproject.org/fedora-minimal         0

fedora-minimal 基镜像不包含 DNF,而是倾向于使用不需要 Python 的较小的 microDNF。当 registry.fedoraproject.org/fedora:33registry.fedoraproject.org/fedora-minimal:33 替换后,需要用 microdnf 命令来替换 dnf

# 使用 Fedora minimal 33 作为基镜像
FROM registry.fedoraproject.org/fedora-minimal:33

# 安装 httpd
RUN microdnf install -y httpd --nodocs --setopt install_weak_deps=0 && \
    microdnf clean all -y
[...]

使用 fedora-minimal 重新构建后的镜像大小如下所示 (169 MB):

$ podman image build -f Containerfile -t localhost/web-docs
$ podman image ls
REPOSITORY             TAG     IMAGE ID      CREATED        SIZE
localhost/web-minimal  latest  e1603bbb1097  7 minutes ago  169 MB

最开始的镜像大小是 467 MB。结合以上每个阶段所提到的方法,进行重新构建之后可以得到最终大小为 169 MB 的镜像。最终的 镜像大小比最开始的 镜像小了 182 MB!

从零开始构建容器

前边的内容使用一个容器文件和 Podman 来构建一个新的镜像。还有最后一个方法要展示——使用 Buildah 来从头构建一个容器。Podman 使用与 Buildah 相同的库来构建容器。但是 Buildah 被认为是一个纯构建工具。Podman 被设计来是为了代替 Docker 的。

使用 Buildah 从头构建的容器是空的——它里边什么都 没有 。所有的东西都需要安装或者从容器外复制。幸运地是,使用 Buildah 相当简单。下边是一个从头开始构建镜像的小的 Bash 脚本。除了运行这个脚本,你也可以在终端逐条地运行脚本中的命令,来更好的理解每一步都是做什么的。

#!/usr/bin/env bash
set -o errexit

# 创建一个容器
CONTAINER=$(buildah from scratch)

# 挂载容器文件系统
MOUNTPOINT=$(buildah mount $CONTAINER)

# 安装一个基本的文件系统和最小的包以及 nginx
dnf install -y --installroot $MOUNTPOINT  --releasever 33 glibc-minimal-langpack httpd --nodocs --setopt install_weak_deps=False

dnf clean all -y --installroot $MOUNTPOINT --releasever 33

# 清除
buildah unmount $CONTAINER

# 复制网站
buildah copy $CONTAINER 'files/*' '/var/www/html/'

# 设置端口为 80/tcp
buildah config --port 80 $CONTAINER

# 启动 httpd
buildah config --cmd "httpd -DFOREGROUND" $CONTAINER

# 将容器保存为一个镜像
buildah commit --squash $CONTAINER web-scratch

或者,可以通过将上面的脚本传递给 Buildah 来构建镜像。注意不需要 root 权限。

$ buildah unshare bash web-scratch.sh
$ podman image ls
REPOSITORY             TAG     IMAGE ID      CREATED        SIZE
localhost/web-scratch  latest  acca45fc9118  9 seconds ago  155 MB

最后的镜像只有 155 MB!而且 攻击面 也减少了。甚至在最后的镜像中都没有安装 DNF(或者 microDNF)。

结论

构建一个比较小的容器镜像有许多优点。减少所需要的带宽、磁盘占用以及攻击面,都会得到更好的镜像。只用很少的更改来减小镜像的大小很简单。许多更改都可以在不改变结果镜像的功能下完成。

只保存所需的二进制文件和配置文件来构建非常小的镜像也是可能的。


via: https://fedoramagazine.org/build-smaller-containers/

作者:Daniel Schier 选题:lujun9972 译者:ShuyRoy 校对:wxy

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

Telnet 缺乏加密,这使得 OpenSSL 成为连接远程系统的更安全的选择。

 title=

telnet 命令是最受欢迎的网络故障排除工具之一,从系统管理员到网络爱好者都可以使用。在网络计算的早期,telnet 被用来连接到一个远程系统。你可以用 telnet 访问一个远程系统的端口,登录并在该主机上运行命令。

由于 telnet 缺乏加密功能,它在很大程度上已经被 OpenSSL 取代了这项工作。然而,作为一种智能的 pingtelnet 的作用仍然存在(甚至在某些情况下至今仍然存在)。虽然 ping 命令是一个探测主机响应的好方法,但这是它能做的 全部。另一方面,telnet 不仅可以确认一个活动端口,而且还可以与该端口的服务进行交互。即便如此,由于大多数现代网络服务都是加密的,telnet 的作用可能要小得多,这取决于你想实现什么。

OpenSSL s\_client

对于大多数曾经需要 telnet 的任务,我现在使用 OpenSSL 的 s_client 命令。(我在一些任务中使用 curl,但那些情况下我可能无论如何也不会使用 telnet)。大多数人都知道 OpenSSL 是一个加密的库和框架,但不是所有人都意识到它也是一个命令。openssl 命令的 s_client 组件实现了一个通用的 SSL 或 TLS 客户端,帮助你使用 SSL 或 TLS 连接到远程主机。它是用来测试的,至少在内部使用与该库相同的功能。

安装 OpenSSL

OpenSSL 可能已经安装在你的 Linux 系统上了。如果没有,你可以用你的发行版的软件包管理器安装它:

$ sudo dnf install openssl

在 Debian 或类似的系统上:

$ sudo apt install openssl

安装后,验证它的响应是否符合预期:

$ openssl version
OpenSSL x.y.z FIPS

验证端口访问

最基本的 telnet 用法是一个看起来像这样的任务:

$ telnet mail.example.com 25
Trying 98.76.54.32...
Connected to example.com.
Escape character is '^]'.

在此示例中,这将与正在端口 25(可能是邮件服务器)监听的任意服务打开一个交互式会话。只要你获得访问权限,就可以与该服务进行通信。

如果端口 25 无法访问,连接就会被拒绝。

OpenSSL 也是类似的,尽管通常较少互动。要验证对一个端口的访问:

$ openssl s_client -connect example.com:80
CONNECTED(00000003)
140306897352512:error:1408F10B:SSL [...]

no peer certificate available

No client certificate CA names sent

SSL handshake has read 5 bytes and written 309 bytes
Verification: OK

New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)

但是,这仅是目标性 ping。从输出中可以看出,没有交换 SSL 证书,所以连接立即终止。为了充分利用 openssl s_client,你必须连接加密的端口。

交互式 OpenSSL

Web 浏览器和 Web 服务器进行交互,可以使指向 80 端口的流量实际上被转发到 443,这是保留给加密 HTTP 流量的端口。知道了这一点,你就可以用 openssl 命令连接到加密的端口,并与在其上运行的任何网络服务进行交互。

首先,使用 SSL 连接到一个端口。使用 -showcerts 选项会使 SSL 证书打印到你的终端上,一开始的输出要比 telnet 要冗长得多:

$ openssl s_client -connect example.com:443 -showcerts
[...]
    0080 - 52 cd bd 95 3d 8a 1e 2d-3f 84 a0 e3 7a c0 8d 87   R...=..-?...z...
    0090 - 62 d0 ae d5 95 8d 82 11-01 bc 97 97 cd 8a 30 c1   b.............0.
    00a0 - 54 78 5c ad 62 5b 77 b9-a6 35 97 67 65 f5 9b 22   Tx\\.b[w..5.ge.."
    00b0 - 18 8a 6a 94 a4 d9 7e 2f-f5 33 e8 8a b7 82 bd 94   ..j...~/.3......

    Start Time: 1619661100
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
-
read R BLOCK

你被留在一个交互式会话中。最终,这个会话将关闭,但如果你及时行动,你可以向服务器发送 HTTP 信号:

[...]
GET / HTTP/1.1
HOST: example.com

回车键两次,你会收到 example.com/index.html 的数据:

[...]
<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

Email 服务器

你也可以使用 OpenSSL 的 s_client 来测试一个加密的 Email 服务器。要做到这点,你必须把你的测试用户的用户名和密码用 Base64 编码。

这里有一个简单的方法来做到:

$ perl -MMIME::Base64 -e 'print encode_base64("username");'
$ perl -MMIME::Base64 -e 'print encode_base64("password");'

当你记录了这些值,你就可以通过 SSL 连接到邮件服务器,它通常在 587 端口:

$ openssl s_client -starttls smtp \
-connect email.example.com:587
> ehlo example.com
> auth login
##paste your user base64 string here##
##paste your password base64 string here##

> mail from: [email protected]
> rcpt to: [email protected]
> data
> Subject: Test 001
This is a test email.
.
> quit

检查你的邮件(在这个示例代码中,是 [email protected]),查看来自 [email protected] 的测试邮件。

OpenSSL 还是 Telnet?

telnet 仍然有用途,但它已经不是以前那种不可缺少的工具了。该命令在许多发行版上被归入 “遗留” 网络软件包,而且还没有 telnet-ng 之类的明显的继任者,管理员有时会对它被排除在默认安装之外感到疑惑。答案是,它不再是必不可少的,它的作用越来越小,这 很好。网络安全很重要,所以要适应与加密接口互动的工具,这样你就不必在排除故障时禁用你的保护措施。


via: https://opensource.com/article/21/5/drop-telnet-openssl

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

OpenSolaris 衍生品 Illumos 放弃对 SPARC 硬件的支持

虽然 SPARC 硬件和 Solaris/OpenSolaris 曾经携手并进,但随着 SPARC 的主要开发工作基本结束,甲骨文公司在几年前就已经解雇了大部分的 SPARC 工程师,已经十年没有销售 SPARC 硬件了,一些出于收藏而销售的二手硬件也非常昂贵。

衍生自 OpenSolaris 的开源 UNIX 系统 Illumos 项目没有足够的 SPARC 硬件可以使用,他们甚至缺乏一个永久性的官方的 SPARC 构建服务器。所以,在 Illumos 中继续 SPARC 架构已经不再可行。交叉编译和通过 QEMU 仿真都考虑过了,需要大量工作,且效果并不好。

好消息是,放弃对 SPARC 的支持,只专注于 x86\_64,可以做出一些很好的改进,使他们的工具链现代化。甚至可以考虑在内核、库和命令中使用 Rust 编程语言。

对于一个没有人关心的硬件,虽然告别过去有些不舍,不过,x86 和 ARM 不香么?

去年 Namecheap 托管了 1/4 的假冒英国政府的钓鱼网站

报告,2020 年期间,在所有已知的钓鱼网站中,Namecheap 公司窝藏了超过 1/4 的假扮成英国政府网站的钓鱼网站。Namecheap 平均花了 47 个小时来禁用政府主题的钓鱼网站,占已知该类钓鱼网站 28.8%;而去年此类骗局的第二大庇护者 GoDaddy 大约需要 37 来关闭它们,占 11.2%。但是 Namecheap 表示,在他们收到了滥用投诉中,只有 1/10 是正确的,只占其注册的域名的不到 1%。

就是因为响应速度太慢才会导致钓鱼网站猬集。

DragonFlyBSD 6.0 发布

继最近发布的 FreeBSD 13.0 和 OpenBSD 6.9 之后,DragonFlyBSD 6.0 作为这个很久以前从 FreeBSD 分叉出来的 BSD 操作系统也发布了最新版本 6.0。其中的一些亮点包括:对内核进行了优化,改进了内存分页,提升了性能;一个非 GPL 的新 EXT 2/3/4 文件系统驱动;更好的 EFI 帧缓存支持等等。详情可看变更公告

虽然 BSD 家族没有 Linux 家族那么耀眼,但是依然是非常重要的开源操作系统。

虚拟私有网络 Virtual Private Networks 应用广泛。如今有各种方案可供使用,用户可通过这些方案访问任意类型的资源,同时保持其机密性与隐私性。

最近,WireGuard 因为其简单性、速度与安全性成为最广泛使用的虚拟私有网络协议之一。WireGuard 最早应用于 Linux 内核,但目前可以用在其他平台,例如 iOS、Android 等。

WireGuard 使用 UDP 作为其传输协议,并在 Critokey Routing(CKR)的基础上建立对等节点之间的通信。每个对等节点(无论是服务器或客户端)都有一对 密钥 key (公钥与私钥),公钥与许可 IP 间建立通信连接。有关 WireGuard 更多信息请访问其 主页

本文描述了如何在两个对等节点(PeerA 与 PeerB)间设置 WireGuard。两个节点均运行 Fedora Linux 系统,使用 NetworkManager 进行持久性配置。

WireGuard 设置与网络配置

在 PeerA 与 PeerB 之间建立持久性虚拟私有网络连接只需三步:

  1. 安装所需软件包。
  2. 生成 密钥对 key pair
  3. 配置 WireGuard 接口。

安装

在两个对等节点(PeerA 与 PeerB)上安装 wireguard-tools 软件包:

$ sudo -i
# dnf -y install wireguard-tools

这个包可以从 Fedora Linux 更新库中找到。它在 /etc/wireguard/ 中创建一个配置目录。在这里你将创建密钥和接口配置文件。

生成密钥对

现在,使用 wg 工具在每个节点上生成公钥与私钥:

# cd /etc/wireguard
# wg genkey | tee privatekey | wg pubkey > publickey

在 PeerA 上配置 WireGuard 接口

WireGuard 接口命名规则为 wg0wg1 等等。完成下述步骤为 WireGuard 接口创建配置:

  • PeerA 节点上配置想要的 IP 地址与掩码。
  • 该节点监听的 UDP 端口。
  • PeerA 的私钥。
# cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.1.254/24
SaveConfig = true
ListenPort = 60001
PrivateKey = mAoO2RxlqRvCZZoHhUDiW3+zAazcZoELrYbgl+TpPEc=

[Peer]
PublicKey = IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
AllowedIPs = 172.16.1.2/32
EOF

允许 UDP 流量通过节点监听的端口:

# firewall-cmd --add-port=60001/udp --permanent --zone=public
# firewall-cmd --reload
success

最后,将接口配置文件导入 NetworkManager。这样,WireGuard 接口在重启后将持续存在。

# nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (21d939af-9e55-4df2-bacf-a13a4a488377) successfully added.

验证 wg0的状态:

# wg
interface: wg0
  public key: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
  private key: (hidden)
  listening port: 60001

peer: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
  allowed ips: 172.16.1.2/32

# nmcli -p device show wg0

===============================================================================
                             Device details (wg0)
===============================================================================
GENERAL.DEVICE:                         wg0
-------------------------------------------------------------------------------
GENERAL.TYPE:                           wireguard
-------------------------------------------------------------------------------
GENERAL.HWADDR:                         (unknown)
-------------------------------------------------------------------------------
GENERAL.MTU:                            1420
-------------------------------------------------------------------------------
GENERAL.STATE:                          100 (connected)
-------------------------------------------------------------------------------
GENERAL.CONNECTION:                     wg0
-------------------------------------------------------------------------------
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         172.16.1.254/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 172.16.1.0/24, nh = 0.0.0.0, mt =>
-------------------------------------------------------------------------------
IP6.GATEWAY:                            --
-------------------------------------------------------------------------------

上述输出显示接口 wg0 已连接。现在,它可以和虚拟私有网络 IP 地址为 172.16.1.2 的对等节点通信。

在 PeerB 上配置 WireGuard 接口

现在可以在第二个对等节点上创建 wg0 接口的配置文件了。确保你已经完成以下步骤:

  • PeerB 节点上设置 IP 地址与掩码。
  • PeerB 的私钥。
  • PeerA 的公钥。
  • PeerA 的 IP 地址或主机名、监听 WireGuard 流量的 UDP 端口。
# cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.1.2
SaveConfig = true
PrivateKey = UBiF85o7937fBK84c2qLFQwEr6eDhLSJsb5SAq1lF3c=

[Peer]
PublicKey = FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
AllowedIPs = 172.16.1.254/32
Endpoint = peera.example.com:60001
EOF

最后一步是将接口配置文件导入 NetworkManager。如上所述,这一步是重启后保持 WireGuard 接口持续存在的关键。

# nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (39bdaba7-8d91-4334-bc8f-85fa978777d8) successfully added.

验证 wg0 的状态:

# wg
interface: wg0
  public key: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
  private key: (hidden)
  listening port: 47749

peer: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
  endpoint: 192.168.124.230:60001
  allowed ips: 172.16.1.254/32

# nmcli -p device show wg0

===============================================================================
                             Device details (wg0)
===============================================================================
GENERAL.DEVICE:                         wg0
-------------------------------------------------------------------------------
GENERAL.TYPE:                           wireguard
-------------------------------------------------------------------------------
GENERAL.HWADDR:                         (unknown)
-------------------------------------------------------------------------------
GENERAL.MTU:                            1420
-------------------------------------------------------------------------------
GENERAL.STATE:                          100 (connected)
-------------------------------------------------------------------------------
GENERAL.CONNECTION:                     wg0
-------------------------------------------------------------------------------
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         172.16.1.2/32
IP4.GATEWAY:                            --
-------------------------------------------------------------------------------
IP6.GATEWAY:                            --
-------------------------------------------------------------------------------

上述输出显示接口 wg0 已连接。现在,它可以和虚拟私有网络 IP 地址为 172.16.1.254 的对等节点通信。

验证节点间通信

完成上述步骤后,两个对等节点可以通过虚拟私有网络连接相互通信,以下是 ICMP 测试结果:

[root@peerb ~]# ping 172.16.1.254 -c 4
PING 172.16.1.254 (172.16.1.254) 56(84) bytes of data.
64 bytes from 172.16.1.254: icmp_seq=1 ttl=64 time=0.566 ms
64 bytes from 172.16.1.254: icmp_seq=2 ttl=64 time=1.33 ms
64 bytes from 172.16.1.254: icmp_seq=3 ttl=64 time=1.67 ms
64 bytes from 172.16.1.254: icmp_seq=4 ttl=64 time=1.47 ms

在这种情况下,如果你在 PeerA 端口 60001 上捕获 UDP 通信,则将看到依赖 WireGuard 协议的通信过程和加密的数据:

捕获依赖 WireGuard 协议的节点间 UDP 流量

总结

虚拟私有网络很常见。在用于部署虚拟私有网络的各种协议和工具中,WireGuard 是一种简单、轻巧和安全的选择。它可以在对等节点之间基于 CryptoKey 路由建立安全的点对点连接,过程非常简单。此外,NetworkManager 支持 WireGuard 接口,允许重启后进行持久配置。


via: https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/

作者:Maurizio Garcia 选题:lujun9972 译者:DCOLIVERSUN 校对:wxy

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

美国最大的燃油管道运营商遭攻击之后,美国宣布进入紧急状态

燃油管道运营商 Colonial 每日输送 250 万桶燃油,占到了美国东海岸供应量的 45%。在遭遇勒索软件网络攻击后,Colonial 被迫关闭了超过 8850 公里的整个管道系统。多个消息源证实 Colonial 遭到的是 DarkSide 勒索软件的攻击,Colonial 并未透露是否已经支付赎金,而输油管线何时恢复运营也尚不可知。这是有报告的最具破坏性的勒索事件之一。受此影响,美国宣布进入国家紧急状态,将允许燃油通过公路运输。

这一惊人事故充分暴露出美国大基建体系网络安防的脆弱性,同时也是在挑衅美国白宫。就在上个月下旬,美国拜登政府才刚刚出台一项提振能源供应体系网络安全的“百日计划”。

Linux 5.10 LTS 维护期限将持续到 2026 年底

Linux 5.10 LTS 作为最新的长期支持版本在发布时只打算维护到 2022 年底,但是之前的内核如 Linux 5.4 LTS 被维护到 2024 年,甚至 Linux 4.19 LTS 和 4.14 LTS 也会进入 2024 年,这就让人觉得比较奇怪。

Linux 5.10 LTS 的生命周期很短是因为帮助测试与发布候选程序和承诺使用这个内核 LTS 系列的资源的开发者及组织的数量有限。但是现在有足够多的公司加紧帮助测试,Linux 5.10 LTS 确认可以被维护到 2026 年底。

Debian 11、安卓的下一个版本都会因此而获益。

勒索软件团伙已在暗网上泄露了 2 千多家公司的数据

现代化勒索软件行动始于 2013 年,攻击者的方式主要是对企业数据进行加密,然后要求支付赎金来获得解密。不过自 2020 年年初以来,勒索软件开始进行一种新的战术,称为双重勒索,即不但会加密企业数据来获取赎金,而且会威胁企业公开这些数据,迫使受害者支付赎金。暗网安全研究人员追踪了 34 个勒索软件团伙的数据泄露网站,发现已经有多达 2103 个组织的数据被泄露。

数据勒索行业已经成为勒索软件团伙的一个重要盈利点,受害者更担心他们的数据被泄露,而不是加密文件的丢失。