标签 systemd 下的文章

你可以通过以下方式确定你的 Linux 发行版中是否正在运行 systemd 或其它初始化系统。

首个进程在你启动 Linux 发行版时开始运行,它称为初始化进程 init( 初始化 initialization 的缩写)。它的进程标识符为 1(即 pid=1)。基于 Unix 的系统中的所有进程和应用程序都是这个初始化进程的后代。

根据功能和特性,存在不同类型的初始化进程。例如,systemd、Runit、OpenRC、sysVinit 等。其中,systemd 是最流行和最现代的一种,被包括 Ubuntu 和 Fedora 在内的所有现代 Linux 发行版使用和采用。

与传统的基于 Unix 的初始化系统相比,systemd 及其性能一直存在争议。但这就是另外一个话题了。

让我们看看如何确定在 Linux 发行版中运行的是 systemd 还是其它初始化系统。

systemd 还是其它初始化系统?

不幸的是,没有直接的命令可以找到它。你可以从初始化进程追溯它,它基本上是到 /sbin/init 的符号链接,即 pid=1。

使用 strings 命令打印嵌入在二进制文件 /sbin/init 中的文本并使用以下命令搜索 init

strings /sbin/init | grep init

示例 1

在下面的输出中,它是一个运行 Debian(Peppermint OS)的 sysVinit 系统。如你所见,它清楚地显示了 init 进程名称。

strings /sbin/init | grep init

显示使用 sysVinit 而不是 systemd 的示例

如果在上述同一个系统中找 systemd,那么不会有任何结果。因此,你可以得出结论,你正在运行 sysVinit 而不是 systemd。

示例 2

如果你在 systemd 系统中运行上述命令,你可以在输出的第一行轻松看到 systemd 及其版本。

strings /sbin/init | grep systemd

显示它使用 systemd 的示例

示例 3

你也可以尝试使用 pstree 命令打印进程树,它应该会显示第一个进程名称。它应该是 systemdinit,如下例所示。

pstree

pstree 显示使用 systemd

pstree 显示使用 init

这就好了。这样你就可以轻松找出你的发行版是使用 systemd 还是其他的。


via: https://www.debugpoint.com/systemd-or-init/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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

微软的 WSL 现已支持 systemd,为用户提供了更好的体验。你可阅读此文了解更多。

systemd 已可用于 WSL

WSL( Windows 的 Linux 子系统 Windows Subsystem for Linux )终于拥有了对 systemd 的支持,这是在 systemd 的创建者加入微软的几个月后实现的。

更多 Linux 开发者们加入微软,systemd 的创建者也加入这一行列

而这已通过微软和 Cannonical 的合作成为可能。

如果你好奇 systemd 是什么

systemd 是一套 Linux 系统的基本组成模块。它提供了一个系统和服务管理器,作为 PID 1 运行,并启动系统的其他部分。

来自:systemd.io

它作为一个初始化系统,启动并维持用户空间其他服务的正常运行。

让我们看看它是如何被引入 WSL 的。

systemd 增强 WSL 的体验

在 WSL 中引入 systemd,主要是为改善 Windows 机器上的 Linux 工作流程。

像 Debian、Ubuntu、Fedora 等,都是默认运行 systemd 的。因此,这项整合将使这些发行版的用户更方便地在 WSL 上做更多工作。

很多关键的 Linux 程序也是靠 systemd 实现的。例如 snap、microk8s 和 LXD 都依赖它。

即使我们有 不含 systemd 的发行版 可用,它们也并不适合所有人。因此,在 WSL 上添加对 systemd 的支持是很有意义的。

systemd 的存在也使得在 Windows 中使用更多工具来测试和运行成为可能,从而带来更好的 WSL 体验。

它是如何实现的

WSL 背后的团队必须修改其架构,它们让 WSL 的初始化进程在 Linux 发行版中以 systemd 的一个子进程启动。

正如其 官方公告 所述,这样做使得 WSL 初始化程序能够为 Windows 和 Linux 子系统之间的通讯提供必要的基础。

