了解如何成为产品用户和开发人员之间的桥梁。当人们得知我是位（专注于 syslog-ng 和 sudo 的）开源布道师的时候，他们经常问我为 Linux 世界中如此知名的软件“代言”是什么感觉。我的回答非常简短：非常棒！我是整个研发环节的一部分，所以我不会觉得自己可有可无。当人们实践我教他们的东西，以及当我收集到的用户反馈影响产品开发的时候，我感觉我很有意义。什么是布道师？我将布道师定义为软件（或其他产品）的用户和开发人员之间的桥梁。布道师不仅仅将好消息分享给用户，还要从他们那里收集反馈。布道师们有着各式各样的背景：有些人具有市场营销背景，对技术有着浓厚的兴趣；有些人是喜欢和用户交流的开发人员。我属于第三类——“资深用户”，即从用户视角对软件产品有深入了解的人。我要和非常多的用户打交道。syslog-ng 的用户群体非常庞大，它可以用在大多数 Linux 发行版和 BSD 变体上。数以亿计的设备运行着 syslog-ng，其中包括 BMW i3 和 Kindle。大多数基于 BSD 的设备，譬如 FreeNAS，使用 syslog-ng 记录日志，而 Synology 和 QNAP 的基于 Linux 的 网络附属存储 Network Attached Storage （NAS）也是如此。就算 syslog-ng 运行在太空的某处，我也不会感到惊讶。大多数 Linux 和 Unix 用户使用 sudo，因为它几乎被安装在每一台 Linux 设备上。它的社区很大，有几千万人。人们经常问我是如何和那么多用户打交道的，但这并不困难。我是如何成为一名布道师的我成为布道师的旅程是一个跨越了近 20 年的进化过程。它始于许多年前，那时候我在大学教书。之后是和 POWER/PowerPC 的 Linux 用户、开发人员合作。最后，我在 Balabit 的工作中开始使用 syslog-ng，再后来我开始接触 sudo。我在 Balabit 的第一份工作是帮助 Linux 发行版将它们的 syslog-ng 包升级到上游的最新版本。随着我越来越多地了解 syslog-ng 的细节，我开始帮助它的用户。一年后，我在匈牙利和国际会议上发表关于 syslog-ng 的演说。不久之后，我从用户那里收集到的反馈开始对产品开发产生影响。八年后，也就是 2018 年，Balabit 被 One Identity 收购，sudo 的维护者 Todd Miller 成为了我的同事。在那之前我只是了解一些基本的 sudo 功能，但我变得对 sudo 更感兴趣，并开始了解它的高级功能。很快，我开始为 sudo 布道，从一名 syslog-ng 布道师进化为一个更广泛意义上的开源布道师。技术布道的四大支柱技术布道师做很多事情，大致可以分为四类：开发人员、支持人员、技术产品营销和产品经理。我将更详细地介绍这四个支柱。开发人员我不是开发人员，但我做了很多开发人员的工作，例如为各式各样的 Linux 发行版和 FreeBSD 打包 syslog-ng，做很多测试，将 syslog-ng 集成到其他软件中，并在异构平台上测试。我做的开发者任务有助于社区，并帮助我更好地了解社区需求。支持人员关注错误追踪器，在 Google Alerts 和 Twitter 上查看 syslog-ng 关键词，以及阅读邮件列表，都能让我更好地帮助我们的用户群体。通过帮助他人，我也能能更好地理解他们的问题所在。技术产品营销我真的不喜欢“营销”这个词，但是写博客和在会议上演说 确实是 营销。作为一名前系统管理员，我了解我的听众，我们有共同的声音。除了我自己的 Twitter 账号 @PCzanik 之外，我还在 @sngOSE （syslog-ng 开源版）和 @SudoProject （sudo）账号下发帖。Twitter 是个收集和分享技术新闻的绝佳平台。即使营销只是我工作的一个方面，它仍是我布道工作中最引人注目的部分：给内向者的社交场合生存技巧： 当人们得知我是一个内向的人，而仍然从事了这份工作之后，就经常问我是如何做到的。发表演讲或在会议展位上工作一整天是很困难的：有太多的人、太多的噪音了。我在这里针对这种场合给出一些生存技巧：专注于结果。活动是从用户那里收集反馈的绝佳机会。等你演讲完，可以随地开始一场好的讨论，甚至在展台或走廊上。在活动中，用户会给出很多现实生活中的反馈，记住她们的意见会有很多帮助。知道活动何时结束。请记住在嘈杂的环境中只能待上一段时间，这对你会有很大的帮助。与你志同道合的人尽情交谈，他们和你一样害羞、和你一样有不安全感、和你有着相同的技术兴趣。疫情期间的营销技巧： 许多人问我 COVID-19 是如何影响我的工作的，因为我从 2020 年开始就不能出行。我刚从 RSA 大会 和 南加州 Linux 博览会 上回来，两天后航班就暂停了、边境也关闭了（LCTT 校注：本文原文发表于 2021 年）。即使现在也在开虚拟会议，我仍可以做有关 sudo 和 syslog-ng 的演说，但这样反馈就会减少，甚至没有反馈——没有让我和用户见面的走廊，也没有供演讲者讨论最新、最好的技术的晚宴。会议上注意力比以往更不集中，因为在家里工作总有各种各样的干扰因素。我看到了许多不同的方法试图解决这个问题，每一项都有其优缺点：全局聊天室适合举办小型活动。但当活动有超过几十个人时，它将会变成一连串的“大家好，我来自马萨诸塞州，波士顿” 或者类似的无用的消息，从而没有机会进行一些有意义的讨论。如果活动有多个 专题 track ，给每个专题讨论一个单独的聊天室是很有用的。演讲者和用户都可以从聊天中发布的问题和评论中学到很多东西。如果有一个主持人，这将成倍地有用。始终记得将讨论限制在主题上，并确保在问答环节中产生的问题传达到演讲者耳中。 随机聊天 chat roulette 是个随机联系陌生人的好方法，并且能产生好的讨论。不过这种方法对于演讲者来说随机性太高了。 针对性聊天 Tracking chats 很好，不过许多人不喜欢公开提问或分享经验。直接与演讲者聊天可以解决这个问题。产品经理我不是产品经理，尽管有时候我希望自己收集到的反馈可以直接转化为功能，但我定期与开发者和产品经理分享用户反馈。在内部讨论中，我总是代表用户一方，而不是考虑开发者如何用用最简单的方法推进产品，或者如何产生最多收益。为什么要布道广为人知、广泛使用的软件？每个 Linux 用户都知道 sudo，他们中的许多人也知道 syslog-ng。那我们为什么要布道它们呢？这是因为许多人只知道这些程序的基础知识，这也是他们刚开始使用 Linux 时学到的。但这两款软件都不是简单的、几十年来处于维护模式的工具序，两者都是仍在持续开发中的有生命力的程序。大多数人对 syslog-ng 的了解仅限于它收集日志消息并把消息存储在文本文件中。但 syslog-ng 还有许多 其他功能，包括解析消息、使用地理信息丰富消息、精确的消息路径（过滤）和把消息存储在数据库、Hadoop 或消息队列中。sudo 通常被认为是管理员命令的前缀，但它可以做许多其他事情。sudo 可以记录在里面运行的会话，允许你检查用户通过 sudo 使用超级权限做了什么事情。你也可以使用插件扩展 sudo。从 sudo 的 1.9 版本 开始，你甚至可以用 Python 扩展 sudo，这使得扩展它变得容易得多。总结成为一名开源布道师是个非常有趣的工作，即使是在 COVID-19 时代，虽然确实增加了我的工作难度。如果你对于这个角色有其他问题，或者有关于技术布道师或者开发大使则如何帮助你的故事，请在评论里分享。（题图：MJ/sci-fi evangelist in high resolution, very detailed, 8k）via: https://opensource.com/article/21/1/open-source-evangelist作者：Peter Czanik 选题：lujun9972 译者：rsqrt2b 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
最近的 sudo 版本增加了新的功能，使你能够观察和控制以前隐藏的问题。当你想授予你的一些用户管理权限，同时控制和检查他们在你的系统上做什么时，你会使用 sudo。然而，即使是 sudo'，也有相当多不可控的地方，想想给予 shell 权限的情况就知道了。最近的 sudo 版本增加了一些功能，可以让你看到这些问题，甚至控制它们。例如，你可以启用更详细、更容易处理的日志信息，并记录 shell 会话中执行的每个命令。这些功能中有些是全新的。有些是出现在 1.9.0 甚至更早的版本中的功能。例如，sudo 可以记录终端上发生的一切，即使是在 1.8 版本。然而，系统将这些记录保存在本地，它们很容易被删除，特别是那些记录最有用的地方：Shell 会话。1.9.0 版本增加了会话记录集中收集，因此记录不能被本地用户删除，最近的版本还增加了中继功能，使收集功能更加强大。如果你只知道 sudo 的基础知识，或者以前只使用过 1.8 版本，我建议你阅读我以前的 文章。1、JSON 格式的日志记录我想介绍的第一个新功能是 JSON 格式的日志记录。我是一个日志狂热者（12 年前我就开始在 syslog-ng 项目上工作），而这个功能是我在这里发表文章后引入的第一个功能。启用后，sudo 记录了更多的信息，并且以一种更容易解析的方式进行。传统的 syslog 信息很短，只包含最小的必要信息量。这是由于旧的 syslog 实现的限制。超过 1k 大小的信息被丢弃或截断。Jan 28 13:56:27 localhost.localdomain sudo[10419]: czanik : TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash 最近的 syslog 实现可以处理更大的信息量。syslog-ng 默认接受 64k 大小的日志信息（当然，它可以更小或更大，取决于实际配置）。同样的事件，如果以 JSON 格式记录，就会包含更多的信息。更多并不意味着更难处理。JSON 格式的信息更容易被许多日志管理软件应用解析。下面是一个例子：Jan 28 13:58:20 localhost.localdomain sudo[10518]: @cee:{"sudo":{"accept":{"uuid":"616bc9efcf-b239-469d-60ee-deb5af8ce6","server_time":{"seconds":1643374700,"nanoseconds":222446715,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submit_time":{"seconds":1643374700,"nanoseconds":209935349,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submituser":"czanik","command":"/bin/bash","runuser":"root","runcwd":"/home/czanik","ttyname":"/dev/pts/0","submithost":"localhost.localdomain","submitcwd":"/home/czanik","runuid":0,"columns":118,"lines":60,"runargv":["/bin/bash"],"runenv":["LANG=en_US.UTF-8","HOSTNAME=localhost.localdomain","SHELL=/bin/bash","TERM=xterm-256color","PATH=/home/czanik/.local/bin:/home/czanik/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin","MAIL=/var/mail/root","LOGNAME=root","USER=root","HOME=/root","SUDO_COMMAND=/bin/bash","SUDO_USER=czanik","SUDO_UID=1000","SUDO_GID=1000"]}}} 你可以在 sudoers 文件中启用 JSON 格式的日志信息：Defaults log_format=json 你可以从我的 syslog-ng 博客中了解更多关于如何从 sudo 中使用 JSON 格式的日志信息。2、使用 sudo\_logsrvd 集中收集日志1.9.4 中另一个与日志相关的功能是使用 sudo_logsrvd 收集所有 sudo 日志信息（包括失败的）。以前，系统只在 sudo_logsrvd 实际进行记录时记录成功的会话。最后仍然默认通过 syslog 进行记录。为什么这很重要？首先，你可以在一个地方收集任何与 sudo 有关的东西。无论是会话记录还是所有相应的日志信息。其次，它还可以保证正确记录所有与 sudo 有关的事件，因为如果 sudo_logsrvd 无法访问，sudo 可以拒绝执行命令。你可以在 sudoers 文件中通过以下设置启用 sudo_logsrvd 日志记录（当然要替换 IP 地址）：Defaults log_servers=172.16.167.150 如果你想要 JSON 格式的日志信息，你需要在 sudo_logsrvd 配置的 [eventlog] 部分进行如下设置：log_format = json 否则，sudo_logsrvd 使用传统的 sudo 日志格式，并作了简单的修改。它还包括日志来源的主机的信息：Nov 18 12:40:16 centos8splunk.localdomain sudo[21028]: czanik : 3 incorrect password attempts ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash Nov 18 12:40:23 centos8splunk.localdomain sudo[21028]: czanik : HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; TSID=00000A ; COMMAND=/bin/bash Nov 18 12:40:30 centos8splunk.localdomain sudo[21028]: czanik : command rejected by I/O plugin ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash 3、中继当最初引入 sudo_logsrvd（1.9.0 版）进行会话记录集中收集时，客户端只能直接发送记录。1.9.7 版本引入了中继的概念。有了中继，你可以不直接发送记录，而是将记录发送到多级中间主机，这些中间主机构成你的网络。为什么这很重要？首先，中继使收集会话记录成为可能，即使集中主机由于网络问题或维护而不可用。默认情况下，sudo 在无法发送记录时拒绝运行，所以中继可以确保你可以全天候使用 sudo。其次，它还允许你对网络有更严格的控制。你不需要为所有的主机向中心的 sudo_logsrvd 开放防火墙，而只需要允许你的中继通过。最后，它允许你从没有直接互联网接入的网络中收集会话记录，比如 AWS 私有网络，你可以在网关主机上以中继模式安装 sudo_logsrvd。当你使用中继时，sudo 客户端和中心的 sudo_logsrvd 的配置保持不变。在中继主机上，在 sudo_logsrvd.conf 的 [relay] 部分添加以下一行：relay_host = 172.16.167.161 如果知道通往中心服务器的网络连接有问题，你可以配置中继，在转发记录之前储存它：store_first = true 4、记录子命令你是否曾经想知道在通过 sudo 启动的 shell 会话中发生了什么？是的，会话记录是存在的，但是为了看几个命令的执行情况而看几个小时的记录是很无聊的，也是对时间的巨大浪费。幸运的是，1.9.8 版本引入了子命令日志。现在，只需定期检查你的日志信息，并在发生可疑情况时才观看记录。你甚至不需要一个允许 shell 访问的规则，只需要访问一个编辑器就可以访问 shell。大多数编辑器可以运行外部命令。我最喜欢的编辑器是 JOE，这是我通过 sudo 启动它时可以看到的情况：Aug 30 13:03:00 czplaptop sudo[10150]: czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe 不用吃惊，就在一个编辑器里，我生成一个 shell 并从该 shell 中删除一些文件和分区。现在让我们看看当你启用对子命令记录时会发生什么：Aug 30 13:13:14 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/sh -c /bin/bash Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/readlink /proc/10889/exe [...] Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/sed -r s@/*:|([^\\\\]):@\1\n@g;H;x;s@/\n@\n@ Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/tty Aug 30 13:13:42 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/id Aug 30 13:13:56 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/ls -A -N --color=none -T 0 /usr/share/syslog-ng/include/scl/ 我省略了几十行以节省一些空间，但你仍然可以看到我启动了一个 shell，bash_profile 执行的命令也可以在日志中看到。你可以在 sudoers 文件中使用以下设置来启用子命令日志：`Defaults log_subcmds` 在传统的 sudo 日志中，你可以从 sudo 进程 ID 看到这些日志正是来自同一个 sudo会话。如果你打开 JSON 格式的日志，如前面所示，sudo 在日志中记录了更多的信息，使之更容易进行分析。5、拦截子命令记录子命令可以消除 sudo 的大部分隐患，但在有些情况下，你不只是想观察正在发生的事情，还想控制事件的流程。例如，你需要给一个用户提供 shell 权限，但仍想阻止他们运行一个特定的命令。在这种情况下，拦截是理想的选择。当然，也有一些限制，比如你不能限制 shell 的内置命令。比方说，who 命令很危险。你可以分两步启用拦截。第一个步骤是启用它，第二个步骤是配置它。在这种情况下，我的用户不被允许运行 who：Defaults intercept czanik ALL = (ALL) ALL, !/usr/bin/who 当我通过sudo 启动一个 root shell 会话并尝试运行 who 时，会发生以下情况：$ sudo -s # who Sorry, user czanik is not allowed to execute '/usr/bin/who' as root on czplaptop. bash: /usr/bin/who: Permission denied 你可以很容易地完全禁用运行 shell：Defaults intercept Cmnd_Alias SHELLS=/usr/bin/bash, /usr/bin/sh, /usr/bin/csh czanik ALL = (ALL) ALL, !SHELLS 这意味着你不能通过 sudo 启动 shell 会话。不仅如此，你也不能从编辑器中执行外部命令。当我试图从 vi 中启动 ls 命令时，就会出现这种情况：$ sudo vi /etc/issue Sorry, user czanik is not allowed to execute '/bin/bash -c /bin/ls' as root on czplaptop. Cannot execute shell /bin/bash Press ENTER or type command to continue 接下来是什么？我希望读了我的文章后，自己尝试一下这些新功能。你可以通过你的软件包管理器在许多 Linux 发行版和 UNIX 变种上安装最新的 sudo，或者使用 Sudo 网站 上的二进制安装程序。这篇文章只是为你提供了一个新的可能性的概述。如果你想了解更多关于这些功能的信息，请访问网站，那里有手册页面，也有 Sudo 博客。via: https://opensource.com/article/22/2/new-sudo-features-2022作者：Peter Czanik 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
为你的朋友、家人、同事或其他任何拥有廉价发烧设备的人播放音乐。在过去的 10 年里，我大部分时间都是远程工作，但当我走进办公室时，我坐在一个充满内向的同伴的房间里，他们很容易被环境噪音和谈话所干扰。我们发现，听音乐可以抑制办公室的噪音，让声音不那么扰人，用愉快的音乐提供一个愉快的工作环境。起初，我们的一位同事带来了一些老式的有源电脑音箱，把它们连接到他的桌面电脑上，然后问我们想听什么。它可以工作，但音质不是很好，而且只有当他在办公室的时候才可以使用。接下来，我们又买了一对 Altec Lansing 音箱。音质有所改善，但没有什么灵活性。不久之后，我们得到了一台通用 ARM 单板计算机（SBC），这意味着任何人都可以通过 Web 界面控制播放列表和音箱。但一块普通的 ARM 开发板意味着我们不能使用流行的音乐设备软件。由于非标准的内核，更新操作系统是一件很痛苦的事情，而且 Web 界面也经常出现故障。当团队壮大并搬进更大的房间后，我们开始梦想着有更好音箱和更容易处理软件和硬件组合的方法。为了用一种相对便宜、灵活、音质好的方式解决我们的问题，我们用树莓派、音箱和开源软件开发了一个办公室 HiFi。HiFi 硬件用一个专门的 PC 来播放背景音乐就有点过分了。它昂贵、嘈杂（除非是静音的，但那就更贵了），而且不环保。即使是最便宜的 ARM 板也能胜任这个工作，但从软件的角度来看，它们往往存在问题。树莓派还是比较便宜的，虽然不是标准的计算机，但在硬件和软件方面都有很好的支持。接下来的问题是：用什么音箱。质量好的、有源的音箱很贵。无源音箱的成本较低，但需要一个功放，这需要为这套设备增加另一个盒子。它们还必须使用树莓派的音频输出；虽然可以工作，但并不是最好的，特别是当你已经在高质量的音箱和功放上投入资金的时候。幸运的是，在数以千计的树莓派硬件扩展中，有内置数字模拟转换器（DAC）的功放。我们选择了 HiFiBerry 的 Amp。它在我们买来后不久就停产了（被采样率更好的 Amp+ 型号取代），但对于我们的目的来说，它已经足够好了。在开着空调的情况下，我想无论如何你也听不出 48kHz 或 192kHz 的 DAC 有什么不同。音箱方面，我们选择了 Audioengine P4，是在某店家清仓大甩卖的时候买的，价格超低。它很容易让我们的办公室房间充满了声音而不失真（并且还能传到我们的房间之外，有一些失真，隔壁的工程师往往不喜欢）。HiFi 软件在我们旧的通用 ARM SBC 上我们需要维护一个 Ubuntu，使用一个固定的、古老的、在软件包仓库外的系统内核，这是有问题的。树莓派操作系统包括一个维护良好的内核包，使其成为一个稳定且易于更新的基础系统，但它仍然需要我们定期更新 Python 脚本来访问 Spotify 和 YouTube。对于我们的目的来说，这有点过于高维护。幸运的是，使用树莓派作为基础意味着有许多现成的软件设备可用。我们选择了 Volumio，这是一个将树莓派变成音乐播放设备的开源项目。安装是一个简单的一步步完成的过程。安装和升级是完全无痛的，而不用辛辛苦苦地安装和维护一个操作系统，并定期调试破损的 Python 代码。配置 HiFiBerry 功放不需要编辑任何配置文件，你只需要从列表中选择即可。当然，习惯新的用户界面需要一定的时间，但稳定性和维护的便捷性让这个改变是值得的。播放音乐并体验虽然大流行期间我们都在家里办公，不过我把办公室的 HiFi 安装在我的家庭办公室里，这意味着我可以自由支配它的运行。一个不断变化的用户界面对于一个团队来说会很痛苦，但对于一个有研发背景的人来说，自己玩一个设备，变化是很有趣的。我不是一个程序员，但我有很强的 Linux 和 Unix 系统管理背景。这意味着，虽然我觉得修复坏掉的 Python 代码很烦人，但 Volumio 对我来说却足够完美，足够无聊（这是一个很好的“问题”）。幸运的是，在树莓派上播放音乐还有很多其他的可能性。作为一个终端狂人（我甚至从终端窗口启动 LibreOffice），我主要使用 Music on Console（MOC）来播放我的网络存储（NAS）中的音乐。我有几百张 CD，都转换成了 FLAC 文件。而且我还从 BandCamp 或 Society of Sound 等渠道购买了许多数字专辑。另一个选择是 音乐播放器守护进程（MPD）。把它运行在树莓派上，我可以通过网络使用 Linux 和 Android 的众多客户端之一与我的音乐进行远程交互。音乐不停歇正如你所看到的，创建一个廉价的 HiFi 系统在软件和硬件方面几乎是无限可能的。我们的解决方案只是众多解决方案中的一个，我希望它能启发你建立适合你环境的东西。via: https://opensource.com/article/21/1/raspberry-pi-hifi作者：Peter Czanik 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
从集中会话记录、chroot 支持到 Python API，sudo 1.9 提供了许多新功能。当你想在 POSIX 系统上执行一个操作时，最安全的方法之一就是使用 sudo 命令。与以 root 用户身份登录并执行命令可能是个危险的操作不同，sudo 授予任何被系统管理员指定为 “sudoer”的用户临时权限，来执行通常受限制的活动。几十年来，这个系统帮助 Linux、Unix 和 macOS 系统免受愚蠢的错误和恶意攻击，它是当今所有主要 Linux 发行版的默认管理机制。当在 2020 年 5 月发布 sudo 1.9 时，它带来了许多新功能，包括集中收集会话记录，支持 sudo 内的 chroot，以及 Python API。如果你对其中的任何一项感到惊讶，请阅读我的文章，了解一些 sudo 鲜为人知的功能。sudo 不仅仅是一个管理命令的前缀。你可以微调权限，记录终端上发生的事情，使用插件扩展sudo，在 LDAP 中存储配置，进行广泛的日志记录，以及更多。1.9.0 版本和后续的小版本增加了各种新功能（我将在下面介绍），包括：一个集中收集 sudo 会话记录的记录服务审计插件 API审批插件 APIPython 对插件的支持sudo 内置 chroot 和 CWD 支持（从 1.9.3 开始）哪里可以得到 sudo 1.9？大多数的 Linux 发行版仍然封装了上一代的 sudo（1.8 版本），并且在长期支持（LTS）的发行版中会保持这个版本数年。据我所知，提供了最完整的 sudo 1.9 包的 Linux 发行版是 openSUSETumbleweed，它是一个滚动发行版，而且该 sudo 包的子包中有 Python 支持。最近的 Fedora 版本包含了 sudo 1.9，但没有 Python 支持。FreeBSD Ports 有最新的 sudo 版本，如果你自己编译 sudo 而不是使用软件包，你可以启用 Python 支持。如果你喜欢的 Linux 发行版还没有包含 sudo 1.9，请查看 sudo 二进制页面来查看是否有现成的包可以用于你的系统。这个页面还提供了一些商用 Unix 变种的软件包。像往常一样，在你开始试验 sudo 设置之前，确保你知道 root 密码。是的，即使在 Ubuntu 上也是如此。有一个临时的“后门”是很重要的；如果没有这个后门，如果出了问题，你就必须得黑掉自己的系统。记住：语法正确的配置并不意味着每个人都可以在该系统上通过 sudo 做任何事情！记录服务记录服务可以集中收集会话记录。与本地会话记录存储相比，这有很多优势：更方便地在一个地方进行搜索，而不是访问各个机器来寻找记录即使在发送机器停机的情况下也可以进行记录本地用户若想掩盖其轨迹，不能删除记录为了快速测试，你可以通过非加密连接向记录服务发送会话。我的博客中包含了说明，可以在几分钟内完成设置。对于生产环境，我建议使用加密连接。有很多可能性，所以请阅读最适合你的环境的文档。审计插件 API新的审计插件 API 不是一个用户可见的功能。换句话说，你不能从 sudoers 文件中配置它。它是一个 API，意味着你可以从插件中访问审计信息，包括用 Python 编写的插件。你可以用很多不同的方式来使用它，比如当一些有趣的事情发生时，从 sudo 直接发送事件到 Elasticsearch 或日志即服务（LaaS）上。你也可以用它来进行调试，并以任何你喜欢的格式将其他难以访问的信息打印到屏幕上。根据你使用它的方式，你可以在 sudo 插件手册页（针对 C 语言）和 sudo Python 插件手册中找到它的文档。在 sudo 源代码中可以找到 Python 代码示例，在我的博客上也有一个简化的例子。审批插件 API审批插件 API 可以在命令执行之前加入额外的限制。这些限制只有在策略插件成功后才会运行，因此你可以有效地添加额外的策略层，而无需更换策略插件，进而无需更换 sudoers。可以定义多个审批插件，而且所有插件都必须成功，命令才能执行。与审计插件 API 一样，你可以从 C 和 Python 中使用它。我博客上记录的示例 Python 代码是对该 API 的一个很好的介绍。一旦你理解了它是如何工作的，你就可以扩展它来将 sudo 连接到工单系统，并且只批准有相关开放工单的会话。你也可以连接到人力资源数据库，这样只有当班的工程师才能获得管理权限。Python 对插件的支持尽管我不是程序员，但我最喜欢的 sudo 1.9 新特性是 Python 对插件的支持。你可以用 Python 也能使用 C 语言调用大部分 API。幸运的是，sudo 对性能不敏感，所以运行速度相对较慢的 Python 代码对 sudo 来说不是问题。使用 Python 来扩展 sudo 有很多优势：更简单、更快速的开发不需要编译；甚至可以通过配置管理分发代码许多 API 没有现成的 C 客户端，但有 Python 代码除了审计和审批插件 API 之外，还有一些其他的 API，你可以用它们做一些非常有趣的事情。通过使用策略插件 API，你可以取代 sudo 策略引擎。请注意，你将失去大部分的 sudo 功能，而且没有基于 sudoers 的配置。这在小众情况下还是很有用的，但大多数时候，最好还是继续使用 sudoers，并使用审批插件 API 创建额外的策略。如果你想尝试一下，我的 Python 插件介绍提供了一个非常简单的策略：只允许使用 id 命令。再次确认你知道 root 密码，因为一旦启用这个策略，它就会阻止任何实际使用 sudo 的行为。使用 I/O 日志 API，你可以访问用户会话的输入和输出。这意味着你可以分析会话中发生了什么，甚至在发现可疑情况时终止会话。这个 API 有很多可能的用途，比如防止数据泄露。你可以监控屏幕上的关键字，如果数据流中出现任何关键字，你可以在关键字出现在用户的屏幕上之前中断连接。另一种可能是检查用户正在输入的内容，并使用这些数据来重建用户正在输入的命令行。例如，如果用户输入 rm -fr /，你可以在按下回车键之前就断开用户的连接。组插件 API 允许非 Unix 组的查找。在某种程度上，这与审批插件 API 类似，因为它也扩展了策略插件。你可以检查一个用户是否属于一个给定的组，并在后面的配置部分基于此采取行动。chroot 和 CWD 支持sudo 的最新功能是支持 chroot 和改变工作目录（CWD），这两个选项都不是默认启用的，你需要在 sudoers 文件中明确启用它们。当它们被启用时，你可以调整目标目录或允许用户指定使用哪个目录。日志反映了这些设置何时被使用。在大多数系统中，chroot 只对 root 用户开放。如果你的某个用户需要 chroot，你需要给他们 root 权限，这比仅仅给他们 chroot 权限要大得多。另外，你可以通过 sudo 允许访问 chroot 命令，但它仍然允许漏洞，他们可以获得完全的权限。当你使用 sudo 内置的 chroot 支持时，你可以轻松地限制对单个目录的访问。你也可以让用户灵活地指定根目录。当然，这可能会导致灾难（例如，sudo --chroot / -s），但至少事件会被记录下来。当你通过 sudo 运行一个命令时，它会将工作目录设置为当前目录。这是预期的行为，但可能有一些情况下，命令需要在不同的目录下运行。例如，我记得使用过一个应用程序，它通过检查我的工作目录是否是 /root 来检查我的权限。尝试新功能希望这篇文章能启发你仔细研究一下 sudo 1.9。集中会话记录比在本地存储会话日志更加方便和安全。chroot 和 CWD 支持为你提供了额外的安全性和灵活性。而使用 Python 来扩展 sudo，可以很容易地根据你的环境来定制 sudo。你可以通过使用最新的 Linux 发行版或 sudo 网站上的即用型软件包来尝试这些新功能。如果你想了解更多关于 sudo 的信息，这里有一些资源：Sudo 官网Sudo 博客Sudo on Twittervia: https://opensource.com/article/20/10/sudo-19作者：Peter Czanik 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
觉得你已经了解了 sudo 的所有知识了吗？再想想。大家都知道 sudo，对吗？默认情况下，该工具已安装在大多数 Linux 系统上，并且可用于大多数 BSD 和商业 Unix 变体。不过，在与数百名 sudo 用户交谈之后，我得到的最常见的答案是 sudo 是一个使生活复杂化的工具。有 root 用户和 su 命令，那么为什么还要使用另一个工具呢？对于许多人来说，sudo 只是管理命令的前缀。只有极少数人提到，当你在同一个系统上有多个管理员时，可以使用 sudo 日志查看谁做了什么。那么，sudo 是什么？ 根据 sudo 网站：“sudo 允许系统管理员通过授予某些用户以 root 用户或其他用户身份运行某些命令的能力，同时提供命令及其参数的审核记录，从而委派权限。”默认情况下，sudo 只有简单的配置，一条规则允许一个用户或一组用户执行几乎所有操作（在本文后面的配置文件中有更多信息）：%wheel ALL=(ALL) ALL在此示例中，参数表示以下含义：第一个参数（%wheel）定义组的成员。第二个参数（ALL）定义组成员可以在其上运行命令的主机。第三个参数（(ALL)）定义了可以执行命令的用户名。最后一个参数（ALL）定义可以运行的应用程序。因此，在此示例中，wheel 组的成员可以以所有主机上的所有用户身份运行所有应用程序。但即使是这个一切允许的规则也很有用，因为它会记录谁在计算机上做了什么。别名当然，它不仅可以让你和你最好的朋友管理一个共享机器，你还可以微调权限。你可以将以上配置中的项目替换为列表：用户列表、命令列表等。多数情况下，你可能会复制并粘贴配置中的一些列表。在这种情况下，别名可以派上用场。在多个位置维护相同的列表容易出错。你可以定义一次别名，然后可以多次使用。因此，当你对一位管理员不再信任时，将其从别名中删除就行了。使用多个列表而不是别名，很容易忘记从具有较高特权的列表之一中删除用户。为特定组的用户启用功能sudo 命令带有大量默认设置。不过，在某些情况下，你想覆盖其中的一些情况，这时你可以在配置中使用 Defaults 语句。通常，对每个用户都强制使用这些默认值，但是你可以根据主机、用户名等将设置缩小到一部分用户。这里有个我那一代的系统管理员都喜欢玩的一个示例：“羞辱”。这些只不过是一些有人输入错误密码时的有趣信息：czanik@linux-mewy:~> sudo ls [sudo] password for root: Hold it up to the light --- not a brain in sight! # 把灯举高点，脑仁太小看不到 [sudo] password for root: My pet ferret can type better than you! # 我的宠物貂也比你输入的好 [sudo] password for root: sudo: 3 incorrect password attempts czanik@linux-mewy:~>由于并非所有人都喜欢系统管理员的这种幽默，因此默认情况下会禁用这些羞辱信息。以下示例说明了如何仅对经验丰富的系统管理员（即 wheel 组的成员）启用此设置：Defaults !insults Defaults:%wheel insults我想，感谢我将这些消息带回来的人用两只手也数不过来吧。摘要验证当然，sudo 还有更严肃的功能。其中之一是摘要验证。你可以在配置中包括应用程序的摘要：peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd在这种情况下，sudo 在运行应用程序之前检查应用程序摘要，并将其与配置中存储的摘要进行比较。如果不匹配，sudo 拒绝运行该应用程序。尽管很难在配置中维护此信息（没有用于此目的的自动化工具），但是这些摘要可以为你提供额外的保护层。会话记录会话记录也是 sudo 鲜为人知的功能。在演示之后，许多人离开我的演讲后就计划在其基础设施上实施它。为什么？因为使用会话记录，你不仅可以看到命令名称，还可以看到终端中发生的所有事情。你可以看到你的管理员在做什么，要不他们用 shell 访问了机器而日志仅会显示启动了 bash。当前有一个限制。记录存储在本地，因此具有足够的权限的话，用户可以删除他们的痕迹。所以请继续关注即将推出的功能。插件从 1.8 版开始，sudo 更改为基于插件的模块化体系结构。通过将大多数功能实现为插件，你可以编写自己的功能轻松地替换或扩展 sudo 的功能。已经有了 sudo 上的开源和商业插件。在我的演讲中，我演示了 sudo_pair 插件，该插件可在 GitHub 上获得。这个插件是用 Rust 开发的，这意味着它不是那么容易编译，甚至更难以分发其编译结果。另一方面，该插件提供了有趣的功能，需要第二个管理员通过 sudo 批准（或拒绝）运行命令。不仅如此，如果有可疑活动，可以在屏幕上跟踪会话并终止会话。在最近的 All Things Open 会议上的一次演示中，我做了一个臭名昭著的演示：czanik@linux-mewy:~> sudo rm -fr /看着屏幕上显示的命令。每个人都屏住呼吸，想看看我的笔记本电脑是否被毁了，然而它逃过一劫。日志正如我在开始时提到的，日志记录和警报是 sudo 的重要组成部分。如果你不会定期检查 sudo 日志，那么日志在使用 sudo 中并没有太多价值。该工具通过电子邮件提醒配置中指定的事件，并将所有事件记录到 syslog 中。可以打开调试日志用于调试规则或报告错误。警报电子邮件警报现在有点过时了，但是如果你使用 syslog-ng 来收集日志消息，则会自动解析 sudo 日志消息。你可以轻松创建自定义警报并将其发送到各种各样的目的地，包括 Slack、Telegram、Splunk 或 Elasticsearch。你可以从我在 syslong-ng.com 上的博客中了解有关此功能的更多信息。配置我们谈论了很多 sudo 功能，甚至还看到了几行配置。现在，让我们仔细看看 sudo 的配置方式。配置本身可以在 /etc/sudoers 中获得，这是一个简单的文本文件。不过，不建议直接编辑此文件。相反，请使用 visudo，因为此工具还会执行语法检查。如果你不喜欢 vi，则可以通过将 EDITOR 环境变量指向你的首选编辑器来更改要使用的编辑器。在开始编辑 sudo 配置之前，请确保你知道 root 密码。（是的，即使在默认情况下 root 用户没有密码的 Ubuntu 上也是如此。）虽然 visudo 会检查语法，但创建语法正确而将你锁定在系统之外的配置也很容易。如果在紧急情况下，而你手头有 root 密码，你也可以直接编辑配置。当涉及到 sudoers 文件时，有一件重要的事情要记住：从上到下读取该文件，以最后的设置为准。这个事实对你来说意味着你应该从通用设置开始，并在末尾放置例外情况，否则，通用设置会覆盖例外情况。你可以在下面看到一个基于 CentOS 的简单 sudoers 文件，并添加我们之前讨论的几行：Defaults !visiblepw Defaults always_set_home Defaults match_group_by_gid Defaults always_query_group_plugin Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin root ALL=(ALL) ALL %wheel ALL=(ALL) ALL Defaults:%wheel insults Defaults !insults Defaults log_output该文件从更改多个默认值开始。然后是通常的默认规则：root 用户和 wheel 组的成员对计算机具有完全权限。接下来，我们对 wheel 组启用“羞辱”，但对其他所有人禁用它们。最后一行启用会话记录。上面的配置在语法上是正确的，但是你可以发现逻辑错误吗？是的，有一个：后一个通用设置覆盖了先前的更具体设置，让所有人均禁用了“羞辱”。一旦交换了这两行的位置，设置就会按预期进行：wheel 组的成员会收到有趣的消息，但其他用户则不会收到。配置管理一旦必须在多台机器上维护 sudoers 文件，你很可能希望集中管理配置。这里主要有两种可能的开源方法。两者都有其优点和缺点。你可以使用也用来配置其余基础设施的配置管理应用程序之一：Red Hat Ansible、Puppet 和 Chef 都具有用于配置 sudo 的模块。这种方法的问题在于更新配置远非实时。同样，用户仍然可以在本地编辑 sudoers 文件并更改设置。sudo 工具也可以将其配置存储在 LDAP 中。在这种情况下，配置更改是实时的，用户不能弄乱sudoers 文件。另一方面，该方法也有局限性。例如，当 LDAP 服务器不可用时，你不能使用别名或使用 sudo。新功能新版本的 sudo 即将推出。1.9 版将包含许多有趣的新功能。以下是最重要的计划功能：记录服务可集中收集会话记录，与本地存储相比，它具有许多优点：在一个地方搜索更方便。即使发送记录的机器关闭，也可以进行记录。记录不能被想要删除其痕迹的人删除。audit 插件没有向 sudoers 添加新功能，而是为插件提供了 API，以方便地访问任何类型的 sudo 日志。这个插件允许使用插件从 sudo 事件创建自定义日志。approval 插件无需使用第三方插件即可启用会话批准。以及我个人最喜欢的：插件的 Python 支持，这使你可以轻松地使用 Python 代码扩展 sudo，而不是使用 C 语言进行原生编码。 ### 总结希望本文能向你证明 sudo 不仅仅是一个简单的命令前缀。有无数种可能性可以微调系统上的权限。你不仅可以微调权限，还可以通过检查摘要来提高安全性。会话记录使你能够检查系统上正在发生的事情。你也可以使用插件扩展 sudo 的功能，或者使用已有的插件或编写自己的插件。最后，从即将发布的功能列表中你可以看到，即使 sudo 已有数十年的历史，它也是一个不断发展的有生命力的项目。如果你想了解有关 sudo 的更多信息，请参考以下资源：sudo 网站sudo 博客在 Twitter 上关注我们via: https://opensource.com/article/19/10/know-about-sudo作者：Peter Czanik 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用增强的日志守护进程 syslog-ng 来监控你的物联网设备。现在，物联网设备和嵌入式系统越来越多。对于许多连接到因特网或者一个网络的设备来说，记录事件很有必要，因为你需要知道这些设备都做了些什么事情，这样你才能够解决可能出现的问题。可以考虑去使用的一个监视工具是开源的 syslog-ng 应用程序，它是一个强化的、致力于可移植的、中心化的日志收集守护程序。它可以从许多不同种类的来源、进程来收集日志，并且可以对这些日志进行处理和过滤，也可以存储或者路由它们，以便于做进一步的分析。syslog-ng 的大多数代码是用高效率的、高可移植的 C 代码写成的。它能够适用于各种场景，无论你是将它运行在一个处理能力很弱的设备上做一些简单的事情，还是运行在数据中心从成千上万的机器中收集日志的强大应用，它都能够胜任。你可能注意到在这个段落中，我使用了大量的溢美词汇。为了让你更清晰地了解它，我们来复习一下，但这将花费更多的时间，也了解的更深入一些。日志首先解释一下日志。 日志 logging 是记录一台计算机上事件的东西。在一个典型的 Linux 机器上，你可以在 /var/log 目录中找到这些信息。例如，如果你通过 SSH 登录到机器中，你将可以在其中一个日志文件中找到类似于如下内容的信息：Jan 14 11:38:48 linux-0jbu sshd[7716]: Accepted publickey for root from 127.0.0.1 port 48806 ssh2 日志的内容可能是关于你的 CPU 过热、通过 HTTP 下载了一个文档，或者你的应用程序认为重要的任何东西。syslog-ng正如我在上面所写的那样，syslog-ng 应用程序是一个强化的、致力于可移植性、和中心化的日志收集守护程序。守护程序的意思是，syslog-ng 是一个持续运行在后台的应用程序，在这里，它用于收集日志信息。虽然现在大多数应用程序的 Linux 测试是限制在 x86\_64 的机器上，但是，syslog-ng 也可以运行在大多数 BSD 和商业 UNIX 变种版本上的。从嵌入式/物联网的角度来看，这种能够运行在不同的 CPU 架构（包括 32 位和 64 位的 ARM、PowerPC、MIPS 等等）的能力甚至更为重要。（有时候，我通过阅读关于 syslog-ng 是如何使用它们的来学习新架构）为什么中心化的日志收集如此重要？其中一个很重要的原因是易于使用，因为它放在一个地方，不用到成百上千的机器上挨个去检查它们的日志。另一个原因是可用性 —— 即使一个设备不论是什么原因导致了它不可用，你都可以检查这个设备的日志信息。第三个原因是安全性；当你的设备被黑，检查设备日志可以发现攻击的踪迹。syslog-ng 的四种用法syslog-ng 有四种主要的用法：收集、处理、过滤、和保存日志信息。收集信息： syslog-ng 能够从各种各样的 特定平台源 上收集信息，比如 /dev/log，journal，或者 sun-streams。作为一个中心化的日志收集器，传统的（rfc3164）和最新的（rfc5424）系统日志协议、以及它们基于 UDP、TCP 和加密连接的各种变种，它都是支持的。你也可以从管道、套接字、文件、甚至应用程序输出来收集日志信息（或者各种文本数据）。处理日志信息： 它的处理能力几乎是无限的。你可以用它内置的解析器来分类、规范，以及结构化日志信息。如果它没有为你提供在你的应用场景中所需要的解析器，你甚至可以用 Python 来自己写一个解析器。你也可以使用地理数据来丰富信息，或者基于信息内容来附加一些字段。日志信息可以按处理它的应用程序所要求的格式进行重新格式化。你也可以重写日志信息 —— 当然了，不是篡改日志内容 —— 比如在某些情况下，需要满足匿名要求的信息。过滤日志： 过滤日志的用法主要有两种：丢弃不需要保存的日志信息 —— 像调试级别的信息；和路由日志信息—— 确保正确的日志到达正确的目的地。后一种用法的一个例子是，转发所有的认证相关的信息到一个安全信息与事件管理系统（SIEM）。保存信息： 传统的做法是，将文件保存在本地或者发送到中心化日志服务器；不论是哪种方式，它们都被发送到一个普通文件。经过这些年的改进，syslog-ng 已经开始支持 SQL 数据库，并且在过去的几年里，包括 HDFS、Kafka、MongoDB、和 Elasticsearch 在内的大数据存储，都被加入到 syslog-ng 的支持中。消息格式当在你的 /var/log 目录中查看消息时，你将看到（如上面的 SSH 信息）大量的消息都是如下格式的内容：日期 + 主机名 + 应用名 + 一句几乎完整的英文信息 在这里的每个应用程序事件都是用不同的语法描述的，基于这些数据去创建一个报告是个痛苦的任务。解决这种混乱信息的一个方案是使用结构化日志。在这种情况下，事件被表示为键-值对，而不是随意的日志信息。比如，一个 SSH 日志能够按应用程序名字、源 IP 地址、用户名、认证方法等等来描述。你可以从一开始就对你的日志信息按合适的格式进行结构化处理。当处理传统的日志信息时，你可以在 syslog-ng 中使用不同的解析器，转换非结构化（和部分结构化）的信息为键-值对格式。一旦你的日志信息表示为键-值对，那么，报告、报警、以及简单查找信息将变得很容易。物联网日志我们从一个棘手的问题开始：哪个版本的 syslog-ng 最流行？在你回答之前，想想如下这些事实：这个项目启动于 20 年以前，Red Hat 企业版 Linux EPEL 已经有了 3.5 版，而当前版本是 3.14。当我在我的演讲中问到这个问题时，观众通常回答是他们用的 Linux 发行版中自带的那个。你们绝对想不到的是，正确答案竟然是 1.6 版最流行，这个版本已经有 15 年的历史的。这什么这个版本是最为流行的，因为它是包含在亚马逊 Kindle 阅读器中的版本，它是电子书阅读器，因为它运行在全球范围内超过 1 亿台的设备上。另外一个在消费类设备上运行 syslog-ng 的例子是 BMW i3 电动汽车。Kindle 使用 syslog-ng 去收集关于用户在这台设备上都做了些什么事情等所有可能的信息。在 BMW 电动汽车上，syslog-ng 所做的事情更复杂，基于内容过滤日志信息，并且在大多数情况下，只记录最重要的日志。使用 syslog-ng 的其它类别设备还有网络和存储。一些比较知名的例子有，Turris Omnia 开源 Linux 路由器和群晖 NAS 设备。在大多数案例中，syslog-ng 是在设备上作为一个日志客户端来运行，但是在有些案例中，它运行为一个有丰富 Web 界面的中心日志服务器。你还可以在一些行业服务中找到 syslog-ng 的身影。它运行在来自美国国家仪器有限公司（NI）的实时 Linux 设备上，执行测量和自动化任务。它也被用于从定制开发的应用程序中收集日志。从命令行就可以做配置，但是一个漂亮的 GUI 可用于浏览日志。最后，还有大量的项目，比如，汽车和飞机，syslog-ng 在它们上面既可以运行为客户端，也可以运行为服务端。在这种使用案例中，syslog-ng 一般用来收集所有的日志和测量数据，然后发送它们到处理这些日志的中心化服务器集群上，然后保存它们到支持大数据的目的地，以备进一步分析。对物联网的整体益处在物联网环境中使用 syslog-ng 有几个好处。第一，它的分发性能很高，并且是一个可靠的日志收集器。第二，它的架构也很简单，因此，系统、应用程序日志、以及测量数据可以被一起收集。第三，它使数据易于使用，因为，数据可以被解析和表示为易于使用的格式。最后，通过 syslog-ng 的高效路由和过滤功能，可以显著降低处理程序的负载水平。via: https://opensource.com/article/18/3/logging-iot-events-syslog-ng作者：Peter Czanik 选题：lujun9972 译者：qhwdw 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
一个学生在搜寻强劲而节能的工作站的历程中怎样对开源系统的热情与日俱增的。最近我被问起为什么在博客和推特里经常提到 ARM 和 PowerPC。我有两个答案：一个是个人原因，另一个是技术上的。个人原因从前，我是学环境保护的。在我读博的时候，我准备买个新电脑。作为一个环保人士，我需要一台强劲且节能的电脑。这就是我开始对 PowerPC 感兴趣的原因，我找到了 Pegasos，这是一台 Genesi 公司制造的 PowerPC 工作站。我还用过 RS/6000 （PowerPC）、 SGI （MIPS）、 HP-UX （PA-RISC）和 VMS （Alpha）的服务器和工作站，由于我的 PC 使用 Linux 而非 Windows，所以使用不同的 CPU 架构对我来说并没有什么区别。 Pegasos 是我第一台工作站，它小型而节能而且对家用来说性能足够。很快我就开始为 Genesi 工作，为 Pegasos 移植 openSUSE、 Ubuntu 和其他 Linux 发行版，并提供质量保证和社区支持。继 Pegasos 之后是 EFIKA，这是另一款基于 PowerPC 的开发板。在用过工作站之后，刚开始使用嵌入式系统会感觉有点奇怪。但是作为第一代普及价位的开发板，这是一场革命的开端。我工作于一个大规模的服务器项目时，我收到 Genesi 的另一块有趣的开发板：基于 ARM 的 Smarttop 和 Smartbook。我最喜欢的 Linux 发行版——openSUSE，也收到了一打这种机器。这在当时 ARM 电脑非常稀缺的情况下，极大地促进了 ARM 版 openSUSE 项目的开发。尽管最近我很忙，我尽量保持对 ARM 和 PowerPC 新闻的关注。这有助于我支持非 x86 平台上的 syslog-ng 用户。只要有半个小时的空，我就会去捣鼓一下 ARM 机器。我在树莓派2上做了很多 syslog-ng 的测试，结果令人振奋。我最近在树莓派上做了个音乐播放器，用了一块 USB 声卡和音乐播放守护进程，我经常使用它。技术方面美好的多样性：它创造了竞争，而竞争创造了更好的产品。虽然 x86 是一款强劲的通用处理器，但 ARM 和 PowerPC （以及许多其他）这样的芯片在多种特定场景下显得更适合。如果你有一部运行安卓的移动设备或者苹果的 iPhone 或 iPad，极有可能它使用的就是基于ARM 的 SoC (片上系统)。网络存储服务器也一样。原因很简单：省电。你不会希望手机一直在充电，也不想为你的路由器付更多的电费。ARM 亦在使用 64 位 ARMv8 芯片征战企业级服务器市场。很多任务只需要极少的计算能力，另一方面省电和快速 IO 才是关键，想想存储、静态网页服务器、电子邮件和其他网络/存储相关的功能。一个最好的例子就是 Ceph，一个分布式的面向对象文件系统。SoftIron 就是一个基于 ARMv8 开发版，使用 CentOS 作为基准软件，运行在 Ceph 上的完整存储应用。众所周知 PowerPC 是旧版苹果 Mac 电脑上的 CPU。虽然它不再作为通用桌面电脑的 CPU ，它依然在路由器和电信设备里发挥作用。而且 IBM 仍在为高端服务器制造芯片。几年前，随着 Power8 的引入， IBM 在 OpenPower 基金会 的支持下开放了架构。 Power8 对于关心内存带宽的设备，比如 HPC 、大数据、数据挖掘来说，是非常理想的平台。目前，Power9 也正呼之欲出。这些都是服务器应用，但也有计划用于终端用户。猛禽工程团队正在开发一款基于 Power9 的工作站，也有一个基于飞思卡尔/恩智浦 QORIQ E6500 芯片制造笔记本的倡议。当然，这些电脑并不适合所有人，你不能在它们上面安装 Windows 游戏或者商业应用。但它们对于 PowerPC 开发人员和爱好者，或者任何想要完全开放系统的人来说是理想的选择，因为从硬件到固件到应用程序都是开放的。梦想我的梦想是完全没有 x86 的环境，不是因为我讨厌 x86 ，而是因为我喜欢多样化而且总是希望使用最适合工作的工具。如果你看看猛禽工程网页上的图，根据不同的使用情景， ARM 和 POWER 完全可以代替 x86 。现在，我在笔记本的 x86 虚拟机上编译、打包和测试 syslog-ng。如果能用上足够强劲的 ARMv8 或者 PowerPC 电脑，无论工作站还是服务器，我就能避免在 x86 上做这些事。现在我正在等待下一代菠萝本的到来，就像我在二月份 FOSDEM 上说的，下一代有望提供更高的性能。和 Chrome 本不同的是，这个 ARM 笔记本设计用于运行 Linux 而非仅是个客户端（LCTT 译注：Chrome 笔记本只提供基于网页的应用）。作为桌面系统，我在寻找 ARMv8 工作站级别的硬件。有些已经接近完成——就像 Avantek 公司的 雷神 X 台式机——不过他们还没有装备最新最快最重要也最节能的 ARMv8 CPU。当这些都实现了，我将用我的 Pixel C 笔记本运行安卓。它不像 Linux 那样简单灵活，但它以强大的 ARM SoC 和 Linux 内核为基础。via: https://opensource.com/article/18/4/why-i-love-arm-and-powerpc作者：Peter Czanik 译者：kennethXia 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出