它们还做了额外的修改,通过防止 systemd 保持 WSL 实例的活动以确保系统的干净关机。

你亦可访问他们的 官方文档 以了解更多。

在 WSL 上使用 systemd

现有的 WSL 用户必须在他们的系统上手动启用 systemd,以防止由于 systemd 的引入而导致的启动问题。

首先,你必须确保你的系统运行的是 0.67.6 或更高版本的 WSL。

你可以通过以下命令检查你的 WSL 版本。

wsl --version

如果你正在运行旧版本,你可以通过 微软应用商店 Microsoft Store 或者以下命令更新它。

wsl --update

此外,如果你不是 Windows 预览体验成员 Windows Insider ,你可以到 WSL 发行页面 下载它来体验。

为了让 systemd 在你的系统上运行,你需要修改 wsl.conf 这个文件以确保 systemd 在启动时运行。

wsl.conf 添加以下几行以使 WSL 在启动时运行 systemd

[boot]
systemd=true

最后,重启你的 WSL 实例以见证更改。

随着对 systemd 的支持,微软在 WSL 的发展又前进了一大步,这将使得 WSL 吸引更多用户。

? 是否对 WSL 支持 systemd 感到兴奋?或是你更喜欢无 systemd 的发行版?


via: https://news.itsfoss.com/systemd-wsl/

作者:Sourav Rudra 选题:lkxed 译者:vvvbbbcz 校对:wxy

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

基于 Devuan 的 Peppermint OS 可能是无 systemd 发行版中一个令人振奋的新成员。听起来不错吧?

peppermint

作为 最轻量级和最灵活的 Linux 发行版之一,Peppermint OS 现在提供一个基于 Devuan 的 ISO,可以让高级用户对他们的系统有更多的控制。

随着他们发布了 Peppermint OS 11,他们放弃使用 Ubuntu 作为基础,而使用 Debian,使 Peppermint OS 更加稳定和可靠。

基于 Devuan 的 Peppermint OS

Peppermint OS devuan

那么,首先 Devuan 是什么?

Devuan 是 Debian 的一个分叉,没有 systemd,所以用户可以拥有移植性和选择的自由。

是否使用 systemd 经常发生争论,这就是为什么我们有一个 无 systemd 的 Linux 发行版 的列表,但只有少数几个可以提供开箱即用的精良体验。

现在,基于 Devuan 的 Peppermint OS 版本应该是这个列表中令人振奋的补充。

如果你想要一个无 systemd 的发行版,给你的操作系统更多的自由,这应该是一个不错的尝试。

别担心,Peppermint OS 的 Debian 版将会继续存在。所以,你可以期待基于 Devuan 和基于 Debian 的 ISO 都可以使用。

你需要无 systemd 发行版吗?

systemd 是一个初始化系统。当你启动你的 Linux 机器时,初始化系统是最先启动的程序之一,并将一直运行到你使用电脑为止。

systemd 不仅仅是一个初始系统,它还包含其他软件,如 logind、networkd 等,用于管理 Linux 系统的不同方面。

总的来说,它演变成了一个复杂的初始模块。虽然它使许多事情变得简单,但在一些用户看来,它是一个臃肿的解决方案。

因此,有用户开始喜欢 Devuan 这样的选项。而且,Peppermint OS 的开发者现在正试图通过使用 Devuan 作为另一个版本的基础,来改善桌面用户的体验。

下载基于 Devuan 的 Peppermint OS

对于习惯于无 systemd 的用户来说,这是一个很好的选择。

但是,如果你从来没有尝试过无 systemd 的发行版,除非你知道自己在做什么,否则进行切换可能不是一个明智的主意。

Peppermint OS (Devuan)

via: https://news.itsfoss.com/peppermint-os-devuan/

作者:Sagar Sharma 选题:lkxed 译者:wxy 校对:wxy

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

首个性能超百亿亿次的超算夺得 TOP500 榜单第一

在刚刚发布的 第 59 期 TOP500 超算榜单 中,美国橡树岭国家实验室的 Frontier 超算超越了过去两年的榜首日本富岳超算,成为全球超算冠军。它是该榜单首个速度超过百亿亿次的超算,成为了第一台真正的超大规模计算机。不仅如此,Frontier 也同时取得了 GREEN500 和 HPL-AI 榜单第一名。Frontier 使用的是 AMD 的 CPU 及图形加速器,榜单前十名中共有五台超算使用的是 AMD 的处理器。中国此次参加排名的最快超算还是之前的神威·太湖之光,排名第六,列入 TOP500 的中国超算共有 173 个。而之前被传的中国突破百亿亿次的两台超算都没参与 TOP500 榜单排名。

消息来源:wccftech
老王点评:计算技术突飞猛进啊,这次美国算是露出一点家底了。

systemd 带来实验性的 A/B 式镜像更新功能

ChromeOS 有两个根分区:一个使用的,一个备用的。当前运行的操作系统更新备用分区,然后你重新启动到备用分区。如果一切正常,它就会更新现在闲置的原来的分区。如果它不能完美地工作,那么你仍然有以前的版本可以使用,你可以再次重启回去。而最新发布的 Systemd 初始化系统带来了一个实验性的功能,提供了类似 ChromeOS、Fedora Silverblue 的这种 A/B 式镜像更新功能。Systemd 的创始人 Lennart Poettering 说:“让我们普及基于镜像的操作系统,现代化的安全属性围绕着不变性、安全启动、TPM2、适应性、自动更新、出厂重置、统一性而建立,由传统的发行包建立,但通过镜像部署。”

消息来源:theregister
老王点评:虽然很多人反对 systemd 的这种二进制、大一统和复杂的结构,但公平的讲,systemd 的很多理念很先进,其最新带来的这种 A/B 式更新功能也颇有价值。ChromeOS 证明了对于普通用户来说,就是让他们尽量少的接触底层细节,出现问题后整个回滚是最好的。但是,Linux 还是那个 Linux 吗?或许是我太守旧了。

勒索软件攻击让美国一个县回到纸质时代

美国新泽西州萨默塞特县上周遭到勒索软件攻击,使得该县政府各部门的电子邮件服务瘫痪,使得“无法提供大多数依赖互联网访问的服务”,诸如土地记录、生命统计和遗嘱记录等只有 1977 年以前的纸质记录可供查找。

消息来源:theregister
老王点评:目前去各个公共部门办事,即便已经通过了电子审批,还是索要各种纸质文件,这样看起来也不是完全没有意义。: D

用 systemd-analyze 洞悉并解决 Linux 启动性能问题。

 title=

系统管理员的一部分工作就是分析系统性能,发现并解决引起性能不佳、启动时间长的问题。系统管理员也需要去检查 systemd 的配置和使用的其它方面。

systemd 初始化系统提供了 systemd-analyze 工具,可以帮助发现性能问题和其他重要的 systemd 信息。在以前的文章《分析 systemd 日历和时间跨度》里,我用了 systemd-analyze 去分析 systemd 里的时间戳和时间跨度,但是这个工具还有很多其他用法,这个文章里我将再揭示一些。

(LCTT 译注:systemd 是目前主流 Linux 发行版采用的系统管理系统)

(LCTT 译注:为了区分英文的 “boot” 和 “startup” 的不同涵义,此处将 “boot” 翻译为“引导”,“startup” 翻译为“启动”。)

概述启动

Linux 启动过程是值得学习关注的地方,因为 systemd-analyze 工具很多功能聚焦在 启动 startup 过程。但是首先,要理解 引导 boot 启动 startup 。引导阶段从 BIOS 加电自检(POST)开始,结束于内核完成加载并控制主机系统,然后是开始了启动过程,也是 systemd 日志的开始点。

这个系列的第二篇文章《理解 Linux 启动时的 systemd》中,我详细讨论了启动阶段的内容和过程。在这篇文章里,我想研究一下启动过程,看看需要多少时间和大部分时间花费在哪里。

下面我将展示的结果来自我的主要工作站,这比虚拟机的结果要有趣得多。这个工作站包括一块 华硕 TUF X299 Mark 2 主板、一个英特尔 i9-7960X CPU(16 核 32 线程),64 G 内存。下面的一些命令非 root 用户也可以使用,但是我在这篇文章里使用了 root 用户,以避免在用户之间切换。

检查启动过程有几种方法,最简单的 systemd-analyze 命令显示了启动的几个主要部分耗费的时间,包括内核启动、装载运行 initrd(即初始 ramdisk,这是一个用来初始化一些硬件、挂载 / 根文件系统的临时系统镜像),还有用户空间(加载所有使主机达到可用状态的程序和守护程序)。如果没有像该命令传递子命令,默认是 systemd-analyze time

[root@david ~]$ systemd-analyze
Startup finished in 53.921s (firmware) + 2.643s (loader) + 2.236s (kernel) + 4.348s (initrd) + 10.082s (userspace) = 1min 13.233s
graphical.target reached after 10.071s in userspace
[root@david ~]#

这个输出中最值得注意的数据是在固件(BIOS)中花费的时间:几乎 54 秒。这是一个不太正常的时间,我的其他物理系统都没有花费这么长的时间来通过 BIOS。

我的 System76 Oryx Pro 笔记本在 BIOS 阶段只花了 8.506 秒,我家里所有的系统都在 10 秒以内。在线搜索一阵之后,我发现这块主板以其超长的 BIOS 引导时间而闻名。我的主板从不“马上启动”,总是挂起,我需要关机再开机,BIOS 报错,按 F1 进入 BIOS 设置,选择要引导的驱动器完成引导,多花费的时间就是这样用掉的。

不是所有主机都会显示固件数据(LCTT 译注:固件引导中不涉及 systemd)。我的不科学的实验使我相信,这个数据只显示给英特尔 9 代或以上的处理器。但这可能是不正确的。

这个关于引导、启动的概述提供了很好的(虽然有限)的信息,但是还有很多关于启动的信息,我将在下面描述。

分配责任

你可以用 systemd-analyze blame 来发现哪个 systemd 单元的初始化时间最长。其结果按照初始化时间长短排序,从多到少:

[root@david ~]$ systemd-analyze blame  
       5.417s NetworkManager-wait-online.service
       3.423s dracut-initqueue.service
       2.715s systemd-udev-settle.service
       2.519s fstrim.service
       1.275s udisks2.service
       1.271s smartd.service
        996ms upower.service
        637ms lvm2-monitor.service
        533ms lvm2-pvscan@8:17.service
        520ms dmraid-activation.service
        460ms vboxdrv.service
        396ms initrd-switch-root.service
<截断:删去了好多时间不长的条目>

因为很多服务是并行开始的,在 BIOS 之后所有单元加在一起的总数大大超过了 systemd-analyze time 汇总数。很多都是小数,不能显著的节省时间。

这个命令提供的数据指明了改善启动时间的办法。无用的服务可以禁用(disable)。在这个启动过程中,似乎没有任何一个服务需要花费过长的时间。你可能会在每次启动时看到不同的结果。(LCTT 译注:并行启动服务的原因)

关键链

就像项目管理中的关键路径一样,关键链显示了在启动过程中发生的时间关键的事件链(LCTT 译注:systemd 可以定义服务间的依赖,构成关键链)。如果启动缓慢,这些是你想查看的 systemd 单元,因为它们是导致延迟的单元。这个工具不会显示所有启动的单元,只显示这个关键事件链中的单元。(LCTT 译注:相当于最短路径。并不显示依赖不在关键链上的服务单元)

[root@david ~]# systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

graphical.target @10.071s
└─lxdm.service @10.071s
  └─plymouth-quit.service @10.047s +22ms
    └─systemd-user-sessions.service @10.031s +7ms
      └─remote-fs.target @10.026s
        └─remote-fs-pre.target @10.025s
          └─nfs-client.target @4.636s
            └─gssproxy.service @4.607s +28ms
              └─network.target @4.604s
                └─NetworkManager.service @4.383s +219ms
                  └─dbus-broker.service @4.434s +136ms
                    └─dbus.socket @4.369s
                      └─sysinit.target @4.354s
                        └─systemd-update-utmp.service @4.345s +9ms
                          └─auditd.service @4.301s +42ms
                            └─systemd-tmpfiles-setup.service @4.254s +42ms
                              └─import-state.service @4.233s +19ms
                                └─local-fs.target @4.229s
                                  └─Virtual.mount @4.019s +209ms
                                    └─systemd-fsck@dev-mapper-vg_david2\x2dVirtual.service @3.742s +274ms
                                      └─local-fs-pre.target @3.726s
                                        └─lvm2-monitor.service @356ms +637ms
                                          └─dm-event.socket @319ms
                                            └─-.mount
                                              └─system.slice
                                                └─-.slice
[root@david ~]#

前面有 @ 的数字表示单元激活开始启动所使用的绝对秒数。前面有 + 的数字显示单元启动所需的时间。

系统状态

有时候你需要确定系统的当前状态,systemd-analyze dump 命令转储了当前系统状态的大量数据。有主要的启动时间戳,一个每个 systemd 单元的列表,并对每个单元状态进行了完整描述:

[root@david ~]# systemd-analyze dump
Timestamp firmware: 1min 7.983523s
Timestamp loader: 3.872325s
Timestamp kernel: Wed 2020-08-26 12:33:35 EDT
Timestamp initrd: Wed 2020-08-26 12:33:38 EDT
Timestamp userspace: Wed 2020-08-26 12:33:42 EDT
Timestamp finish: Wed 2020-08-26 16:33:56 EDT
Timestamp security-start: Wed 2020-08-26 12:33:42 EDT
Timestamp security-finish: Wed 2020-08-26 12:33:42 EDT
Timestamp generators-start: Wed 2020-08-26 16:33:42 EDT
Timestamp generators-finish: Wed 2020-08-26 16:33:43 EDT
Timestamp units-load-start: Wed 2020-08-26 16:33:43 EDT
Timestamp units-load-finish: Wed 2020-08-26 16:33:43 EDT
Timestamp initrd-security-start: Wed 2020-08-26 12:33:38 EDT
Timestamp initrd-security-finish: Wed 2020-08-26 12:33:38 EDT
Timestamp initrd-generators-start: Wed 2020-08-26 12:33:38 EDT
Timestamp initrd-generators-finish: Wed 2020-08-26 12:33:38 EDT
Timestamp initrd-units-load-start: Wed 2020-08-26 12:33:38 EDT
Timestamp initrd-units-load-finish: Wed 2020-08-26 12:33:38 EDT
-> Unit system.slice:
        Description: System Slice
        Instance: n/a
        Unit Load State: loaded
        Unit Active State: active
        State Change Timestamp: Wed 2020-08-26 12:33:38 EDT
        Inactive Exit Timestamp: Wed 2020-08-26 12:33:38 EDT
        Active Enter Timestamp: Wed 2020-08-26 12:33:38 EDT
        Active Exit Timestamp: n/a
        Inactive Enter Timestamp: n/a
        May GC: no
<截断:删除了大量的输出行>

在我的主工作站上,这个命令生成了 49680 行输出,大概 1.66MB,这个命令非常快,不需要等待。

我很喜欢为各种连接设备(如存储设备)提供的大量细节。每个 systemd 单元有一个部分,包括各种运行时、缓存、日志目录的模式、启动单元的命令行、PID、开始时间戳,以及内存和文件限制等细节。

systemd-analyze 的手册页里展示了 systemd-analyze --user dump 选项,目的是显示用户管理器的内部状态。但这个选项对我来说是失败的,互联网搜索之后表明它可能有一些问题。在 systemd 里,--user 实例用来管理和控制处理器给每个用户的进程资源。处理能力按分给每个用户的进程都属于一个控制组,我将在以后的文章中介绍。

分析图表

大多数啥都不懂的猥琐老板(PHB)和许多优秀的管理者都发现漂亮的图表比我通常喜欢的基于文本的系统性能数据更容易阅读和理解。但有时,即使是我也喜欢一个好的图表,systemd-analyze 提供了显示引导/启动数据的 SVG 矢量图表。

下面的命令生成一个矢量图文件,来显示在引导和启动过程发生的事件。生成这个文件只需要几秒:

[root@david ~]# systemd-analyze plot > /tmp/bootup.svg

这个命令创建了一个 SVG 文件,SVG 是一个定义了一系列图形矢量的文本文件,包括 Image Viewer、Ristretto、Okular、Eye of Mate、LibreOffice Draw 在内的这些可以生成图形的应用,可以用 SVG 来创建图像。

我用 LibreOffice Draw(LCTT 译注:一个办公文档软件)来渲染一幅图形。这张图形很大,你需要放到很大才能看清细节。这里是它的一小部分:

 title=

图中时间轴上零点(0)的左边是引导阶段,零点的右边是启动阶段。这一小部分显示了内核、initrd 和 initrd 启动的进程。

这张图一目了然地显示了什么时候启动,启动需要多少时间,以及主要的依赖项。关键路径用红色高亮显示。

另外一个生成图形输出的命令是 systemd-analyze plot,它生成了 DOT) 格式的文本依赖图。产生的数据流通过 dot 工具进行处理,这是一组用来从多种类型数据中生成矢量图文件的程序。这些 SVG 文件也能被上面列出的工具处理。

首先,生成文件,在我的主工作站花了 9 分钟:

[root@david ~]# time systemd-analyze dot | dot -Tsvg > /tmp/test.svg
   Color legend: black     = Requires
                 dark blue = Requisite
                 dark grey = Wants
                 red       = Conflicts
                 green     = After

real    8m37.544s
user    8m35.375s
sys     0m0.070s
[root@david ~]#

我不会在这里重现输出,因为产生的图形就像一大堆意大利面条。但是你应该试试,看看我想让你看到的结果。

条件

在阅读 systemd-analyze(1) 的手册页时,我发现了一个更有趣的功能,但又有点通用,就是条件子命令。(是的,我确实在读手册页,而且我神奇地通过这种方式学到了很多东西!)。这个 condition 子命令能用来测试 systemd 单元文件中的条件和断言。

它也可以在脚本中用来评估一个或多个条件 —— 如果所有条件都满足,则返回 0;如果有条件不满足,则返回 1。在其它情况下,它都会输出其结果文本。

下面的例子来自手册页,稍微有点复杂。它测试了内核版本是否在 4.0 和 5.1 之间,主机是否使用交流电供电,系统结构是否是 ARM,以及 /etc/os-release 目录是否存在。我添加了 echo $? 来打印返回值。

[root@david ~]# systemd-analyze condition 'ConditionKernelVersion = ! <4.0' \
                    'ConditionKernelVersion = >=5.1' \
                    'ConditionACPower=|false' \
                    'ConditionArchitecture=|!arm' \
                    'AssertPathExists=/etc/os-release' ; \
echo $?
test.service: AssertPathExists=/etc/os-release succeeded.
Asserts succeeded.
test.service: ConditionArchitecture=|!arm succeeded.
test.service: ConditionACPower=|false failed.
test.service: ConditionKernelVersion=>=5.1 succeeded.
test.service: ConditionKernelVersion=!<4.0 succeeded.
Conditions succeeded.
0
[root@david ~]#

条件和断言的列表大约从 systemd.unit(5) 手册页的第 600 行左右开始。

列出配置文件

systemd-analyze 工具提供了一种将各种配置文件的内容发送到 STDOUT 的方法,如图所示。其基本目录是 /etc/

[root@david ~]# systemd-analyze cat-config systemd/system/display-manager.service
# /etc/systemd/system/display-manager.service
[Unit]
Description=LXDM (Lightweight X11 Display Manager)
#Documentation=man:lxdm(8)
[email protected]
After=systemd-user-sessions.service [email protected] plymouth-quit.service livesys-late.service
#Conflicts=plymouth-quit.service

[Service]
ExecStart=/usr/sbin/lxdm
Restart=always
IgnoreSIGPIPE=no
#BusName=org.freedesktop.lxdm

[Install]
Alias=display-manager.service
[root@david ~]#

打了这么多字却和标准的 cat 命令做的差不多。我发现下一条命令小有帮助,它能在标准的 systemd 所在的位置搜索具有指定模式的内容:

[root@david ~]# systemctl cat backup*
# /etc/systemd/system/backup.timer
# This timer unit runs the local backup program
# (C) David Both
# Licensed under GPL V2
#

[Unit]
Description=Perform system backups
Requires=backup.service

[Timer]
Unit=backup.service
OnCalendar=*-*-* 00:15:30

[Install]
WantedBy=timers.target


# /etc/systemd/system/backup.service
# This service unit runs the rsbu backup program
# By David Both
# Licensed under GPL V2
#

[Unit]
Description=Backup services using rsbu
Wants=backup.timer

[Service]
Type=oneshot
Environment="HOME=/root"
ExecStart=/usr/local/bin/rsbu -bvd1
ExecStart=/usr/local/bin/rsbu -buvd2

[Install]
WantedBy=multi-user.target

[root@david ~]#

这两个命令在每个文件的内容前面都有一个注释行,包含文件的完整路径和名称。

单元文件检查

当创建了一个新的单元文件,可以利用 verify 子命令帮助检查语法是否正确。它能指出来不正确的拼写,并列出缺失的服务单元。

[root@david ~]# systemd-analyze verify /etc/systemd/system/backup.service

秉承 Unix/Linux 的“沉默是金”的宗旨,没有输出意味着扫描的文件中没有错误。

安全性

security 子命令检查指定服务的安全级别。它只能针对服务单元,其他类型的单元文件不起作用:

[root@david ~]# systemd-analyze security display-manager
  NAME                                                        DESCRIPTION                                                     >
✗ PrivateNetwork=                                             Service has access to the host's network                        >
✗ User=/DynamicUser=                                          Service runs as root user                                       >
✗ CapabilityBoundingSet=~CAP_SET(UID|GID|PCAP)                Service may change UID/GID identities/capabilities              >
✗ CapabilityBoundingSet=~CAP_SYS_ADMIN                        Service has administrator privileges                            >
✗ CapabilityBoundingSet=~CAP_SYS_PTRACE                       Service has ptrace() debugging abilities                        >
✗ RestrictAddressFamilies=~AF_(INET|INET6)                    Service may allocate Internet sockets                           >
✗ RestrictNamespaces=~CLONE_NEWUSER                           Service may create user namespaces                              >
✗ RestrictAddressFamilies=~…                                  Service may allocate exotic sockets                             >
✗ CapabilityBoundingSet=~CAP_(CHOWN|FSETID|SETFCAP)           Service may change file ownership/access mode/capabilities unres>
✗ CapabilityBoundingSet=~CAP_(DAC_*|FOWNER|IPC_OWNER)         Service may override UNIX file/IPC permission checks            >
✗ CapabilityBoundingSet=~CAP_NET_ADMIN                        Service has network configuration privileges                    >
✗ CapabilityBoundingSet=~CAP_SYS_MODULE                       Service may load kernel modules
<截断>
✗ CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG                   Service may issue vhangup()                                     >
✗ CapabilityBoundingSet=~CAP_WAKE_ALARM                       Service may program timers that wake up the system              >
✗ RestrictAddressFamilies=~AF_UNIX                            Service may allocate local sockets                              >

→ Overall exposure level for backup.service: 9.6 UNSAFE ?
lines 34-81/81 (END)

是的,表情符是输出的一部分。但是,当然,许多服务需要几乎完全访问所有的东西,以便完成它们的工作。我针对几个服务运行了这个程序,包括我自己的备份服务;结果可能有所不同,但最底下一行似乎大多是一样的。

这个工具对于在严格的安全环境检查和修复用户空间的服务单元是很有用的。我不认为我们的大多数都能用到它。

最后总结

这个强力的工具提供了一些有趣而惊人的有用选项。本文探讨的大部分内容是关于使用 systemd-analyze 来深入了解 Linux 使用 systemd 的启动性能。它还可以分析 systemd 的其他方面。

其中有些工具的作用有限,有几个应该完全忘记。但在解决启动和其他 systemd 功能的问题时,大多数都能起到很好的作用。

资源

互联网上关于 systemd 有很多信息,但是很多过于简略、晦涩,甚至是误导。除了这篇文章中提到的资源外,以下网页提供了关于systemd启动的更详细和可靠的信息。这个列表在我开始写这一系列文章后有所增长,以反映我所做的研究。

  • systemd.unit(5) 手册页 包含了一份单元文件部分及其配置选项的清单,并对每个部分进行了简明的描述。
  • Fedora 项目有一个很好的实用 systemd 指南。它包含了配置、管理和维护使用 systemd 的 Fedora 计算机所需的几乎所有知识。
  • Fedora 项目还有一份很好的 备忘录,将旧的 SystemV 命令与 systemd 命令进行了对照。
  • Red Hat 文档包含了对 单元文件结构 的详细描述和其他重要的信息。
  • 关于 systemd 技术的细节和创建它的原因,可以去看 Freedesktop.org systemd 详述
  • Linux.com 的“更多 systemd 乐趣”提供了很多高级的 systemd 信息和技巧

此外,systemd 设计者和主要开发者 Lennart Poettering 也为 Linux 系统管理员撰写了一系列深度技术文档,尽管这些文章写于 2010 年 4 月到 2011 年 9 月,现在看也是非常适应时宜。关于 systemd 及其生态系统的其他好文章,大部分都是基于这些文章的。


via: https://opensource.com/article/20/9/systemd-startup-configuration

作者:David Both 选题:lujun9972 译者:jiamn 校对:wxy

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

谷歌称其已清楚说明 Chrome 隐身浏览模式不会让用户的在线活动“隐形”

美国北加州地方法院周一发布命令,要求 Alphabet CEO 出庭,来说明用户在使用 Chrome 浏览器时对其在线隐私的误解。这起 2020 年 6 月提起的诉讼声称 Google 会跟踪用户,即使他们使用的是隐身模式在线浏览。Google 对此说法持有异议,称其隐私说明已清楚说明隐身浏览模式不会让用户的在线活动“隐形”。

老王点评:我想大多数人都会以为 Chrome 浏览器的隐身模式可以让在线活动隐身吧?

LastPass 否认用户密码泄露

密码管理器 LastPass 的一些用户最近收到了主密码可疑登录尝试的邮件警告,引发了 LastPass 用户密码泄露的担忧。大多数报告似乎来自拥有过时的 LastPass 账户的用户,这意味着他们已经有一段时间没有使用该服务,也没有改变密码。这表明正在使用的主密码列表可能来自早期的数据库。但 LastPass 否认 该公司发生了用户密码泄露的事故。它在一份声明中表示,它认为是未知攻击者发动了撞库攻击,也就是攻击者使用从第三方获取到的电子邮件和密码去尝试登录 LastPass 上的用户账号。

老王点评:说到底,密码这种东西还是保留在自己手里才放心。

systemd 的代码提交量超过了前几年

随着 systemd 提供的特性和功能不断增加,今年该项目在提交活动方面创下了新的 增长记录。截至上周末,systemd 已经有 4,689 个文件,包括大约 162 万行代码,来自大约 1992 个贡献者提交了超过 55000 次。今年,systemd 的提交量超过了 6683 个!比去年多了 1000 个。令人惊讶的是,Lennart Poettering 从连续 10 年的提交次数最多的位置上退了下来。红帽公司的 Yu Watanabe 跃居榜首,完成了近 30% 的提交。

老王点评:虽然我也不喜欢 systemd,但是不能不说它已经越来越复杂和强大了。