# 每日安全资讯：因不满支持论坛，安全人员连续公布三个 WordPress 插件漏洞

近日，有安全研究人员连续在 Plugin Vulnerabilities 平台上，对外公布了 3 个 WordPress 插件的 0day 漏洞，将 10 万个 WordPress 网站于陷于安全风险中。

<img src="content_image/album_201904_18_081229eaqqwwwc1o5cered.jpeg" alt="" title="">

相关研究人员在公布这些漏洞时，提到他们只是为了抗议 WordPress 支持论坛版（WordPress Support Forum）的版主行为。只要版主停止不当行为，他们会立即终止对外揭露 0day 漏洞。

被揭露漏洞的 3 个 WordPress 插件分别是 Social Warfare、Yuzo Related Posts 和 Yellow Pencil Visual Theme Customizer。其中，Warfare 是个社交网站分享插件，有超过 6 万个 WordPress 网站安装了该插件。研究人员在 3 周前公布了 Social Warfare 的安全漏洞，插件开发人员即时将它修补了。

另外两个插件就没这么幸运了。可用来自动找出相关文章的 Yuzo Related Posts 原本拥有 6 万个安装数量，可自定义主题的 Yellow Pencil Visual Theme Customizer 则有 3 万个安装数量，这两个插件都都惹来了攻击，目前已在 WordPress 插件商店下架，插件开发人员还建议用户应尽快将所安装的版本移除。

据了解，原本安全人员在公开漏洞前，会给开发者一定的缓冲时间。而这次漏洞曝光，研究人员故意不遵循责任揭露，直接对外公开这些 WordPress 插件漏洞。他们声称目的是为了抗议 WordPress 支持论坛版主的不当行为。这些版主明知有些热门插件含有漏洞，却未通知相关的开发人员。版主们甚至会联手隐瞒插件的安全问题，为了推广特定安全服务而阻拦用户得到其它帮助。

这次漏洞接连曝光事件，看起来很像是 Plugin Vulnerabilities 平台与 WordPress 支持论坛之间的恩怨而引发的。前者不仅是为 WordPress 打造，定位更是专门对抗 WordPress 插件漏洞的服务。但不论如何，原本应该是维护 WordPress 安全的事件，目前却已危及到了众多 WordPress 网站的安全。

来源：开源中国

### 更多资讯

##### 阿桑奇被捕后 厄瓜多尔政府和机构网站遭到 4000 万次攻击

由于厄瓜多尔现任总统莫雷诺撤回了外交庇护，维基解密创始人<ruby> 朱利安·阿桑奇 <rp>  （ </rp> <rt>  Julian Assange </rt> <rp>  ） </rp></ruby>藏身厄瓜多尔驻英大使馆将近7年之后被抓。在接受法新社采访的时候， 厄瓜多资讯与通讯科技部副部长 Patricio Real 表示在阿桑奇遭到逮捕之后，已经受到了大规模针对该国的网络攻击。

来源： cnBeta.COM

详情： <http://t.cn/EXYhKm8>

##### 本月补丁星期二活动已修复卡巴斯基发现的严重零日漏洞

在 4 月 9 日发布的补丁星期二活动日中，微软修复了卡巴斯基发现的一个零日漏洞，如果被黑客控制可以获得控制系统的完整权限。该漏洞编号为 CVE-2019-0859，是已经被黑客利用的 Win32k 提权漏洞，微软已经确认新旧 Windows 系统均受到影响。Windows 10十月更新（Version 1809）同样受到影响。

来源： cnBeta.COM

详情： <http://t.cn/EXYhOFM>

##### 监控拍下欧洲犯罪分子用挖掘机盗取 ATM 机

原来为了现金，人们真的可以不顾一切、铤而走险。4 月 15 日晚，北爱尔兰再次发生一起开挖掘机砸抢 ATM 取款机的事件，从 3 月至今，这已经是第 9 起。凿出 ATM 机后，犯罪分子用反铲将其放到实现准备好的卡车上，然后逃离，将挖掘机丢弃在现场。当然，实际上，挖掘机也是偷来的。

来源： 快科技

详情： <http://t.cn/EXYhQDE>

##### 俄罗斯：9 个月内 FB 和 Twitter 必须遵守数据保护法

据路透社报道，俄罗斯通信监管机构“联邦通信、信息技术与大众传媒监督局”局长<ruby> 亚历山大·扎罗夫 <rp>  （ </rp> <rt>  Alexander Zharov </rt> <rp>  ） </rp></ruby>今日称，Twitter 和 Facebook 还有 9 个月的时间来遵守俄罗斯的数据保护法。

来源： 新浪科技

详情： <http://t.cn/EXYhBoV>

（信息来源于网络，安华金和搜集整理）


杨镭访谈：UCloud 的技术价值观

Summary: 你问我相信什么样的事情？我们相信云计算是长远的。

你问我相信什么样的事情？我们相信云计算是长远的。

# 杨镭访谈：UCloud 的技术价值观

>
> 你问我相信什么样的事情？我们相信云计算是长远的。
>
>
>

去年，作为《[穿山甲专访](https://linux.cn/talk/interview/)》系列采访之一，我们曾经给大家分享过 [UCloud 技术副总裁杨镭先生的访谈](/article-10394-1.html)。那是我和杨镭先生的第一次见面，虽然采访时间不长，但是他务实严谨的风格，也给我留下了深刻的印象。因此，这次又特意预约了他的时间，专程去上海和他深入地聊了一些过去七年 UCloud 的技术价值观理念，并与这位从一线运维跌打滚爬出身的技术领袖的所思所想产生了深切的共鸣。

作为采访者，我也是一位做了二十多年互联网技术工作的老兵，虽然在私交上我和杨镭并不算熟悉，但是随着在互联网、技术和开源方面话题的展开，我们很快就聊得十分投机。

*【图：现场采访图】*

### 第一章 一位技术人员的成长史

>
> 话题是先从杨镭先生的技术背景和从业经历展开的。
>
>
>

**老王：**是否可以请先介绍一下你之前的技术背景和你的从业方面的情况？

**杨镭：**我结合 UCloud 整个技术发展的情况和我自己的情况跟你讲一下。

我的背景是这样的，我 2006 年加入盛大在线，刚入职时我是从最一线的运维人员开始做的，大概两年多以后逐渐地开始参加一些研发的工作，做一些运维的平台系统开发工作。

我跟老季（UCloud CEO 季昕华）是大概 2008 年认识的，他当时在管盛大在线。盛大在线提供运维平台来支撑各个游戏部门的业务，包括像盛大创新院的服务器，其实背后都是由盛大在线提供运维的。在之后做盛大云时，我们承接了非常多的业务部门的运维工作，而当时我就是在做平台技术方面的工作。

那时包括 OpenStack 才刚刚出现，AWS在国内刚被知晓，而我们那时候自己最早做虚拟化都是通过 VMWare 来做的。我们一直在关注云计算的发展。在 2011 年底，老季出来创业时，问我有没有兴趣出来，我就出来了。

我们当时认为，运维应该走到一线去产生业务价值，而云计算正好是可以让做运维、做技术的人能做产品的一个技术。云计算说白了是把以前运维的东西放在台前了，可以去赚钱了。

#### ?从一封未发出的邮件说起…

**杨镭：**当时我离开盛大的时候，写了一封邮件，但邮件我没发出去，一直存在我的草稿箱里，现在还在。其实我对盛大也是挺有感情的，整个平台都是我们一手搭建的，做了很多很多的事情，还是很辛苦的。

那封信大概的意思是说，云计算真的能解决很多问题，它能让服务器弹性地、不用关机去升级内存和 CPU……还有很多充满想象力的事情，其实这也是 UCloud 的初衷，是我们出来创业的初心，包括老季在内，其实也是这样的，在那个时候我们每次出问题，他都知道，可能是哪个机房的网线插反了，或者哪个服务器配置不小心没搞对，就像蝴蝶效应一样引发了严重的后果。

那时候出来，我们就是想把云这个事情做好。

#### 践行新技术，到处吃螃蟹

**杨镭：**因为我不是从研发出身的，当时 UCloud 创业的时候也不容易，我们当时除了三个创始人之外，还有五个研发技术人员。当时所有的运维、开发、底层的一些工作，这些我都参与过。

一开始我是做网络方面的研发，当时懂网络的人比较少，而我是做运维出身的。那时还没有 SDN 的概念，我们开始做云计算的时候，当时主流的虚拟化技术是 Xen，KVM 刚进入视野。我那时候很关心 Linux 内核方面的技术，我认为 KVM 一定是有发展的，所以就建议围绕KVM而不是Xen做底层虚拟化，我们一开始采用的 KVM 就是这样来的，结果在后面就少走了很多的弯路。

我主要的一个工作是虚拟机创建流程，这跟我自己之前的一些运维知识也比较匹配，在这方面我做的很多工作主要是优化。这里面其实有一个云计算产品的精髓，云计算产品如果要做好有两方面：

**一方面技术要做好**，它的可拓展性、稳定性要好，这是从研发的架构层面来看；**另一个方面，你要真正地懂这个产品**。

比如说云主机，你现在来看很多云计算产品的功能都已经习以为常了，但是 UCloud 一开始做了很多可能现在看起来不同寻常的事情。为什么会做这些事情呢？根本原因在于我们对于运维的理解比较深刻，所以我们敢先做这些功能。比如说当时有一个叫“重装系统”的功能，当时很多云服务商是没有这个功能的——那时候还很早，大约是 2012年的时候——这是我现在回过头来看一开始 UCloud 在那个阶段能冲出来的一个蛮重要的原因。

当时 SDN 也是这样的。在那个时候，很多技术和框架还没有标准的、可以参考的开源实现。比如说做虚拟化，你可以用 KVM 或 Xen 都能做 。因为那个时候我对网络方面一直很感兴趣，我以前主要是做运维，对 IPtables 很熟悉，排查过非常多复杂的现网故障，所以对于IPtables在生产环境中的使用有一定的把握。当时我们就是这样，去 AWS 的 EC2 虚拟机中抓包结合网络上的材料来分析背后的实现方案，然后用最有把握的工具链来实现。我们很快就做了一套自己的 SDN——当时还没有 Open vSwitch，它是 2013 年出来的——而我们当时就很大胆地采用了一个这样的东西。现在你看 UCloud 发布的技术文章、我们把技术实现方式都讲了出去，但是那个时候你只能自己猜和试验。

云计算的问题在于什么呢？它的产品是技术型的，客户用你的产品和服务的时候，你跟客户接触的人员是要懂技术的，尽管我们传统上认为这个事情很多还是商务上、销售上的事情。但是最终你要成就一个优质的客户，因为只有优质的客户，它的业务好，才会更多的买云服务。而优质的客户不光看客户关系的，看的还是你的技术、你的产品和你的人员是不是专业。因为这个原因，所以我后来在整个 UCloud 工作的过程里，不断地在往前走，去做技术支持。那时候我们很重视客户，我去做解决方案架构师，甚至有段时间在事业部参与销售工作，其实是因为被这个问题推着往前走的，包括我现在其实主要的精力也在负责产品以及整体的技术管理这块。

差不多我的技术历程就是这样的，这也是 UCloud 技术这几年发展的一个缩影。

### 第二章 技术观与价值观

**老王：**你作为 UCloud 的技术负责人，之前在 TIC 大会上我也听你讲到过 UCloud 的技术价值观的观点，我想了解一下在宏观上、较高层面上你是如何看待云计算技术的发展的，以及这里传达了什么样的价值观？

#### 「能力」——用工程能力解决技术问题

**杨镭：**接着前面的话题说。尽管在方向上是对的，但是我们还是走了很多小的弯路。我们有一个核心的能力，也是 UCloud 的核心技术能力，就是出现 BUG 或者架构缺陷的时候可以很快地在现网透明地升级解决掉——这实际上是对我们后端的无缝升级能力特别大的挑战。我自己的感受是，一开始讲要这样做时我其实不太相信能做到，但是在第一年，我们就做到了很多这样的事情。

我举个例子，当时我们产品上线以后，做弹性 IP 的实现，一开始很简单，我们搞几台设备，用IPtables实现了弹性IP和内网云主机的映射，放在两台机器上，有故障时候服务自动切换，一切都很美好。但是上线以后就开始发现问题，这两台机器不停地宕机，其实就是出现了 “Kernel Panic”。因为我们一开始只有两台核心网络接入设备，宕机一台就是 50% 的服务不可用，然后客户自然就炸了。但是那时候我们是解决不了这个 “Kernel Panic” 问题的，尽管懂一点内核知识，但是对内核代码层面的问题并不了解，我不知道为什么会发生，虽然我知道肯定是那个方向的问题。

我们搞不定怎么办呢？当时老季和我们 COO 经常在外面和客户解释网络故障的原因，例如中午和客户吃饭，边吃边告诉客户我们出了什么问题，会采取什么样的措施确保不再出现。而在后面，我们做了一件什么事儿呢？我们大概花了 2-3 天的时间，我们把两台集中式的服务器变成分布式的了，因为在物理机上崩溃了之后、服务器就挂了嘛，所以我们把这个服务放到虚拟机里去，每一台物理机上我们放两台。这样比如说到时候这里宕机了，这两台就可以及时切换，而且因为是虚拟机，切换速度很快。我们写了一个自动化地拉起所有服务的脚本。两三天就完成了，就把这个问题救活了。如果当时不解决，可能 UCloud 就挂了。

我们靠这个机制顶了大半年，直到我们的内核负责人来了。最后，发现是什么问题呢？确实是流量带宽控制那里有一个隐藏的 BUG，这个 BUG 其实连 CentOS 都没修复——因为我们用的是 CentOS——它没修复，而我们也搞不定。当时去查找 CentOS 的补丁列表，并没发现有这方面的补丁。到最后是怎么发现的呢？是上游后来发一个修复，但是这个修复 CentOS 一直都没放进来。

你看，这本身是一个非常深入的技术问题，但在创业的时候你不一定能解决，而我们通过架构的优化把它解决掉了，这实际上是 UCloud 从成立第一年开始到现在的一个核心能力。我自己经历过这个事情以后，再遇到什么事情都不怕了。

>
> 用架构、用工程能力去解决了一个隐藏很深的技术问题，以成本最小的方法解决问题。
>
>
>

**杨镭：这是一种变换的能力**。这是整个 UCloud 技术文化所贯穿的一点，先提供一个方案把它解决掉，让我们的服务品质不会降低。而要做到这一点，我觉得最难的是你需要对工程这个事情有深刻的理解。大家都会说工程师很重要、工程能力很重要，但是说实话，就像我开始来到 UCloud 的时候，我也会讲我是工程师，我很自信这一点，但是在我第一年遇到并解决了很多问题以后，我发现自己其实还不太懂。比如说，你看现在最近很火一些知识付费类课程，当我走到那个高度后我跟你说这个事情应该这样，应该那样。但如果你是才进入行业两三年的人，你是听不懂的，你并不知道怎么做，只能知道这句话应该是对的。这句话可能确实是对的，但是在日常工作中，你第一时间是反应不过来的，因为你不会深刻理解这句话。

一开始我们的工程能力就是很强的，因为这个基因来自于创始团队是当时最顶尖的工程团队。云计算天生对稳定的要求特别高，这是非常偏工程化，而这个能力对整个行业的影响是很深远的。

#### 「尝试」——当时胆子真的太大了，走得很前面

杨镭：当时我们遇到的挑战很多，我们一开始第一代用 **SDN 白盒交换机**的，当时没多想就上了，然后我们遇到了非常多的问题，最早还用过 Open Switch。其实 UCloud 前几年在技术上走的比较靠前，因为我们规模较小，决策更快，而且我们的技术团队胆子也很大，因为对技术团队很自信，对自己的工程能力很自信，所以敢尝试新的技术。比如说在网络层，我们有一套是用的 OVS，还有一套是用白盒交换机，而我们在两套之间还做了无缝地升级。我们的胆子大，所以那时候我们玩的都是新的技术。我还记得我在 2013 年出去做过 SDN 相关的演讲，现在看来当时胆子真的太大了，走得很前面。

那时候大家都知道是趋势，但是到底会怎么发展还没有人敢下定论，就像 Service Mesh 一样，现在绝大多数公司在做研究，在做概念验证，而我们已经在产品环境上跑了，我们走在很前面，有点孤独。

从我自己的角度看，我们那时候技术还是走得很快的。我举一个例子，比如现在有的云服务商要在两个地域之间打通，比如说从北京到香港，一般会告诉你要找第三方的网络供应商帮你打通。而 UCloud 是怎么做的呢？我们在底层有物理专线，用户只要在控制台点一下两边就通了。大概在相当早的时候，我们就提供了两个地域连接打通的功能。现在有的云服务商还需要几天才能为客户打通，而我们只要控制台上点一下，计费之后就通了，两个地域间的虚拟机就全部都互通了。

我记得那时候在这个功能的发布前夕，我们为此做了一整个通宵。在早上 7 点钟的时候，公司有人来上班了，我就在群里发了一条消息，说我们这个搞完了，大家都很激动，虽然现在两个地域之间的云计算服务器连起来是很正常的，但是在那个时候是没有人做的，那时候就感觉很有成就感。

其实好几个 UCloud 早期的研发同事，他们都有类似于跟我一样的事情，只是我当时的领域全部在网络上，而他们的领域在其它的方面。

>
> 整个云计算这个事情，它的核心其实是一个技术问题，最终想在这个地方走长远，本质上是要比技术能力的，一不小心就会落后。
>
>
>

我再举一个例子，我们在 2014 年下半年的时候招了第一个做 **DPDK 研发**的人，那时候我们知道 DPDK 技术发展前景还不错，所以我们招了这个岗位；而到了 2018 年的下半年，如果哪家有云产品而没有 DPDK 技术，你的产品是完全不具备商业竞争力的，你会卖得很贵，性能非常差，而友商会卖得很便宜，性能又很好，这个就是技术的红利。DPDK 的红利，但是如果你当时不投入的话，到现在可能会来不及。这是看三年的，所以我们现在在做 Serverless 方面的工作，投入是比较大的，但是如果我们不投入，可能三年以后或者四五年以后就出局了。

**杨镭：**我们还做了很多很有意思的事情。比如，很多用户买了云计算的虚拟机以后由于密码不严格被黑掉了，然后就变成肉鸡对外发大量数据包。这个事情很多云服务商的处理是很简单粗暴的，就是把你机器关掉，但客户其实是很受伤的。而我们当时不是这样做的。我们看，它不是对外发包吗？我们在宿主机上打开 TCP 来抓包，比如说 10 秒钟的包——因为不能长抓，长抓的量太大了——把它放到数据库里，然后我们去分析这个 TCP 包的特征、出入的比例，如果只是出站没有入站的话，那就肯定是被利用攻击了嘛。后来我们发现，所有被反射攻击利用的特征都是这样的。我们发现如果符合这个特征，就把这个虚拟机的网络给处理掉——我们会把它的网络给漂走，叫做隔离区，并没有把机器关掉，不会影响其他人，但是他的虚拟机自己还是可以登进去的。我们把这叫做最优选择，但是这个技术上很复杂。

实际上这不是纯技术的问题，这是一个理念，你要懂技术，还要懂业务，还要懂数据分析，还要设计一套东西把它串起来。

我们觉得自豪的一点不是说这个技术很厉害，而是我们的友商没人这样去做。我们做了好几件类似的事情，我们最终带动了行业的发展，客户在 UCloud 里体会到好处以后，他跑到别的云服务商说，你看 UCloud 这样做的，别的云服务商没办法，就被我们反逼提供这样的功能。而且这种功能不是说我们为了超越谁，而是我们自己想出来的。我们自己的研发人员自己关起门来说，对这种事情还是挺自豪，某种意义上我觉得这其实是种创新。

#### 「价值观」——我们相信云计算是长远的

**老王：**你刚才介绍了 UCloud 的情况，作为技术人员我也觉得很有心向往之的感觉。你觉得目前而言，你们这个四五百人的技术团队的优势主要是在工程能力上还是在你们团队上的技术文化上？

**杨镭：**从我这个角度，首先这是我们的精髓、文化或者说是技术文化。在这个问题上我们是不允许所谓的不纯粹的。所以在管理上，其实我们对刚才说的这几件事情，我们是要求很高的，如果你新来一个人你在文化上不认同，这个可能不适合你。

还有一方面，我们对整个技术的价值观就像上次我跟你聊的一样，我们会要求很高。我们除了自己不收集，还会帮用户把隐私保护好，告诉用户不要给我们任何的信息，而多数的公司是反过来的。我们大概会在 1 年多后完成大部分云上数据的加密，包括存量的数据。就像我们在去年的 TIC 大会上说的，这里会坚决投入，而且不是一个小的研发投入。因为说白了用户未必自己诉求那么强，很多时候没这个意识。而我们做这个事情因为有很多存量的云主机，几十万台的规模，我们要透明的、不影响性能、安全地放上去，而且密钥还要定期轮换，不能老是一把密钥，但是要轮换的时候又不能影响性能，所以在工程上是有挑战的和有技术深度的。我们做那么多的事情，说白了这就是价值观问题，我们真的对用户的数据安全非常重视。

>
> 树立了一个自己的独特价值观，而且为了这个价值观付出了代价、成本。
>
>
>

**杨镭：**尽管我们现在人不少了，但是我们产品线也很长，我们这点人也是不够的，我们现在做这个事情都在加班做，说白了时间不够，只能花时间解决这种问题。这种事情说白了是在价值观上，你做不做可能没有区别，但是我们认为真正长远地看这个事情是有意义的。眼前不会有太大的得益和收益，但是从长远的趋势看，从我们的信念看，保护隐私、保护数据安全其实是一个所有人都会走向的共同的目标，只是现在还看不到。

所有的这些事情其实都是归纳到一点，你相信什么样的事情？**我们相信云计算是长远的**。我们跟客户的合作不是做一锤子买卖，我们甚至于对客户都有要求，我们都要做得很优秀，我们要长远看这件事情值不值得做？当然值得做。为什么要看长远？因为我们对自己还是有信心的。其实你的现在是被过去决定的，你现在是为未来做的，所以我们现在在这个层面上想的事情都是三年、五年以后的。现在这些从大势来看，我们做的这些其实都是因为我们前三年做了一些事情，我们坚持了一些事情，因为做了那些事情，我们活了下来了。现在数据隐私这个事情也好，数据安全这个事情也好，或者是很多 Serverless 产品也好，我们相信在那个时代会更重要，所以我们坚持做这个。

### 第三章 尾声

**老王：**做这个专访，一方面我们希望看到真正的技术人现在具体做哪些事情。另外一方面我们希望让大家看到有这样的公司在做具体的事情，这些事情会不会对他们产生触动、启发甚至吸引他们去关注或者参与，这是我们希望能进一步做到的东西。

我觉得今天你婉拒了很多采访的邀约而接受我们的专访，我觉得也很荣幸。一方面我们可以持续性地关注你们这边的技术进展，我们把有些可能在你们看来不值得一提，但是在我们看起来可能非常重要或者更有传播和示范意义事件传播给大家。我觉得今天的采访让我确实地了解到了很多我原来没有想到或者没有观察到的地方。

**杨镭：**我从一个运维人员走到现在，现在做这个事情我才能发现原来是这样的。我觉得我能理解你，因为大家专业不同，我们正好每天在这里做事情，所以就往这个方面想。我希望这篇采访能让大家知道有些事情怎么做更好，只是我们走在了前面一点，我们是这个行业里的人，我们有经验，我们传播出去，这个我很开心，就 OK 了。

>
>
>
>
> “穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访，将为大家介绍中国开源领域中一些积极推动开源，谙熟开源思想的技术人，并辨析其思考、挖掘其动因，揭示其背后所发生的事情，为关注开源、有志于开源的企业和技术人标出一条路径。
>
>
> 取名为“穿山甲”寓意有二：取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用；穿山甲是珍稀保护动物，宣传公益。
>
>
>


小白观察：Let's Encrpt 正过渡到 ISRG Root

Summary: 非盈利加密组织开始逐渐过渡为 ISRG Root， 这标志着 Let’s Encrypt 也逐渐成为顶级 CA （实际上还不是，但 Let’s Encrypt 已经被各家所认可）

# 小白观察：Let's Encrpt 正过渡到 ISRG Root

### Big News

##### Let’s Encrpt 正过渡到 ISRG Root

非盈利加密组织 Let’s Encrypt 开始逐渐过渡为 ISRG Root， 这标志着它也逐渐成为顶级 CA （实际上还不是，但 Let’s Encrypt 已经被各家所认可）。[【Scotthelme.co.uk】](https://scotthelme.co.uk/lets-encrypt-to-transition-to-isrg-root/)

>
> Let’s Encrypt 推动了 HTTPS 的落地和推广，让过去成本极高的证书签发和部署成本不断降低。Let’s Encrypt 推动了 HTTPS 的落地和推广，让过去成本极高的证书签发和部署成本不断降低。对于整个行业来说，无疑是大功一件。 随着 Let’s Encrypt 的不断推广，终有一天， HTTPS 将成为标准。
>
>
>

### Quick News

##### Ubuntu 19.04 将使用 Linux 5.0 内核

Ubuntu 将在新的桌面版本 19.04 中使用新的 Linux Kernel 5.0。相比前代，提供了 USB 3.2 、Type-C、AMD Radeon RX Vega M GPU 的支持。[【ZDNet】](https://www.zdnet.com/article/ubuntu-19-04-comes-refreshed-with-the-linux-5-0-kernel/)

##### Google 将延长来自新开发者的应用核查

Google 表示，将加强对从未见过的开发者的核查，以避免“恶意”开发者。[【BBC】](https://www.bbc.com/news/technology-47950665)

##### Pinterest 即将进行首次公开募股

知名设计网站 Pinterest 将于本周进行首次公开募股。Pinterest 是一个能够让设计师分享作品、获得灵感的地方。[【CNET】](https://www.cnet.com/news/pinterests-ipo-shows-the-internet-isnt-always-as-awful-as-you-thought/)


如何在 Linux 中配置 sudo 访问权限

# 如何在 Linux 中配置 sudo 访问权限

<img src="content_image/album_201904_18_224237bhgeghjzryjrthce.jpg" alt="" title="">

Linux 系统中 root 用户拥有 Linux 中全部控制权力。Linux 系统中 root 是拥有最高权力的用户，可以在系统中实施任意的行为。

如果其他用户想去实施一些行为，不能为所有人都提供 root 访问权限。因为如果他或她做了一些错误的操作，没有办法去纠正它。

为了解决这个问题，有什么方案吗？

我们可以把 sudo 权限发放给相应的用户来克服这种情况。

`sudo` 命令提供了一种机制，它可以在不用分享 root 用户的密码的前提下，为信任的用户提供系统的管理权限。

他们可以执行大部分的管理操作，但又不像 root 一样有全部的权限。

### 什么是 sudo？

`sudo` 是一个程序，普通用户可以使用它以超级用户或其他用户的身份执行命令，是由安全策略指定的。

sudo 用户的访问权限是由 `/etc/sudoers` 文件控制的。

### sudo 用户有什么优点？

在 Linux 系统中，如果你不熟悉一个命令，`sudo` 是运行它的一个安全方式。

* Linux 系统在 `/var/log/secure` 和 `/var/log/auth.log` 文件中保留日志，并且你可以验证 sudo 用户实施了哪些行为操作。
* 每一次它都为当前的操作提示输入密码。所以，你将会有时间去验证这个操作是不是你想要执行的。如果你发觉它是不正确的行为，你可以安全地退出而且没有执行此操作。

基于 RHEL 的系统（如 Redhat (RHEL)、 CentOS 和 Oracle Enterprise Linux (OEL)）和基于 Debian 的系统（如 Debian、Ubuntu 和 LinuxMint）在这点是不一样的。

我们将会教你如何在本文中提及的两种发行版中执行该操作。

这里有三种方法可以应用于两个发行版本。

* 增加用户到相应的组。基于 RHEL 的系统，我们需要添加用户到 `wheel` 组。基于 Debain 的系统，我们添加用户到 `sudo` 或 `admin` 组。
* 手动添加用户到 `/etc/group` 文件中。
* 用 `visudo` 命令添加用户到 `/etc/sudoers` 文件中。

### 如何在 RHEL/CentOS/OEL 系统中配置 sudo 访问权限？

在基于 RHEL 的系统中（如 Redhat (RHEL)、 CentOS 和 Oracle Enterprise Linux (OEL)），使用下面的三个方法就可以做到。

#### 方法 1：在 Linux 中如何使用 wheel 组为普通用户授予超级用户访问权限？

wheel 是基于 RHEL 的系统中的一个特殊组，它提供额外的权限，可以授权用户像超级用户一样执行受到限制的命令。

注意，应该在 `/etc/sudoers` 文件中激活 `wheel` 组来获得该访问权限。

```
# grep -i wheel /etc/sudoers

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
# %wheel ALL=(ALL) NOPASSWD: ALL
```

假设我们已经创建了一个用户账号来执行这些操作。在此，我将会使用 `daygeek` 这个用户账号。

执行下面的命令，添加用户到 `wheel` 组。

```
# usermod -aG wheel daygeek
```

我们可以通过下面的命令来确定这一点。

```
# getent group wheel
wheel:x:10:daygeek
```

我将要检测用户 `daygeek` 是否可以访问属于 root 用户的文件。

```
$ tail -5 /var/log/secure
tail: cannot open /var/log/secure for reading: Permission denied
```

当我试图以普通用户身份访问 `/var/log/secure` 文件时出现错误。 我将使用 `sudo` 访问同一个文件，让我们看看这个魔术。

```
$ sudo tail -5 /var/log/secure
[sudo] password for daygeek:
Mar 17 07:01:56 CentOS7 sudo: daygeek : TTY=pts/0 ; PWD=/home/daygeek ; USER=root ; COMMAND=/bin/tail -5 /var/log/secure
Mar 17 07:01:56 CentOS7 sudo: pam_unix(sudo:session): session opened for user root by daygeek(uid=0)
Mar 17 07:01:56 CentOS7 sudo: pam_unix(sudo:session): session closed for user root
Mar 17 07:05:10 CentOS7 sudo: daygeek : TTY=pts/0 ; PWD=/home/daygeek ; USER=root ; COMMAND=/bin/tail -5 /var/log/secure
Mar 17 07:05:10 CentOS7 sudo: pam_unix(sudo:session): session opened for user root by daygeek(uid=0)
```

#### 方法 2：在 RHEL/CentOS/OEL 中如何使用 /etc/group 文件为普通用户授予超级用户访问权限？

我们可以通过编辑 `/etc/group` 文件来手动地添加用户到 `wheel` 组。

只需打开该文件，并在恰当的组后追加相应的用户就可完成这一点。

```
$ grep -i wheel /etc/group
wheel:x:10:daygeek,user1
```

在该例中，我将使用 `user1` 这个用户账号。

我将要通过在系统中重启 Apache httpd 服务来检查用户 `user1` 是不是拥有 sudo 访问权限。让我们看看这个魔术。

```
$ sudo systemctl restart httpd
[sudo] password for user1:

$ sudo grep -i user1 /var/log/secure
[sudo] password for user1:
Mar 17 07:09:47 CentOS7 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/systemctl restart httpd
Mar 17 07:10:40 CentOS7 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/systemctl restart httpd
Mar 17 07:12:35 CentOS7 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/grep -i httpd /var/log/secure
```

#### 方法 3：在 Linux 中如何使用 /etc/sudoers 文件为普通用户授予超级用户访问权限？

sudo 用户的访问权限是被 `/etc/sudoers` 文件控制的。因此，只需将用户添加到 `sudoers` 文件中 的 `wheel` 组下即可。

只需通过 `visudo` 命令将期望的用户追加到 `/etc/sudoers` 文件中。

```
# grep -i user2 /etc/sudoers
user2 ALL=(ALL) ALL
```

在该例中，我将使用 `user2` 这个用户账号。

我将要通过在系统中重启 MariaDB 服务来检查用户 `user2` 是不是拥有 sudo 访问权限。让我们看看这个魔术。

```
$ sudo systemctl restart mariadb
[sudo] password for user2:

$ sudo grep -i mariadb /var/log/secure
[sudo] password for user2:
Mar 17 07:23:10 CentOS7 sudo: user2 : TTY=pts/0 ; PWD=/home/user2 ; USER=root ; COMMAND=/bin/systemctl restart mariadb
Mar 17 07:26:52 CentOS7 sudo: user2 : TTY=pts/0 ; PWD=/home/user2 ; USER=root ; COMMAND=/bin/grep -i mariadb /var/log/secure
```

### 在 Debian/Ubuntu 系统中如何配置 sudo 访问权限？

在基于 Debian 的系统中（如 Debian、Ubuntu 和 LinuxMint），使用下面的三个方法就可以做到。

#### 方法 1：在 Linux 中如何使用 sudo 或 admin 组为普通用户授予超级用户访问权限？

`sudo` 或 `admin` 是基于 Debian 的系统中的特殊组，它提供额外的权限，可以授权用户像超级用户一样执行受到限制的命令。

注意，应该在 `/etc/sudoers` 文件中激活 `sudo` 或 `admin` 组来获得该访问权限。

```
# grep -i 'sudo\|admin' /etc/sudoers

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
```

假设我们已经创建了一个用户账号来执行这些操作。在此，我将会使用 `2gadmin` 这个用户账号。

执行下面的命令，添加用户到 `sudo` 组。

```
# usermod -aG sudo 2gadmin
```

我们可以通过下面的命令来确定这一点。

```
# getent group sudo
sudo:x:27:2gadmin
```

我将要检测用户 `2gadmin` 是否可以访问属于 root 用户的文件。

```
$ less /var/log/auth.log
/var/log/auth.log: Permission denied
```

当我试图以普通用户身份访问 `/var/log/auth.log` 文件时出现错误。 我将要使用 `sudo` 访问同一个文件，让我们看看这个魔术。

```
$ sudo tail -5 /var/log/auth.log
[sudo] password for 2gadmin:
Mar 17 20:39:47 Ubuntu18 sudo: 2gadmin : TTY=pts/0 ; PWD=/home/2gadmin ; USER=root ; COMMAND=/bin/bash
Mar 17 20:39:47 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by 2gadmin(uid=0)
Mar 17 20:40:23 Ubuntu18 sudo: pam_unix(sudo:session): session closed for user root
Mar 17 20:40:48 Ubuntu18 sudo: 2gadmin : TTY=pts/0 ; PWD=/home/2gadmin ; USER=root ; COMMAND=/usr/bin/tail -5 /var/log/auth.log
Mar 17 20:40:48 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by 2gadmin(uid=0)
```

或者，我们可以通过添加用户到 `admin` 组来执行相同的操作。

运行下面的命令，添加用户到 `admin` 组。

```
# usermod -aG admin user1
```

我们可以通过下面的命令来确定这一点。

```
# getent group admin
admin:x:1011:user1
```

让我们看看输出信息。

```
$ sudo tail -2 /var/log/auth.log
[sudo] password for user1:
Mar 17 20:53:36 Ubuntu18 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/usr/bin/tail -2 /var/log/auth.log
Mar 17 20:53:36 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by user1(uid=0)
```

#### 方法 2：在 Debian/Ubuntu 中如何使用 /etc/group 文件为普通用户授予超级用户访问权限？

我们可以通过编辑 `/etc/group` 文件来手动地添加用户到 `sudo` 组或 `admin` 组。

只需打开该文件，并在恰当的组后追加相应的用户就可完成这一点。

```
$ grep -i sudo /etc/group
sudo:x:27:2gadmin,user2
```

在该例中，我将使用 `user2` 这个用户账号。

我将要通过在系统中重启 Apache httpd 服务来检查用户 `user2` 是不是拥有 `sudo` 访问权限。让我们看看这个魔术。

```
$ sudo systemctl restart apache2
[sudo] password for user2:

$ sudo tail -f /var/log/auth.log
[sudo] password for user2:
Mar 17 21:01:04 Ubuntu18 systemd-logind[559]: New session 22 of user user2.
Mar 17 21:01:04 Ubuntu18 systemd: pam_unix(systemd-user:session): session opened for user user2 by (uid=0)
Mar 17 21:01:33 Ubuntu18 sudo: user2 : TTY=pts/0 ; PWD=/home/user2 ; USER=root ; COMMAND=/bin/systemctl restart apache2
```

#### 方法 3：在 Linux 中如何使用 /etc/sudoers 文件为普通用户授予超级用户访问权限？

sudo 用户的访问权限是被 `/etc/sudoers` 文件控制的。因此，只需将用户添加到 `sudoers` 文件中的 `sudo` 或 `admin` 组下即可。

只需通过 `visudo` 命令将期望的用户追加到 `/etc/sudoers` 文件中。

```
# grep -i user3 /etc/sudoers
user3 ALL=(ALL:ALL) ALL
```

在该例中，我将使用 `user3` 这个用户账号。

我将要通过在系统中重启 MariaDB 服务来检查用户 `user3` 是不是拥有 `sudo` 访问权限。让我们看看这个魔术。

```
$ sudo systemctl restart mariadb
[sudo] password for user3:

$ sudo tail -f /var/log/auth.log
[sudo] password for user3:
Mar 17 21:12:32 Ubuntu18 systemd-logind[559]: New session 24 of user user3.
Mar 17 21:12:49 Ubuntu18 sudo: user3 : TTY=pts/0 ; PWD=/home/user3 ; USER=root ; COMMAND=/bin/systemctl restart mariadb
Mar 17 21:12:49 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by user3(uid=0)
Mar 17 21:12:53 Ubuntu18 sudo: pam_unix(sudo:session): session closed for user root
Mar 17 21:13:08 Ubuntu18 sudo: user3 : TTY=pts/0 ; PWD=/home/user3 ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/auth.log
Mar 17 21:13:08 Ubuntu18 sudo: pam_unix(sudo:session): session opened for user root by user3(uid=0)
```

---

via: <https://www.2daygeek.com/how-to-configure-sudo-access-in-linux/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[liujing97](https://github.com/liujing97) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


思科、谷歌重新赋能多/混合云共同开发

# 思科、谷歌重新赋能多/混合云共同开发

>
> 思科、VMware、HPE 等公司开始采用了新的 Google Cloud Athos 云技术。
>
>
>

<img src="content_image/album_201904_19_000918bzf5mbz2tts2q7fz.jpg" alt="Thinkstock" title="Thinkstock">

思科与谷歌已扩展它们的混合云开发活动，以帮助其客户可以在从本地数据中心到公共云上的任何地方更轻松地搭建安全的多云以及混合云应用。

这次扩张围绕着谷歌被称作 Anthos 的新的开源混合云包展开，它是在这周的 Google Next 活动上推出的。Anthos 基于并取代了谷歌现有的谷歌云服务测试版。Anthos 将让客户们无须修改应用就可以在现有的本地硬件或公共云上运行应用。据谷歌说，它可以在[谷歌云平台](https://cloud.google.com/) (GCP) 与 [谷歌 Kubernetes 引擎](https://cloud.google.com/kubernetes-engine/) (GKE) 或者在数据中心中与 [GKE On-Prem](https://cloud.google.com/gke-on-prem/) 一同使用。谷歌说，Anthos 首次让客户们可以无需管理员和开发者了解不同的坏境和 API 就能从谷歌平台上管理在第三方云上（如 AWS 和 Azure）的工作负荷。

关键在于，Athos 提供了一个单一的托管服务，它使得客户们无须担心不同的环境或 API 就能跨云管理、部署工作负荷。

作为首秀的一部分，谷歌也宣布一个叫做 [Anthos Migrate](https://cloud.google.com/contact/) 的测试计划，它能够从本地环境或者其它云自动迁移虚拟机到 GKE 上的容器中。谷歌说，“这种独特的迁移技术使你无须修改原来的虚拟机或者应用就能以一种行云流水般的方式迁移、更新你的基础设施”。谷歌称它给予了公司按客户节奏转移本地应用到云环境的灵活性。

### 思科和谷歌

就思科来说，它宣布对 Anthos 的支持并承诺将它紧密集成进思科的数据中心技术中，例如 HyperFlex 超融合包、应用中心基础设施（思科的旗舰 SDN 方案）、SD-WAN 和 StealthWatch 云。思科说，无论是本地的还是在云端的，这次集成将通过自动更新到最新版本和安全补丁，给予一种一致的、云般的感觉。

“谷歌云在容器（Kubernetes）和<ruby> 服务网格 <rt>  service mesh </rt></ruby>（Istio）上的专业与它们在开发者社区的领导力，再加上思科的企业级网络、计算、存储和安全产品及服务，将为我们的顾客促成一次强强联合。”思科的云平台和解决方案集团资深副总裁 Kip Compton 这样[写道](https://blogs.cisco.com/news/next-phase-cisco-google-cloud)，“思科对于 Anthos 的集成将会帮助顾客跨本地数据中心和公共云搭建、管理多云/混合云应用，让他们专注于创新和灵活性，同时不会影响安全性或增加复杂性。”

### 谷歌云和思科

谷歌云工程副总裁 Eyal Manor [写道](https://cloud.google.com/blog/topics/partners/google-cloud-partners-with-cisco-on-hybrid-cloud-next19?utm_medium=unpaidsocial&utm_campaign=global-googlecloud-liveevent&utm_content=event-next) 通过思科对 Anthos 的支持，客户将能够：

* 受益于全托管服务例如 GKE 以及思科的超融合基础设施、网络和安全技术；
* 在企业数据中心和云中一致运行
* 在企业数据中心使用云服务
* 用最新的云技术更新本地基础设施

思科和谷歌从 2017 年 10 月就在紧密合作，当时他们表示正在开发一个能够连接本地基础设施和云环境的开放混合云平台。该套件，即[思科为谷歌云打造的混合云平台](https://cloud.google.com/cisco/)，大致在 2018 年 9 月上市。它使得客户们能通过谷歌云托管 Kubernetes 容器开发企业级功能，包含思科网络和安全技术以及来自 Istio 的服务网格监控。

谷歌说开源的 Istio 的容器和微服务优化技术给开发者提供了一种一致的方式，通过服务级的 mTLS （双向传输层安全）身份验证访问控制来跨云连接、保护、管理和监听微服务。因此，客户能够轻松实施新的可移植的服务，并集中配置和管理这些服务。

思科不是唯一宣布对 Anthos 支持的供应商。谷歌表示，至少 30 家大型合作商包括 [VMware](https://blogs.vmware.com/networkvirtualization/2019/04/vmware-and-google-showcase-hybrid-cloud-deployment.html/)、[Dell EMC](https://www.dellemc.com/en-us/index.htm)、[HPE](https://www.hpe.com/us/en/newsroom/blog-post/2019/04/hpe-and-google-cloud-join-forces-to-accelerate-innovation-with-hybrid-cloud-solutions-optimized-for-containerized-applications.html)、Intel 和联想致力于为他们的客户在它们自己的超融合基础设施上提供 Anthos 服务。

---

via: <https://www.networkworld.com/article/3388218/cisco-google-reenergize-multicloudhybrid-cloud-joint-development.html>

作者：[Michael Cooney](https://www.networkworld.com/author/Michael-Cooney/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[tomjlw](https://github.com/tomjlw) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：黑客网上出售伊朗间谍部队的黑客工具源代码

# 每日安全资讯：黑客网上出售伊朗间谍部队的黑客工具源代码

2017 年，黑客组织 Shadow Brokers 对外宣称他们已经成功入侵了美国国家安全局（NSA）下属的黑客组织 Equation Group，下载了后者大量的攻击工具并在网上发起拍卖。而现在又有黑客发布了类似的黑客工具，不过这次来自于伊朗精英网络间谍部队之一，在业内被称之为 APT34、Oilrig 或 HelixKitten。

[](https://static.cnbetacdn.com/article/2019/0418/aea4a764b5c6bd8.jpg)

尽管本次发布的黑客工具并没有 2017 年 NSA 泄露的黑客工具那么复杂，但它们依然是非常危险的。这些黑客工具自今年 3 月中旬开始在网络上发布，以 Lab Dookhtegan 这个假名在 Telegram 频道上进行出售。

[](https://static.cnbetacdn.com/article/2019/0418/c136b1dbe6c1db7.jpg)

一些网络安全专家已经确认了这些工具的真实性。 Alphabet 的网络安全部门 Chronicle 今天早些时候向 ZDNet 证实了这一点。在今天发布的 Telegram 频道中，黑客共泄露了 6 个黑客工具的源代码，此外还有部分来自活跃后端面板的内容以及收集的受害者数据。

这6个黑客工具分别为：

* Glimpse（基于 PowerShell 的新版木马，Palo Alto Networks 命名为 BondUpdater）
* PoisonFrog（旧版 BondUpdater）
* HyperShell（称之为 TwoFace 的 Palo Alto Networks 网络外壳）
* HighShell（另一个 Web shell）
* Fox Panel（钓鱼工具包）
* Webmask（DNS 隧道，DNSpionage 背后的主要工具）

来源：cnBeta.COM

### 更多资讯

##### 追剧有险 黑客利用《权利的游戏》勒索诈骗

追了八年的《权力的游戏》在 4 月 14 日迎来了最终季，朋友圈有人感叹，刚追剧时候自己还不是个“日天日地日卫星”的程序员，拥有茂密的头发，现在……这都不重要，剧王终章上映，前七季人物的关系，经典场景，甚至是床戏都被拿来一一盘点，剧迷们纷纷分享熟肉资源，在一本正经工作群里也出现了这种场面。

来源： 雷锋网

详情： <http://t.cn/EX3xWrt>

##### 美国学生使用 USB Killer 毁掉了数万美元的学校电脑

纽约 Saint Rose 学院的一名前学生承认使用 USB Killer 设备毁掉数万美元学校电脑的指控。USB Killer 设备设计通过释放负电涌毁坏计算机主板电路。27 岁的 Vishwanath Akuthota 面临最高 10 年的监禁和 25 万美元的罚款（大多数情况下不会面临最高刑期），他于 2 月 22 日在北卡罗来纳州被捕。

来源： solidot.org

详情： <http://t.cn/EX3xRjJ>

##### 微软动作太慢：0patch 团队抢先发布 Win10 IE 安全漏洞修复补丁

几天前，外媒爆料称 Internet Explorer 存在一个可能被黑客利用的安全漏洞。借助某些文件处理中的 bug，它可以窃取用户的文件。最令人害怕的是，就算你不是 IE 浏览器的用户，也会受到这个漏洞的影响。鉴于微软没能第一时间发布漏洞修复补丁，坐不住的第三方已经抢先推出了针对 Windows 10 平台的小补丁（micro-patch）。

来源： cnBeta.COM

详情： <http://t.cn/EX3xrkH>

##### 四部门抓紧推进 App 违法收集使用个人信息专项治理

中央网信办、工信部、公安部、市场监管总局指导成立 App 违法违规收集使用个人信息专项治理工作组以来，组织开展的 App 收集使用个人信息评估工作取得阶段性进展。记者从工作组负责人处获悉，截至 4 月 16 日，举报信息超过 3480 条，涉及 1300 余款 App。对于 30 款用户量大、问题严重的 App，工作组已向其运营者发送了整改通知。

来源： 新华网

详情： <http://t.cn/EX3JPo7>

（信息来源于网络，安华金和搜集整理）


小白观察：Ubuntu 19.04 发布

桌面右键菜单及部分仍然是英文显示的。

来自云南昆明的 Internet Explorer 11.0|Windows 10 用户

# 小白观察：Ubuntu 19.04 发布

### Big News

##### Ubuntu 19.04 发布

Ubuntu 19.04 是 Ubuntu 最新的桌面端操作系统。目前已经开放了下载。 此版本不是 LTS 版本，最新的 LTS 版本依然是 Ubuntu 18.04.2 。[【Ubuntu】](https://www.ubuntu.com/)

>
> 新的 Ubuntu 系统提供了更好的用户体验和操作的节奏，你可以现在安装 Ubuntu 19.04 来体验 Gnome 3.32 、Linux Kernel 5.X 以及性能的提升。
>
>
>

### Quick News

##### 微软收购了设计了 ThreadX 的 Express Logic 公司

Express Logic 公司于 1996 年创建，至今已有 23 年，其产品 ThreadX RTos部署超过了超过62亿个设备。[【Express Logic】](https://rtos.com/expresslogic-joins-microsoft/)

##### Zoom 公司开盘价为 $65，超过发售价 $36

Zoom.us 是业界领先的视频会议解决方案提供商。Zoom 公司本周四在美国纳斯达克市场上交易，股票代码为“ZM”。[【ZDnet】](https://www.zdnet.com/article/zooms-ipo-opens-at-an-eye-popping-65-per-share/)

##### 中国在山东建立高速公路的自动驾驶汽车测试场

齐鲁交通发展集团有限公司发言人表示，该公司正在利用现有高速公路的一部分在山东省东部建立试验场地，这条26公里长的试验场地于 4 月 12 日开始施工，预计将于 9 月开始运营。[【The Star】](https://www.thestar.com.my/tech/tech-news/2019/04/18/china-builds-site-to-test-autonomous-cars-in-highway-conditions/)


如何在 Linux 上安装并启用 Flatpak 支持？

Summary: Flatpak 提供了一种通用的包封装格式，可以在任何 Linux 发行版中使用。它提供了一个沙箱（隔离的）环境来运行应用程序，不会影响其他应用程序和发行版核心软件包。

# 如何在 Linux 上安装并启用 Flatpak 支持？

<img src="content_image/album_201904_20_000836zn7s4011z4qs72ss.jpg" alt="" title="">

目前，我们都在使用 Linux 发行版的官方软件包管理器来安装所需的软件包。

在 Linux 中，它做得很好，没有任何问题。（它不打折扣地很好的完成了它应该做的工作）

但在一些方面它也有一些限制，所以会让我们考虑其他替代解决方案来解决。

是的，默认情况下，我们不能从发行版官方软件包管理器获取到最新版本的软件包，因为这些软件包是在构建当前 OS 版本时构建的。它们只会提供安全更新，直到下一个主要版本发布。

那么，这种情况有什么解决办法吗？是的，我们有多种解决方案，而且我们大多数人已经开始使用其中的一些了。

有些什么呢，它们有什么好处？

* **对于基于 Ubuntu 的系统：** PPA
* **对于基于 RHEL 的系统：** [EPEL 仓库](https://www.2daygeek.com/install-enable-epel-repository-on-rhel-centos-scientific-linux-oracle-linux/)、[ELRepo 仓库](https://www.2daygeek.com/install-enable-elrepo-on-rhel-centos-scientific-linux/)、[nux-dextop 仓库](https://www.2daygeek.com/install-enable-nux-dextop-repository-on-centos-rhel-scientific-linux/)、[IUS 社区仓库](https://www.2daygeek.com/install-enable-ius-community-repository-on-rhel-centos/)、[RPMfusion 仓库](https://www.2daygeek.com/install-enable-rpm-fusion-repository-on-centos-fedora-rhel/) 和 [Remi 仓库](https://www.2daygeek.com/install-enable-remi-repository-on-centos-rhel-fedora/)

使用上面的仓库，我们将获得最新的软件包。这些软件包通常都得到了很好的维护，还有大多数社区的推荐。但这些只是建议，可能并不总是安全的。

近年来，出现了一下通用软件包封装格式，并且得到了广泛的应用。

* **Flatpak**：它是独立于发行版的包格式，主要贡献者是 Fedora 项目团队。大多数主要的 Linux 发行版都采用了 Flatpak 框架。
* **Snaps**：Snappy 是一种通用的软件包封装格式，最初由 Canonical 为 Ubuntu 手机及其操作系统设计和构建的。后来，更多的发行版都接纳了它。
* **AppImage**：AppImage 是一种可移植的包格式，可以在不安装和不需要 root 权限的情况下运行。

我们之前已经介绍过 [Snap 包管理器和包封装格式](https://www.2daygeek.com/linux-snap-package-manager-ubuntu/)。今天我们将讨论 Flatpak 包封装格式。

### 什么是 Flatpak？

Flatpak（以前称为 X Desktop Group 或 xdg-app）是一个软件实用程序。它提供了一种通用的包封装格式，可以在任何 Linux 发行版中使用。

它提供了一个沙箱（隔离的）环境来运行应用程序，不会影响其他应用程序和发行版核心软件包。我们还可以安装并运行不同版本的软件包。

Flatpak 的一个缺点是不像 Snap 和 AppImage 那样支持服务器操作系统，它只在少数桌面环境下工作。

比如说，如果你想在系统上运行两个版本的 php，那么你可以轻松安装并按照你的意愿运行。

这就是现在通用包封装格式非常有名的地方。

### 如何在 Linux 中安装 Flatpak？

大多数 Linux 发行版官方仓库都提供 Flatpak 软件包。因此，可以使用它们来进行安装。

对于 Fedora 系统，使用 [DNF 命令](https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/) 来安装 flatpak。

```
$ sudo dnf install flatpak
```

对于 Debian/Ubuntu 系统，使用 [APT-GET 命令](https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/) 或 [APT 命令](https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/) 来安装 flatpak。

```
$ sudo apt install flatpak
```

对于较旧的 Ubuntu 版本：

```
$ sudo add-apt-repository ppa:alexlarsson/flatpak
$ sudo apt update
$ sudo apt install flatpak
```

对于基于 Arch Linux 的系统，使用 [Pacman 命令](https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/) 来安装 flatpak。

```
$ sudo pacman -S flatpak
```

对于 RHEL/CentOS 系统，使用 [YUM 命令](https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/) 来安装 flatpak。

```
$ sudo yum install flatpak
```

对于 openSUSE Leap 系统，使用 [Zypper 命令](https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/) 来安装 flatpak。

```
$ sudo zypper install flatpak
```

### 如何在 Linux 上启用 Flathub 支持？

Flathub 网站是一个应用程序商店，你可以在其中找到 flatpak 软件包。它是一个中央仓库，所有的 flatpak 应用程序都可供用户使用。

运行以下命令在 Linux 上启用 Flathub 支持：

```
$ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
```

为 GNOME 桌面环境安装 Software Flatpak 插件。

```
$ sudo apt install gnome-software-plugin-flatpak
```

此外，如果你使用的是 GNOME 桌面环境，则可以启用 GNOME 仓库。它包含所有 GNOME 核心应用程序。

```
$ wget https://sdk.gnome.org/keys/gnome-sdk.gpg
$ sudo flatpak remote-add --gpg-import=gnome-sdk.gpg --if-not-exists gnome-apps https://sdk.gnome.org/repo-apps/
```

### 如何列出已配置的 flakpak 仓库？

如果要查看系统上已配置的 flatpak 仓库列表，运行以下命令：

```
$ flatpak remotes
Name       Options
flathub    system
gnome-apps system
```

### 如何列出已配置仓库中的可用软件包？

如果要查看已配置仓库中的可用软件包的列表（它将显示所有软件包，如应用程序和运行环境），运行以下命令：

```
$ flatpak remote-ls | head -10

org.freedesktop.GlxInfo gnome-apps
org.gnome.Books gnome-apps
org.gnome.Builder   gnome-apps
org.gnome.Calculator    gnome-apps
org.gnome.Calendar  gnome-apps
org.gnome.Characters    gnome-apps
org.gnome.Devhelp   gnome-apps
org.gnome.Dictionary    gnome-apps
org.gnome.Documents gnome-apps
org.gnome.Epiphany  gnome-apps
```

仅列出应用程序：

```
$ flatpak remote-ls --app
```

列出特定的仓库应用程序：

```
$ flatpak remote-ls gnome-apps
```

### 如何从 flatpak 安装包？

运行以下命令从 flatpak 仓库安装软件包：

```
$ sudo flatpak install flathub com.github.muriloventuroso.easyssh

Required runtime for com.github.muriloventuroso.easyssh/x86_64/stable (runtime/org.gnome.Platform/x86_64/3.30) found in remote flathub
Do you want to install it? [y/n]: y
Installing in system:
org.gnome.Platform/x86_64/3.30                          flathub 4e93789f42ac
org.gnome.Platform.Locale/x86_64/3.30                   flathub 6abf9c0e2b72
org.freedesktop.Platform.html5-codecs/x86_64/18.08      flathub d6abde36c0be
com.github.muriloventuroso.easyssh/x86_64/stable        flathub 337db43043d2
  permissions: ipc, network, wayland, x11, dri
  file access: home, xdg-run/dconf, ~/.config/dconf:ro
  dbus access: ca.desrt.dconf
com.github.muriloventuroso.easyssh.Locale/x86_64/stable flathub af837356b222
Is this ok [y/n]: y
Installing: org.gnome.Platform/x86_64/3.30 from flathub
[####################] 1 metadata, 14908 content objects fetched; 228018 KiB transferred in 364 seconds
Now at 4e93789f42ac.
Installing: org.gnome.Platform.Locale/x86_64/3.30 from flathub
[####################] 4 metadata, 1 content objects fetched; 16 KiB transferred in 2 seconds
Now at 6abf9c0e2b72.
Installing: org.freedesktop.Platform.html5-codecs/x86_64/18.08 from flathub
[####################] 26 metadata, 131 content objects fetched; 2737 KiB transferred in 8 seconds
Now at d6abde36c0be.
Installing: com.github.muriloventuroso.easyssh/x86_64/stable from flathub
[####################] 191 metadata, 3633 content objects fetched; 24857 KiB transferred in 117 seconds
Now at 337db43043d2.
Installing: com.github.muriloventuroso.easyssh.Locale/x86_64/stable from flathub
[####################] 3 metadata, 1 content objects fetched; 14 KiB transferred in 2 seconds
Now at af837356b222.
```

所有已安装的应用程序都将放在以下位置：

```
$ ls /var/lib/flatpak/app/
com.github.muriloventuroso.easyssh
```

### 如何运行已安装的应用程序？

运行以下命令以启动所需的应用程序，确保替换为你的应用程序名称：

```
$ flatpak run com.github.muriloventuroso.easyssh
```

### 如何查看已安装的应用程序？

运行以下命令来查看已安装的应用程序：

```
$ flatpak list
Ref                                                Options
com.github.muriloventuroso.easyssh/x86_64/stable   system,current
org.freedesktop.Platform.html5-codecs/x86_64/18.08 system,runtime
org.gnome.Platform/x86_64/3.30                     system,runtime
```

### 如何查看有关已安装应用程序的详细信息？

运行以下命令以查看有关已安装应用程序的详细信息：

```
$ flatpak info com.github.muriloventuroso.easyssh

Ref: app/com.github.muriloventuroso.easyssh/x86_64/stable
ID: com.github.muriloventuroso.easyssh
Arch: x86_64
Branch: stable
Origin: flathub
Collection ID: org.flathub.Stable
Date: 2019-01-08 13:36:32 +0000
Subject: Update com.github.muriloventuroso.easyssh.json (cd35819c)
Commit: 337db43043d282c74d14a9caecdc780464b5e526b4626215d534d38b0935049f
Parent: 6e49096146f675db6ecc0ce7c5347b4b4f049b21d83a6cc4d01ff3f27c707cb6
Location: /var/lib/flatpak/app/com.github.muriloventuroso.easyssh/x86_64/stable/337db43043d282c74d14a9caecdc780464b5e526b4626215d534d38b0935049f
Installed size: 100.0 MB
Runtime: org.gnome.Platform/x86_64/3.30
Sdk: org.gnome.Sdk/x86_64/3.30
```

### 如何更新已安装的应用程序？

运行以下命令将已安装的应用程序更新到最新版本：

```
$ flatpak update
```

对于特定应用程序，使用以下格式：

```
$ flatpak update com.github.muriloventuroso.easyssh
```

### 如何移除已安装的应用程序？

运行以下命令来移除已安装的应用程序：

```
$ sudo flatpak uninstall com.github.muriloventuroso.easyssh
```

进入 man 页面以获取更多细节和选项：

```
$ flatpak --help
```

---

via: <https://www.2daygeek.com/how-to-install-and-enable-flatpak-support-on-linux/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Vim 入门：基础

Summary: 为工作或者新项目学习足够的 Vim 知识。

文章不错，编辑的也不错，汉字上面有英文提示是如何实现的，

<ruby>分割<rt>split</rt></ruby>

厉害了

好

确实是很实用的基础功能，很适合新手上手，给一个赞，支持用心编辑的文章。

ADFA

为工作或者新项目学习足够的 Vim 知识。

# Vim 入门：基础

>
> 为工作或者新项目学习足够的 Vim 知识。
>
>
>

我还清晰地记得我第一次接触 Vim 的时候。那时我还是一名大学生，计算机学院的机房里都装着 Ubuntu 系统。尽管我在上大学前也曾接触过不同的 Linux 发行版（比如 RHEL —— Red Hat 在百思买出售它的 CD），但这却是我第一次要在日常中频繁使用 Linux 系统，因为我的课程要求我这样做。当我开始使用 Linux 时，正如我的前辈和将来的后继者们一样，我感觉自己像是一名“真正的程序员”了。

*真正的程序员，来自 [xkcd](https://xkcd.com/378/)*

学生们可以使用像 [Kate](https://kate-editor.org) 一样的图形文本编辑器，这也安装在学校的电脑上了。对于那些可以使用 shell 但不习惯使用控制台编辑器的学生，最流行的选择是 [Nano](https://www.nano-editor.org)，它提供了很好的交互式菜单和类似于 Windows 图形文本编辑器的体验。

我有时会用 Nano，但当我听说 [Vi/Vim](https://www.vim.org) 和 [Emacs](https://www.gnu.org/software/emacs) 能做一些很棒的事情时我决定试一试它们（主要是因为它们看起来很酷，而且我也很好奇它们有什么特别之处）。第一次使用 Vim 时吓到我了 —— 我不想搞砸任何事情！但是，一旦我掌握了它的诀窍，事情就变得容易得多，我就可以欣赏这个编辑器的强大功能了。至于 Emacs，呃，我有点放弃了，但我很高兴我坚持和 Vim 在一起。

在本文中，我将介绍一下 Vim（基于我的个人经验），这样你就可以在 Linux 系统上用它来作为编辑器使用了。这篇文章不会让你变成 Vim 的专家，甚至不会触及 Vim 许多强大功能的皮毛。但是起点总是很重要的，我想让开始的经历尽可能简单，剩下的则由你自己去探索。

### 第 0 步：打开一个控制台窗口

在使用 Vim 前，你需要做一些准备工作。在 Linux 操作系统打开控制台终端。（因为 Vim 也可以在 MacOS 上使用，Mac 用户也可以使用这些说明）。

打开终端窗口后，输入 `ls` 命令列出当前目录下的内容。然后，输入 `mkdir Tutorial` 命令创建一个名为 `Tutorial` 的新目录。通过输入 `cd Tutorial` 来进入该目录。

这就是全部的准备工作。现在是时候转到有趣的部分了——开始使用 Vim。

### 第 1 步：创建一个 Vim 文件和不保存退出

还记得我一开始说过我不敢使用 Vim 吗？我当时在害怕“如果我改变了一个现有的文件，把事情搞砸了怎么办？”毕竟，一些计算机科学作业要求我修改现有的文件。我想知道：如何在不保存更改的情况下打开和关闭文件？

好消息是你可以使用相同的命令在 Vim 中创建或打开文件：`vim <FILE_NAME>`，其中 `<FILE_NAME>` 表示要创建或修改的目标文件名。让我们通过输入 `vim HelloWorld.java` 来创建一个名为 `HelloWorld.java` 的文件。

你好，Vim！现在，讲一下 Vim 中一个非常重要的概念，可能也是最需要记住的：Vim 有多种模式，下面是 Vim 基础中需要知道的的三种：

| 模式 | 描述 |
| --- | --- |
| 正常模式 | 默认模式，用于导航和简单编辑 |
| 插入模式 | 用于直接插入和修改文本 |
| 命令行模式 | 用于执行如保存，退出等命令 |

Vim 也有其他模式，例如可视模式、选择模式和命令模式。不过上面的三种模式对我们来说已经足够用了。

你现在正处于正常模式，如果有文本，你可以用箭头键移动或使用其他导航键（将在稍后看到）。要确定你正处于正常模式，只需按下 `esc` (Escape）键即可。

>
> **提示：** `Esc` 切换到正常模式。即使你已经在正常模式下，点击 `Esc` 只是为了练习。
>
>
>

现在，有趣的事情发生了。输入 `:` （冒号键）并接着 `q!` （完整命令：`:q!`）。你的屏幕将显示如下：

在正常模式下输入冒号会将 Vim 切换到命令行模式，执行 `:q!` 命令将退出 Vim 编辑器而不进行保存。换句话说，你放弃了所有的更改。你也可以使用 `ZQ` 命令；选择你认为更方便的选项。

一旦你按下 `Enter` （回车），你就不再在 Vim 中。重复练习几次来掌握这条命令。熟悉了这部分内容之后，请转到下一节，了解如何对文件进行更改。

### 第 2 步：在 Vim 中修改并保存

通过输入 `vim HelloWorld.java` 和回车键来再次打开这个文件。你可以在插入模式中修改文件。首先，通过 `Esc` 键来确定你正处于正常模式。接着输入 `i` 来进入插入模式（没错，就是字母 **i**）。

在左下角，你将看到 `-- INSERT --`，这标志着你这处于插入模式。

写一些 Java 代码。你可以写任何你想写的，不过这也有一份你可以参照的例子。你的屏幕将显示如下：

```
public class HelloWorld {
  public static void main([String][11][] args) {
  }
}
```

非常漂亮！注意文本是如何在 Java 语法中高亮显示的。因为这是个 Java 文件，所以 Vim 将自动检测语法并高亮颜色。

保存文件：按下 `Esc` 来退出插入模式并进入命令行模式。输入 `:` 并接着 `x!` （完整命令：`:x!`），按回车键来保存文件。你也可以输入 `wq` 来执行相同的操作。

现在，你知道了如何使用插入模式输入文本并使用以下命令保存文件：`:x!` 或者 `:wq`。

### 第 3 步：Vim 中的基本导航

虽然你总是可以使用上箭头、下箭头、左箭头和右箭头在文件中移动，但在一个几乎有数不清行数的大文件中，这将是非常困难的。能够在一行中跳跃光标将会是很有用的。虽然 Vim 提供了不少很棒的导航功能，不过在一开始，我想向你展示如何在 Vim 中到达某一特定的行。

单击 `Esc` 来确定你处于正常模式，接着输入 `:set number` 并键入回车。

瞧！你现在可以在每一行的左侧看到行号。

好，你也许会说，“这确实很酷，不过我该怎么跳到某一行呢？”再一次的，确认你正处于正常模式。接着输入 `:<LINE_NUMBER>`，在这里 `<LINE_NUMBER>` 是你想去的那一行的行数。按下回车键来试着移动到第二行。

```
:2
```

现在，跳到第三行。

但是，假如你正在处理一个一千多行的文件，而你正想到文件底部。这该怎么办呢？确认你正处于正常模式，接着输入 `:$` 并按下回车。

你将来到最后一行！

现在，你知道如何在行间跳跃了，作为补充，我们来学一下如何移动到一行的行尾。确认你正处于有文本内容的一行，如第三行，接着输入 `$`。

你现在来到这行的最后一个字节了。在此示例中，高亮左大括号以显示光标移动到的位置，右大括号被高亮是因为它是高亮的左大括号的匹配字符。

这就是 Vim 中的基本导航功能。等等，别急着退出文件。让我们转到 Vim 中的基本编辑。不过，你可以暂时顺便喝杯咖啡或茶休息一下。

### 第 4 步：Vim 中的基本编辑

现在，你已经知道如何通过跳到想要的一行来在文件中导航，你可以使用这个技能在 Vim 中进行一些基本编辑。切换到插入模式。（还记得怎么做吗？是不是输入 `i` ？）当然，你可以使用键盘逐一删除或插入字符来进行编辑，但是 Vim 提供了更快捷的方法来编辑文件。

来到第三行，这里的代码是 `public static void main(String[] args) {`。双击 `d` 键，没错，就是 `dd`。如果你成功做到了，你将会看到，第三行消失了，剩下的所有行都向上移动了一行。（例如，第四行变成了第三行）。

这就是<ruby> 删除 <rt>  delete </rt></ruby>命令。不要担心，键入 `u`，你会发现这一行又回来了。喔，这就是<ruby> 撤销 <rt>  undo </rt></ruby>命令。

下一课是学习如何复制和粘贴文本，但首先，你需要学习如何在 Vim 中突出显示文本。按下 `v` 并向左右移动光标来选择或反选文本。当你向其他人展示代码并希望标识你想让他们注意到的代码时，这个功能也非常有用。

来到第四行，这里的代码是 `System.out.println("Hello, Opensource");`。高亮这一行的所有内容。好了吗？当第四行的内容处于高亮时，按下 `y`。这就叫做<ruby> 复制 <rt>  yank </rt></ruby>模式，文本将会被复制到剪贴板上。接下来，输入 `o` 来创建新的一行。注意，这将让你进入插入模式。通过按 `Esc` 退出插入模式，然后按下 `p`，代表<ruby> 粘贴 <rt>  paste </rt></ruby>。这将把复制的文本从第三行粘贴到第四行。

作为练习，请重复这些步骤，但也要修改新创建的行中的文字。此外，请确保这些行对齐工整。

>
> **提示：** 您需要在插入模式和命令行模式之间来回切换才能完成此任务。
>
>
>

当你完成了，通过 `x!` 命令保存文件。以上就是 Vim 基本编辑的全部内容。

### 第 5 步：Vim 中的基本搜索

假设你的团队领导希望你更改项目中的文本字符串。你该如何快速完成任务？你可能希望使用某个关键字来搜索该行。

Vim 的搜索功能非常有用。通过 `Esc` 键来进入命令模式，然后输入冒号 `:`，我们可以通过输入 `/<SEARCH_KEYWORD>` 来搜索关键词， `<SEARCH_KEYWORD>` 指你希望搜索的字符串。在这里，我们搜索关键字符串 `Hello`。在下面的图示中没有显示冒号，但这是必须输入的。

但是，一个关键字可以出现不止一次，而这可能不是你想要的那一个。那么，如何找到下一个匹配项呢？只需按 `n` 键即可，这代表<ruby> 下一个 <rt>  next </rt></ruby>。执行此操作时，请确保你没有处于插入模式！

### 附加步骤：Vim 中的分割模式

以上几乎涵盖了所有的 Vim 基础知识。但是，作为一个额外奖励，我想给你展示 Vim 一个很酷的特性，叫做<ruby> 分割 <rt>  split </rt></ruby>模式。

退出 `HelloWorld.java` 并创建一个新文件。在控制台窗口中，输入 `vim GoodBye.java` 并按回车键来创建一个名为 `GoodBye.java` 的新文件。

输入任何你想输入的让内容，我选择输入 `Goodbye`。保存文件（记住你可以在命令模式中使用 `:x!` 或者 `:wq`）。

在命令模式中，输入 `:split HelloWorld.java`，来看看发生了什么。

Wow！快看！ `split` 命令将控制台窗口水平分割成了两个部分，上面是 `HelloWorld.java`，下面是 `GoodBye.java`。该怎么能在窗口之间切换呢？ 按住 `Control` 键（在 Mac 上）或 `Ctrl` 键（在 PC 上），然后按下 `ww` (即双击 `w` 键)。

作为最后一个练习，尝试通过复制和粘贴 `HelloWorld.java` 来编辑 `GoodBye.java` 以匹配下面屏幕上的内容。

保存两份文件，成功！

>
> **提示 1：** 如果你想将两个文件窗口垂直分割，使用 `:vsplit <FILE_NAME>` 命令。（代替 `:split <FILE_NAME>` 命令，`<FILE_NAME>` 指你想要使用分割模式打开的文件名）。
>
>
> **提示 2：** 你可以通过调用任意数量的 `split` 或者 `vsplit` 命令来打开两个以上的文件。试一试，看看它效果如何。
>
>
>

### Vim 速查表

在本文中，您学会了如何使用 Vim 来完成工作或项目，但这只是你开启 Vim 强大功能之旅的开始，可以查看其他很棒的教程和技巧。

为了让一切变得简单些，我已经将你学到的一切总结到了 [一份方便的速查表](https://opensource.com/downloads/cheat-sheet-vim) 中。

---

via: <https://opensource.com/article/19/3/getting-started-vim>

作者：[Bryant Son](https://opensource.com/users/brson) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Modrisco](https://github.com/Modrisco) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


小白观察：如何将你的应用生态从 Apple 迁移到其他平台？

Summary: 这篇文章从软件、硬件两个方面，解读了如何将你的日常使用设备从 Apple 迁移到其他平台。其中提到的主要是 Google 的服务。

# 小白观察：如何将你的应用生态从 Apple 迁移到其他平台？

### Deep News

#### 《如何将你的应用生态从 Apple 迁移到其他平台？》

[这篇文章](https://www.zdnet.com/article/alternatives-to-apples-ecosystem-yes-there-is-a-way-out/)从软件、硬件两个方面，解读了如何将你的日常使用设备从 Apple 迁移到其他平台。其中提到的主要是 Google 的服务。 具体的替换如下：

| Apple 生态 | Google 生态 |
| --- | --- |
| iPhone | Pixel 3 or Pixel 3XL |
| mac book | Pixelbook |
| Apple Watch | Fossil Sport |
| AirPods | Samsung Galaxy Buds |
| Homepod | Google Home, Google Home Mini, or Google Home Max |
| Homepod | Google Home Hub |
| Apple TV | Chromecast or Android TV box |

>
> 当初的屠龙少年终成尾大不掉的恶龙，一代一代的屠龙者不断出现，Google 又能否检查不作恶呢？拭目以待。
>
>
>

### Quick News

##### 微软 Hotmail （Outlook）发生数据泄露

据报道，一批非企业用户的邮箱遭到了泄漏 ，泄漏信息包括邮箱地址、文件夹名、邮件标题等。受影响的邮件为从 2019 年 1 月 1日 到 2019 年 3 月 28 日的邮件。微软表示已经做了处理，避免问题的扩大。[【GadgetsNow】](https://www.gadgetsnow.com/tech-news/hotmail-outlook-users-personal-data-exposed-for-over-two-months/articleshow/68952023.cms)

##### 微软推出 Google G Suite 迁移到 Office 365 的工具

微软推出了 Google G Suite 迁移到 Office 365 的工具，帮助用户从 Google G Suite 迁移数据到 Office 365 中。[【ZDNet】](https://www.zdnet.com/article/microsoft-starts-rolling-out-google-g-suite-to-office-365-migration-tools/)

##### Facebook 仍未走出隐私风波

据华盛顿邮报报道，美国联邦贸易委员会（FTC）正在考虑和研究设计新的法规来规范企业行为以及如何让扎克伯格对 Facebook 数据丢失负责。[【华盛顿邮报】](https://www.washingtonpost.com/technology/2019/04/19/federal-investigation-facebook-could-hold-mark-zuckerberg-accountable-privacy-sources-say/?noredirect=on&utm_term=.97ca68d303c7)


每日安全资讯：BGP 路由表即将突破 768k，可能会引发网络故障

Summary: 768k 日即将临近，它有可能会导致部分网络发生故障

768k 日即将临近，它有可能会导致部分网络发生故障

# 每日安全资讯：BGP 路由表即将突破 768k，可能会引发网络故障

768k 日即将临近，它有可能会导致部分网络发生故障，但不用恐慌，你也可能会很幸运的体验不到任何问题。768k 日发源于 512k 日，512k 日是指路由器耗尽了储存全球 BGP 路由表的内存，它于 2014 年 8 月 12 日到来，导致了全世界数以百计的 ISP 发生网络故障。

在 512k 日来临之际，许多旧的路由器收到了紧急更新，分配了更多内存去储存 BGP 路由表，而新分配的值是 768k 或 768,000。现在 768k 的限制又要突破了。根据最新的数据，全球路由表已经达到了 767,392，无限接近 768k。

网络工程师和专家预测，768k 日将会在下个月到来，但这一次应该不会发生像 2014 年那样严重的网络问题，不过小型的地区 ISP 可能会遇到问题。

来源：solidot.org

### 更多资讯

##### car2go 汽车共享 App 遭黑客入侵，100 多辆豪华汽车被窃

据 TheDrive 网站报道，黑客近日入侵 car2go 汽车共享应用 APP，并在芝加哥窃取了 100 多辆高端豪华汽车。

来源： 盖世汽车

详情： <http://t.cn/EXkMHek>

##### 穆勒报告披露更多俄罗斯如何攻击 DNC 及希拉里竞选团队的信息

据外媒报道，穆勒报告带来了俄罗斯政府如何入侵希拉里·克林顿总统竞选团队以及美国民主党全国委员会(DNC)文件和电子邮件的新信息。该份报告证实，俄罗斯曾一度使用位于美国的服务器展开大规模数据渗漏行动。

来源： cnBeta.COM

详情： <http://t.cn/EXkMEgM>

##### Facebook 承认员工可获取数百万 Instagram 用户的明文密码

Facebook 周四称，该公司员工可在一个内部数据库中看到数以百万计的 Instagram 用户密码，这些密码以可搜索的格式存储在数据库中。Facebook 此次宣布的这一消息是对上个月发表的一篇博文的更新，当时该公司披露信息称，公司员工可以看到数百万 Facebook 用户密码。

来源： 新浪科技

详情： <http://t.cn/EXkxvOH>

（信息来源于网络，安华金和搜集整理）


小白观察：Erlang 的设计者 Joe Armstrong 去世

Summary: R.I.P

有拼写错误, 是 "Joe Armstrong", 不是 "Jow Armstrong ".

# 小白观察：Erlang 的设计者 Joe Armstrong 去世

<img src="content_image/album_201904_21_091525veepemab9kbb9msw.jpg" alt="" title="">

### Breaking News

##### Erlang 的设计者 Joe Armstrong 去世

Erlang 的设计者，计算机科学家及程序员 Jow Armstrong 昨日过世，享年 69 岁。

### Quick News

##### Fastly 提交了 IPO 的文件

服务了 Github、Twitter、Yelp、Vogue、imgur、vimeo 的 CDN 服务提供商 Fastly 提交了 IPO 上市的文件。

[【TechCrunch】](https://techcrunch.com/2019/04/19/fastly-the-content-delivery-network-files-for-an-ipo/)

>
> Fastly 能发展的很好么？看看他的竞品吧， Akamai CDN 的股票目前每股 75.34 元；Cloudflare 也在寻求上市。
>
>
>

##### 缺乏睡眠最终会导致你死亡

工业社会的发展，我们用更多的时间来工作，更少的时间来睡觉。根据畅销书《Why we Sleep Unlocking Dreams》的作者 Walker 表示，“睡眠不足会渗透到我们身体的每一个角落里，而且，睡眠是一种必须品“。[【Wired】](https://www.wired.com/story/youre-not-getting-enough-sleep-and-its-killing-you/)

>
> 结合 996 ICU 一起看，还是身体重要。
>
>
>

##### Chrome 将于 4 月 23 日发布 Chrome 74

新的 Chrome 74 为 Windows 提供了 Darkmode ，为 Linux 提供了 Container Backup、 Audio Support、GPU Acceleration、USB Device Access、Linux Apps Search and Installation 等特性。[【HowToGeek】](https://www.howtogeek.com/411621/whats-new-in-chrome-74-arriving-april-23/)

>
> 这次的更新，怎么看怎么像 Linux 专版
>
>
>


解决 Ubuntu 在启动时冻结的问题

神舟T65 即使是设置过这个也没法启动图形界面，会卡死在图形服务加载哪里，但安装deepin即又是正常的，到登陆界面后切换到tty3使用字符界面登陆并添加.conf重新初始化一下就可以了，除了deepin其它任何linux均引导冻结

# 解决 Ubuntu 在启动时冻结的问题

>
> 本文将向你一步步展示如何通过安装 NVIDIA 专有驱动来处理 Ubuntu 在启动过程中冻结的问题。本教程仅在一个新安装的 Ubuntu 系统上操作验证过，不过在其它情况下也理应可用。
>
>
>

不久前我买了台[宏碁掠夺者](https://amzn.to/2YVV6rt)笔记本电脑来测试各种 Linux 发行版。这台庞大且笨重的机器与我喜欢的，类似[戴尔 XPS](https://itsfoss.com/dell-xps-13-ubuntu-review/)那般小巧轻便的笔记本电脑大相径庭。

我即便不打游戏也选择这台电竞笔记本电脑的原因，就是为了 [NVIDIA 的显卡](https://www.nvidia.com/en-us/)。宏碁掠夺者 Helios 300 上搭载了一块 [NVIDIA Geforce](https://www.nvidia.com/en-us/geforce/) GTX 1050Ti 显卡。

NVIDIA 那糟糕的 Linux 兼容性为人们所熟知。过去很多 It’s FOSS 的读者都向我求助过关于 NVIDIA 笔记本电脑的问题，而我当时无能为力，因为我手头上没有使用 NVIDIA 显卡的系统。

所以当我决定搞一台专门的设备来测试 Linux 发行版时，我选择了带有 NVIDIA 显卡的笔记本电脑。

这台笔记本原装的 Windows 10 系统安装在 120 GB 的固态硬盘上，并另外配有 1 TB 的机械硬盘来存储数据。在此之上我配置好了 [Windows 10 和 Ubuntu 18.04 双系统](https://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/)。整个的安装过程舒适、方便、快捷。

随后我启动了 [Ubuntu](https://www.ubuntu.com/)。那熟悉的紫色界面展现了出来，然后我就发现它卡在那儿了。鼠标一动不动，我也输入不了任何东西，然后除了长按电源键强制关机以外我啥事儿都做不了。

然后再次尝试启动，结果一模一样。整个系统就一直卡在那个紫色界面，随后的登录界面也出不来。

这听起来很耳熟吧？下面就让我来告诉你如何解决这个 Ubuntu 在启动过程中冻结的问题。

>
> 如果你用的不是 Ubuntu
>
>
> 请注意，尽管是在 Ubuntu 18.04 上操作的，本教程应该也能用于其他基于 Ubuntu 的发行版，例如 Linux Mint、elementary OS 等等。关于这点我已经在 Zorin OS 上确认过。
>
>
>

### 解决 Ubuntu 启动中由 NVIDIA 驱动引起的冻结问题

我介绍的解决方案适用于配有 NVIDIA 显卡的系统，因为你所面临的系统冻结问题是由开源的 [NVIDIA Nouveau 驱动](https://nouveau.freedesktop.org/wiki/)所导致的。

事不宜迟，让我们马上来看看如何解决这个问题。

#### 步骤 1：编辑 Grub

在启动系统的过程中，请你在如下图所示的 Grub 界面上停下。如果你没看到这个界面，在启动电脑时请按住 `Shift` 键。

在这个界面上，按 `E` 键进入编辑模式。

你应该看到一些如下图所示的代码。此刻你应关注于以 “linux” 开头的那一行。

#### 步骤 2：在 Grub 中临时修改 Linux 内核参数

回忆一下，我们的问题出在 NVIDIA 显卡驱动上，是开源版 NVIDIA 驱动的不适配导致了我们的问题。所以此处我们能做的就是禁用这些驱动。

此刻，你有多种方式可以禁用这些驱动。我最喜欢的方式是通过 `nomodeset` 来禁用所有显卡的驱动。

请把下列文本添加到以 “linux” 开头的那一行的末尾。此处你应该可以正常输入。请确保你把这段文本加到了行末。

```
 nomodeset
```

现在你屏幕上的显示应如下图所示：

按 `Ctrl+X` 或 `F10` 保存并退出。下次你就将以修改后的内核参数来启动。

>
> 对以上操作的解释
>
>
> 所以我们究竟做了些啥？那个 `nomodeset` 又是个什么玩意儿？让我来向你简单地解释一下。
>
>
> 通常来说，显卡是在 X 或者是其他显示服务器开始执行后才被启用的，也就是在你登录系统并看到图形界面以后。
>
>
> 但近来，视频模式的设置被移进了内核。这么做的众多优点之一就是能你看到一个漂亮且高清的启动画面。
>
>
> 若你往内核中加入 `nomodeset` 参数，它就会指示内核在显示服务启动后才加载显卡驱动。
>
>
> 换句话说，你在此时禁止视频驱动的加载，由此产生的冲突也会随之消失。你在登录进系统以后，还是能看到一切如旧，那是因为显卡驱动在随后的过程中被加载了。
>
>
>

#### 步骤 3：更新你的系统并安装 NVIDIA 专有驱动

别因为现在可以登录系统了就过早地高兴起来。你之前所做的只是临时措施，在下次启动的时候，你的系统依旧会尝试加载 Nouveau 驱动而因此冻结。

这是否意味着你将不得不在 Grub 界面上不断地编辑内核？可喜可贺，答案是否定的。

你可以在 Ubuntu 上为 NVIDIA 显卡[安装额外的驱动](https://itsfoss.com/install-additional-drivers-ubuntu/)。在使用专有驱动后，Ubuntu 将不会在启动过程中冻结。

我假设这是你第一次登录到一个新安装的系统。这意味着在做其他事情之前你必须先[更新 Ubuntu](https://itsfoss.com/update-ubuntu/)。通过 Ubuntu 的 `Ctrl+Alt+T` [系统快捷键](https://itsfoss.com/ubuntu-shortcuts/)打开一个终端，并输入以下命令：

```
sudo apt update && sudo apt upgrade -y
```

在上述命令执行完以后，你可以尝试安装额外的驱动。不过根据我的经验，在安装新驱动之前你需要先重启一下你的系统。在你重启时，你还是需要按我们之前做的那样修改内核参数。

当你的系统已经更新和重启完毕，按下 `Windows` 键打开一个菜单栏，并搜索“<ruby> 软件与更新 <rt>  Software & Updates </rt></ruby>”。

然后切换到“<ruby> 额外驱动 <rt>  Additional Drivers </rt></ruby>”标签页，并等待数秒。然后你就能看到可供系统使用的专有驱动了。在这个列表上你应该可以找到 NVIDIA。

选择专有驱动并点击“<ruby> 应用更改 <rt>  Apply Changes </rt></ruby>”。

新驱动的安装会费点时间。若你的系统启用了 UEFI 安全启动，你将被要求设置一个密码。*你可以将其设置为任何容易记住的密码*。它的用处我将在步骤 4 中说明。

安装完成后，你会被要求重启系统以令之前的更改生效。

#### 步骤 4：处理 MOK（仅针对启用了 UEFI 安全启动的设备）

如果你之前被要求设置安全启动密码，此刻你会看到一个蓝色界面，上面写着 “MOK management”。这是个复杂的概念，我试着长话短说。

对 MOK（[设备所有者密码](https://firmware.intel.com/blog/using-mok-and-uefi-secure-boot-suse-linux)）的要求是因为安全启动的功能要求所有内核模块都必须被签名。Ubuntu 中所有随 ISO 镜像发行的内核模块都已经签了名。由于你安装了一个新模块（也就是那个额外的驱动），或者你对内核模块做了修改，你的安全系统可能视之为一个未经验证的外部修改，从而拒绝启动。

因此，你可以自己对系统模块进行签名（以告诉 UEFI 系统莫要大惊小怪，这些修改是你做的），或者你也可以简单粗暴地[禁用安全启动](https://itsfoss.com/disable-secure-boot-in-acer/)。

现在你对[安全启动和 MOK](https://wiki.ubuntu.com/UEFI/SecureBoot/DKMS) 有了一定了解，那咱们就来看看在遇到这个蓝色界面后该做些什么。

如果你选择“继续启动”，你的系统将有很大概率如往常一样启动，并且你啥事儿也不用做。不过在这种情况下，新驱动的有些功能有可能工作不正常。

这就是为什么，你应该“选择注册 MOK”。

它会在下一个页面让你点击“继续”，然后要你输入一串密码。请输入在上一步中，在安装额外驱动时设置的密码。

>
> 别担心！
>
>
> 如果你错过了这个关于 MOK 的蓝色界面，或不小心点了“继续启动”而不是“注册 MOK”，不必惊慌。你的主要目的是能够成功启动系统，而通过禁用 Nouveau 显卡驱动，你已经成功地实现了这一点。
>
>
> 最坏的情况也不过就是你的系统切换到 Intel 集成显卡而不再使用 NVIDIA 显卡。你可以之后的任何时间安装 NVIDIA 显卡驱动。你的首要任务是启动系统。
>
>
>

#### 步骤 5：享受安装了专有 NVIDIA 驱动的 Linux 系统

当新驱动被安装好后，你需要再次重启系统。别担心！目前的情况应该已经好起来了，并且你不必再去修改内核参数，而是能够直接启动 Ubuntu 系统了。

我希望本教程帮助你解决了 Ubuntu 系统在启动中冻结的问题，并让你能够成功启动 Ubuntu 系统。

如果你有任何问题或建议，请在下方评论区给我留言。

---

via: <https://itsfoss.com/fix-ubuntu-freezing/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Raverstern](https://github.com/Raverstern) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


5 个有用的开源日志分析工具

Summary: 监控网络活动既重要又繁琐，以下这些工具可以使它更容易。

Elastic Stack (ELK Stack) 感觉还不错。

监控网络活动既重要又繁琐，以下这些工具可以使它更容易。

# 5 个有用的开源日志分析工具

>
> 监控网络活动既重要又繁琐，以下这些工具可以使它更容易。
>
>
>

监控网络活动是一项繁琐的工作，但有充分的理由这样做。例如，它允许你查找和调查工作站和连接到网络的设备及服务器上的可疑登录，同时确定管理员滥用了什么。你还可以跟踪软件安装和数据传输，以实时识别潜在问题，而不是在损坏发生后才进行跟踪。

这些日志还有助于使你的公司遵守适用于在欧盟范围内运营的任何实体的[通用数据保护条例](https://opensource.com/article/18/4/gdpr-impact)（GDPR）。如果你的网站在欧盟可以浏览，那么你就有遵守的该条例的资格。

日志记录，包括跟踪和分析，应该是任何监控基础设置中的一个基本过程。要从灾难中恢复 SQL Server 数据库，需要事务日志文件。此外，通过跟踪日志文件，DevOps 团队和数据库管理员（DBA）可以保持最佳的数据库性能，又或者，在网络攻击的情况下找到未经授权活动的证据。因此，定期监视和分析系统日志非常重要。这是一种重新创建导致出现任何问题的事件链的可靠方式。

现在有很多开源日志跟踪器和分析工具可供使用，这使得为活动日志选择合适的资源比你想象的更容易。自由和开源软件社区提供的日志设计适用于各种站点和操作系统。以下是五个我用过的最好的工具，它们并没有特别的顺序。

### Graylog

[Graylog](https://www.graylog.org/products/open-source) 于 2011 年在德国创立，现在作为开源工具或商业解决方案提供。它被设计成一个集中式日志管理系统，接受来自不同服务器或端点的数据流，并允许你快速浏览或分析该信息。

Graylog 在系统管理员中有着良好的声誉，因为它易于扩展。大多数 Web 项目都是从小规模开始的，但它们可能指数级增长。Graylog 可以均衡后端服务网络中的负载，每天可以处理几 TB 的日志数据。

IT 管理员会发现 Graylog 的前端界面易于使用，而且功能强大。Graylog 是围绕仪表板的概念构建的，它允许你选择你认为最有价值的指标或数据源，并快速查看一段时间内的趋势。

当发生安全或性能事件时，IT 管理员希望能够尽可能地根据症状追根溯源。Graylog 的搜索功能使这变得容易。它有内置的容错功能，可运行多线程搜索，因此你可以同时分析多个潜在的威胁。

### Nagios

[Nagios](https://www.nagios.org/downloads/) 始于 1999 年，最初是由一个开发人员开发的，现在已经发展成为管理日志数据最可靠的开源工具之一。当前版本的 Nagios 可以与运行 Microsoft Windows、Linux 或 Unix 的服务器集成。

它的主要产品是日志服务器，旨在简化数据收集并使系统管理员更容易访问信息。Nagios 日志服务器引擎将实时捕获数据，并将其提供给一个强大的搜索工具。通过内置的设置向导，可以轻松地与新端点或应用程序集成。

Nagios 最常用于需要监控其本地网络安全性的组织。它可以审核一系列与网络相关的事件，并帮助自动分发警报。如果满足特定条件，甚至可以将 Nagios 配置为运行预定义的脚本，从而允许你在人员介入之前解决问题。

作为网络审计的一部分，Nagios 将根据日志数据来源的地理位置过滤日志数据。这意味着你可以使用地图技术构建全面的仪表板，以了解 Web 流量是如何流动的。

### Elastic Stack (ELK Stack)

[Elastic Stack](https://www.elastic.co/products)，通常称为 ELK Stack，是需要筛选大量数据并理解其日志系统的组织中最受欢迎的开源工具之一（这也是我个人的最爱）。

它的主要产品由三个独立的产品组成：Elasticsearch、Kibana 和 Logstash：

* 顾名思义， Elasticsearch 旨在帮助用户使用多种查询语言和类型在数据集之中找到匹配项。速度是它最大的优势。它可以扩展成由数百个服务器节点组成的集群，轻松处理 PB 级的数据。
* Kibana 是一个可视化工具，与 Elasticsearch 一起工作，允许用户分析他们的数据并构建强大的报告。当你第一次在服务器集群上安装 Kibana 引擎时，你会看到一个显示着统计数据、图表甚至是动画的界面。
* ELK Stack 的最后一部分是 Logstash，它作为一个纯粹的服务端管道进入 Elasticsearch 数据库。你可以将 Logstash 与各种编程语言和 API 集成，这样你的网站和移动应用程序中的信息就可以直接提供给强大的 Elastic Stalk 搜索引擎中。

ELK Stack 的一个独特功能是，它允许你监视构建在 WordPress 开源网站上的应用程序。与[跟踪管理日志和 PHP 日志](https://www.wpsecurityauditlog.com/benefits-wordpress-activity-log/)的大多数开箱即用的安全审计日志工具相比，ELK Stack 可以筛选 Web 服务器和数据库日志。

糟糕的日志跟踪和数据库管理是导致网站性能不佳的最常见原因之一。没有定期检查、优化和清空数据库日志，不仅会降低站点的运行速度，还可能导致其完全崩溃。因此，ELK Stack 对于每个 WordPress 开发人员的工具包来说都是一个优秀的工具。

### LOGalyze

[LOGalyze](http://www.logalyze.com/) 是一个位于匈牙利的组织，它为系统管理员和安全专家构建开源工具，以帮助他们管理服务器日志，并将其转换为有用的数据点。其主要产品可供个人或商业用户免费下载。

LOGalyze 被设计成一个巨大的管道，其中多个服务器、应用程序和网络设备可以使用简单对象访问协议（SOAP）方法提供信息。它提供了一个前端界面，管理员可以登录界面来监控数据集并开始分析数据。

在 LOGalyze 的 Web 界面中，你可以运行动态报告，并将其导出到 Excel 文件、PDF 文件或其他格式。这些报告可以基于 LOGalyze 后端管理的多维统计信息。它甚至可以跨服务器或应用程序组合数据字段，借此来帮助你发现性能趋势。

LOGalyze 旨在不到一个小时内完成安装和配置。它具有预先构建的功能，允许它以法律所要求的格式收集审计数据。例如，LOGalyze 可以很容易地运行不同的 HIPAA 报告，以确保你的组织遵守健康法律并保持合规性。

### Fluentd

如果你所在组织的数据源位于许多不同的位置和环境中，那么你的目标应该是尽可能地将它们集中在一起。否则，你将难以监控性能并防范安全威胁。

[Fluentd](https://www.fluentd.org/) 是一个强大的数据收集解决方案，它是完全开源的。它没有提供完整的前端界面，而是作为一个收集层来帮助组织不同的管道。Fluentd 在被世界上一些最大的公司使用，但是也可以在较小的组织中实施。

Fluentd 最大的好处是它与当今最常用的技术工具兼容。例如，你可以使用 Fluentd 从 Web 服务器（如 Apache）、智能设备传感器和 MongoDB 的动态记录中收集数据。如何处理这些数据完全取决于你。

Fluentd 基于 JSON 数据格式，它可以与由卓越的开发人员创建的 [500 多个插件](https://opensource.com/article/18/9/open-source-log-aggregation-tools)一起使用。这使你可以将日志数据扩展到其他应用程序中，并通过最少的手工操作从中获得更好的分析。

### 写在最后

如果出于安全原因、政府合规性和衡量生产力的原因，你还没有使用活动日志，那么现在开始改变吧。市场上有很多插件，它们可以与多种环境或平台一起工作，甚至可以在内部网络上使用。不要等发生了严重的事件，才采取一个积极主动的方法去维护和监督日志。

---

via: <https://opensource.com/article/19/4/log-analysis-tools>

作者：[Sam Bocetta](https://opensource.com/users/sambocetta) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：阻止了 WannaCry 传播的安全研究员被控传播银行木马

# 每日安全资讯：阻止了 WannaCry 传播的安全研究员被控传播银行木马

<img src="content_image/album_201904_21_110357b0e2k8qqk2x7we8q.jpg" alt="" title="">

英国安全研究员 Marcus Hutchins（MalwareTech），2017 年因发现 WannaCry 的关闭开关阻止了该勒索软件的进一步传播而被视为一位安全领域的英雄，但他在当年前往美国参加安全会议 Black Hat 和 DEF CON 后准备在机场离境时遭到 FBI 逮捕，被控开发、传播和维护了银行木马 Kronos。

来源：solidot.org

### 更多资讯

##### 勒索软件攻击致使 The Weather Channel 停播

根据《华尔街日报》报道，周四 The Weather Channel（天气频道）遭勒索软件攻击，导致其一个现场直播的电视节目停播。停播持续大约一个多小时，攻击发生时美国东南部天气十分恶劣。美国联邦调查局告诉《华尔街日报》，勒索软件攻击是问题的根源，该机构正在进行调查。

来源： solidot.org

详情： <http://www.dbsec.cn/zx/20190421-2.html>

##### 印度支付卡欺诈发案率快速上升 名列全球第二

根据网络安全公司Gemini Advisory发布的网络犯罪统计数据，2018年，超过320万张印度支付卡记录被泄露，并在网上发布供出售，这与去年相比有了很大的飞跃，当时只有80万张印度支付卡的详细信息被发布在网络犯罪论坛上。

来源： cnBeta.COM

详情： <http://t.cn/EaActwV>

##### 计算机故障被指延误了巴黎圣母院的灭火

巴黎圣母院周一晚上六点左右失火，最有可能的失火原因是电梯的电气短路，但一个计算机 bug 被指耽搁了灭火行动，导致了火势的快速蔓延。法国媒体报道称，在晚上六点后不久火警响起，但计算机 bug 在错误的地点显示了起火的位置。

来源： solidot.org

详情： <http://t.cn/EaAcxIJ>

##### 薅羊毛薅到犯罪 有人非法套取信用卡积分获利被判刑

获取积分，兑换礼品，这是不少消费者，尤其是年轻群体熟悉的生活方式，有人把这种赚取优惠的行为戏称为“薅羊毛”。但是，“羊毛”薅得太狠，也会违法犯罪，山东、上海等地最近先后有人因为通过虚假交易等方式获取信用卡积分和礼品，被判诈骗罪。

来源： 央广网

详情： <http://t.cn/EaAco6w>

（信息来源于网络，安华金和搜集整理）


我们做了一个极简的文章列表小程序

# 我们做了一个极简的文章列表小程序

一直想有个 Linux 中国的 APP，因为种种条件限制而没有达成这个目标。

微信小程序出来之后，也考虑过是否可以用微信小程序来实现一个 Linux 中国的 APP。但是在这个小程序内应该实现什么功能呢？经过几番考虑，可能也是因为最近比较喜欢极简风格，因此就做了一个（真的）极简的 Linux 中国小程序。

好吧，以上是给我自己找的理由，实在是因为这个小程序里面不知道该放些什么功能才是大家需要的，所以这个小程序只有 3 个页面：一闪而过的封面、显示文章题图及标题的翻页列表，以及一个显示文章内容的 web-view。

打开这个小程序，封面闪过之后，就是这样的列表：

向左滑动，就是下一篇。

点击这个页面，会切换显示模式，以横屏模式显示题图。再次点击切换回来。横屏模式下长按图片，可以保存该图片（需要授权才行）。之所以做这样的功能，是因为我们的每篇文章，都会尽力去选择一张漂亮的题图，不能辜负这种对读者的心意。:D

什么，你说如何访问文章？哦，是我忘记啦——在竖屏模式下，长按即可访问。

此外，要是遇到喜欢的文章，可以方便的分享出去：


在 Bash 中使用[方括号]（二）

Summary: 我们继续来看方括号的用法，它们甚至还可以在 Bash 当中作为一个命令使用。

我们继续来看方括号的用法，它们甚至还可以在 Bash 当中作为一个命令使用。

# 在 Bash 中使用[方括号]（二）

<img src="content_image/album_201904_22_100922bacug4z3a7bvodgd.jpg" alt="square brackets" title="square brackets">

>
> 我们继续来看方括号的用法，它们甚至还可以在 Bash 当中作为一个命令使用。
>
>
>

欢迎回到我们的方括号专题。在[前一篇文章](/article-10717-1.html)当中，我们介绍了方括号在命令行中可以用于通配操作，如果你已经读过前一篇文章，就可以从这里继续了。

方括号还可以以一个命令的形式使用，就像这样：

```
[ "a" = "a" ]
```

上面这种 `[ ... ]` 的形式就可以看成是一个可执行的命令。要注意，方括号内部的内容 `"a" = "a"` 和方括号 `[`、`]` 之间是有空格隔开的。因为这里的方括号被视作一个命令，因此要用空格将命令和它的参数隔开。

上面这个命令的含义是“判断字符串 `"a"` 和字符串 `"a"` 是否相同”，如果判断结果为真，那么 `[ ... ]` 就会以<ruby> 状态码 <rt>  status code </rt></ruby> 0 退出，否则以状态码 1 退出。在[之前的文章](/article-10596-1.html)中，我们也有介绍过状态码的概念，可以通过 `$?` 变量获取到最近一个命令的状态码。

分别执行

```
[ "a" = "a" ]
echo $?
```

以及

```
[ "a" = "b" ]
echo $?
```

这两段命令中，前者会输出 0（判断结果为真），后者则会输出 1（判断结果为假）。在 Bash 当中，如果一个命令的状态码是 0，表示这个命令正常执行完成并退出，而且其中没有出现错误，对应布尔值 `true`；如果在命令执行过程中出现错误，就会返回一个非零的状态码，对应布尔值 `false`。而 `[ ... ]` 也同样遵循这样的规则。

因此，`[ ... ]` 很适合在 `if ... then`、`while` 或 `until` 这种在代码块结束前需要判断是否达到某个条件结构中使用。

对应使用的逻辑判断运算符也相当直观：

```
[ STRING1 = STRING2 ] => 检查字符串是否相等
[ STRING1 != STRING2 ] => 检查字符串是否不相等
[ INTEGER1 -eq INTEGER2 ] => 检查整数 INTEGER1 是否等于 INTEGER2
[ INTEGER1 -ge INTEGER2 ] => 检查整数 INTEGER1 是否大于等于 INTEGER2
[ INTEGER1 -gt INTEGER2 ] => 检查整数 INTEGER1 是否大于 INTEGER2
[ INTEGER1 -le INTEGER2 ] => 检查整数 INTEGER1 是否小于等于 INTEGER2
[ INTEGER1 -lt INTEGER2 ] => 检查整数 INTEGER1 是否小于 INTEGER2
[ INTEGER1 -ne INTEGER2 ] => 检查整数 INTEGER1 是否不等于 INTEGER2
等等……
```

方括号的这种用法也可以很有 shell 风格，例如通过带上 `-f` 参数可以判断某个文件是否存在：

```
for i in {000..099}; \
 do \
  if [ -f file$i ]; \
  then \
   echo file$i exists; \
  else \
   touch file$i; \
   echo I made file$i; \
  fi; \
done
```

如果你在上一篇文章使用到的测试目录中运行以上这串命令，其中的第 3 行会判断那几十个文件当中的某个文件是否存在。如果文件存在，会输出一条提示信息；如果文件不存在，就会把对应的文件创建出来。最终，这个目录中会完整存在从 `file000` 到 `file099` 这一百个文件。

上面这段命令还可以写得更加简洁：

```
for i in {000..099};\
do\
 if [ ! -f file$i ];\
 then\
  touch file$i;\
  echo I made file$i;\
 fi;\
done
```

其中 `!` 运算符表示将判断结果取反，因此第 3 行的含义就是“如果文件 `file$i` 不存在”。

可以尝试一下将测试目录中那几十个文件随意删除几个，然后运行上面的命令，你就可以看到它是如何把被删除的文件重新创建出来的。

除了 `-f` 之外，还有很多有用的参数。`-d` 参数可以判断某个目录是否存在，`-h` 参数可以判断某个文件是不是一个符号链接。可以用 `-G` 参数判断某个文件是否属于某个用户组，用 `-ot` 参数判断某个文件的最后更新时间是否早于另一个文件，甚至还可以判断某个文件是否为空文件。

运行下面的几条命令，可以向几个文件中写入一些内容：

```
echo "Hello World" >> file023
echo "This is a message" >> file065
echo "To humanity" >> file010
```

然后运行：

```
for i in {000..099};\
do\
 if [ ! -s file$i ];\
 then\
  rm file$i;\
  echo I removed file$i;\
 fi;\
done
```

你就会发现所有空文件都被删除了，只剩下少数几个非空的文件。

如果你还想了解更多别的参数，可以执行 `man test` 来查看 `test` 命令的 man 手册（`test` 是 `[ ... ]` 的命令别名）。

有时候你还会看到 `[[ ... ]]` 这种双方括号的形式，使用起来和单方括号差别不大。但双方括号支持的比较运算符更加丰富：例如可以使用 `==` 来判断某个字符串是否符合某个<ruby> 模式 <rt>  pattern </rt></ruby>，也可以使用 `<`、`>` 来判断两个字符串的出现顺序。

可以在 [Bash 表达式文档](https://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions)中了解到双方括号支持的更多运算符。

### 下一集

在下一篇文章中，我们会开始介绍圆括号 `()` 在 Linux 命令行中的用法，敬请关注！

### 更多

* [Linux 工具：点的含义](/article-10465-1.html)
* [理解 Bash 中的尖括号](/article-10502-1.html)
* [Bash 中尖括号的更多用法](/article-10529-1.html)
* [Linux 中的 &](/article-10587-1.html)
* [Bash 中的 ＆ 符号和文件描述符](/article-10591-1.html)
* [Bash 中的逻辑和（&）](/article-10596-1.html)
* [浅析 Bash 中的 {花括号}](/article-10624-1.html)
* [在 Bash 中使用[方括号] （一）](/article-10717-1.html)

---

via: <https://www.linux.com/blog/learn/2019/4/using-square-brackets-bash-part-2>

作者：[Paul Brown](https://www.linux.com/users/bro66) 选题：[lujun9972](https://github.com/lujun9972) 译者：[HankChow](https://github.com/HankChow) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


怎样在 Kubernetes 上运行 PostgreSQL

PostgreSQL 14.1 版本文档     https://www.rockdata.net/zh-cn/docs/14/

PostgreSQL 13.1 版本文档     https://www.rockdata.net/zh-cn/docs/13/

PostgreSQL 12.2 版本文档     https://www.rockdata.net/zh-cn/docs/12/

PostgreSQL 11.2 版本文档     https://www.rockdata.net/zh-cn/docs/11/

PostgreSQL 10.1 版本文档     https://www.rockdata.net/zh-cn/docs/10/

# 怎样在 Kubernetes 上运行 PostgreSQL

>
> 创建统一管理的，具备灵活性的云原生生产部署来部署一个个性化的数据库即服务（DBaaS）。
>
>
>

<img src="content_image/album_201904_22_105654bf6mm48m448ml8lj.png" alt="cubes coming together to create a larger cube" title="cubes coming together to create a larger cube">

通过在 [Kubernetes](https://www.postgresql.org/) 上运行 [PostgreSQL](https://kubernetes.io/) 数据库，你能创建统一管理的，具备灵活性的云原生生产部署应用来部署一个个性化的数据库即服务为你的特定需求进行量身定制。

对于 Kubernetes，使用 Operator 允许你提供额外的上下文去[管理有状态应用](https://opensource.com/article/19/2/scaling-postgresql-kubernetes-operators)。当使用像PostgreSQL 这样开源的数据库去执行包括配置、扩展、高可用和用户管理时，Operator 也很有帮助。

让我们来探索如何在 Kubernetes 上启动并运行 PostgreSQL。

### 安装 PostgreSQL Operator

将 PostgreSQL 和 Kubernetes 结合使用的第一步是安装一个 Operator。在针对 Linux 系统的Crunchy 的[快速启动脚本](https://crunchydata.github.io/postgres-operator/stable/installation/#quickstart-script)的帮助下，你可以在任意基于 Kubernetes 的环境下启动和运行开源的[Crunchy PostgreSQL Operator](https://github.com/CrunchyData/postgres-operator)。

快速启动脚本有一些必要前提：

* [Wget](https://www.gnu.org/software/wget/) 工具已安装。
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) 工具已安装。
* 在你的 Kubernetes 中已经定义了一个 [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/)。
* 拥有集群权限的可访问 Kubernetes 的用户账号，以安装 Operator 的 [RBAC](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) 规则。
* 一个 PostgreSQL Operator 的 [命名空间](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/)。

执行这个脚本将提供给你一个默认的 PostgreSQL Operator 部署，其默认假设你采用 [动态存储](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/)和一个名为 `standard` 的 StorageClass。这个脚本允许用户采用自定义的值去覆盖这些默认值。

通过下列命令，你能下载这个快速启动脚本并把它的权限设置为可执行：

```
wget <https://raw.githubusercontent.com/CrunchyData/postgres-operator/master/examples/quickstart.sh>
chmod +x ./quickstart.sh
```

然后你运行快速启动脚本：

```
./examples/quickstart.sh
```

在脚本提示你相关的 Kubernetes 集群基本信息后，它将执行下列操作：

* 下载 Operator 配置文件
* 将 `$HOME/.pgouser` 这个文件设置为默认设置
* 以 Kubernetes [Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) 部署 Operator
* 设置你的 `.bashrc` 文件包含 Operator 环境变量
* 设置你的 `$HOME/.bash_completion` 文件为 `pgo bash_completion` 文件

在快速启动脚本的执行期间，你将会被提示在你的 Kubernetes 集群设置 RBAC 规则。在另一个终端，执行快速启动命令所提示你的命令。

一旦这个脚本执行完成，你将会得到提示设置一个端口以转发到 PostgreSQL Operator pod。在另一个终端，执行这个端口转发操作；这将允许你开始对 PostgreSQL Operator 执行命令！尝试输入下列命令创建集群：

```
pgo create cluster mynewcluster
```

你能输入下列命令测试你的集群运行状况：

```
pgo test mynewcluster
```

现在，你能在 Kubernetes 环境下管理你的 PostgreSQL 数据库了！你可以在[官方文档](https://crunchydata.github.io/postgres-operator/stable/#documentation)找到非常全面的命令，包括扩容，高可用，备份等等。

这篇文章部分参考了该作者为 Crunchy 博客而写的[在 Kubernetes 上开始运行 PostgreSQL](https://info.crunchydata.com/blog/get-started-runnning-postgresql-on-kubernetes)。

---

via: <https://opensource.com/article/19/3/how-run-postgresql-kubernetes>

作者：[Jonathan S. Katz](https://opensource.com/users/jkatz05) 选题：[lujun9972](https://github.com/lujun9972) 译者：[arrowfeng](https://github.com/arrowfeng) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


小白观察：Google 的 Stadia 是否会杀死实体游戏机？

Summary: 在这篇文章中讨论了关于 Stadia 的问题，笔者的结论是 Stadia 不会杀死实体游戏机。

这文章有点水啊

# 小白观察：Google 的 Stadia 是否会杀死实体游戏机？

### Deep News

##### Google 的 Stadia 是否会杀死实体游戏机？

在[这篇文章](https://venturebeat.com/2019/04/21/will-googles-stadia-console-kill-mobile-games/)中讨论了关于 Stadia 的问题，笔者的结论是 Stadia 不会杀死实体游戏机。理由如下：

1. Stadia 对网速有极高依赖，然而并不是所有的设备都有足够的网速。
2. Stadia 需要和游戏厂商合作来开发游戏，但目前盈利等尚不明朗，所以不太可能杀死实体游戏机。

[【VentureBeat】](https://venturebeat.com/2019/04/21/will-googles-stadia-console-kill-mobile-games/)

>
> 能够杀死现有游戏的，不会是我们所能想到的，一定是基础技术有了大的提升后，新的娱乐形态杀死的。
>
>
>

### Quick News

##### 法国推出安全加密聊天应用

法国推出了专属于政府的安全加密聊天应用 Tchap 的测试版，不过近期的测试版显示你只需要将 @elysee.fr (法国总统府的邮件后缀）添加到你的账户中，就可以注册成功。[【Engadget】](https://www.engadget.com/2019/04/21/france-tchap-government-messaging-app/)

##### Apple 希望将更多 iOS 端的应用体验迁移到 macOS 上

根据 9to5Mac 的报道，Apple 可能将一些移动端的应用迁移到 macOS 端。比如 Siri Shortcuts 、 ScreenTime 等。[【9To5Mac】](https://9to5mac.com/2019/04/19/siri-shortcuts-screen-time-mac/)


每日安全资讯：法国政府发布它开发的端对端加密消息应用

# 每日安全资讯：法国政府发布它开发的端对端加密消息应用

<img src="content_image/album_201904_22_111806k8530z5vsjwjqd5i.jpg" alt="" title="">

法国政府正式发布了它开发的替代 Telegram、WhatsApp 等的端对端加密消息应用 Tchap，支持 iOS 和 Android。Tchap 由法国数字部 DINSIC 开发，基于端对端加密、去中心化实时通讯系统 Matrix 的开源客户端 Riot。Tchap 也是开源的，源代码发布在 Github 上，任何感兴趣的机构可以部署自己的 Tchap 版本供内部使用。

来源：solidot.org

### 更多资讯

##### 甲骨文例行更新又来了，这次修复了 297 个漏洞

甲骨文（Oracle）发布了每季一次的 Critical Patch Update 安全更新，总计修复了 297 个产品漏洞，当中有 53 个漏洞的 CVSS（Common Vulnerability Scoring System）评分高达 9 或以上，被视为应优先修复的对象。

来源： 开源中国

详情： <http://t.cn/Eaqv88D>

##### Mozilla Firefox 将默认启用点击跟踪

上周，Chrome、Safari、Opera 和 Microsoft Edge 的新版本被发现不再允许用户关闭“<ruby> 链接审计 <rp>  （ </rp> <rt>  hyperlink auditing </rt> <rp>  ） </rp></ruby>”的功能。链接审计是一项 HTML 标准，被用于跟踪网站链接的点击。它通过创建特定网页的 POST 请求，用户检查请求头文件就可以了解点击的源地址。目前只有 Brave 和 Firefox 这两个浏览器默认禁用链接审计。

来源： solidot.org

详情： <http://t.cn/EaqvuaC>

##### 微软工程师希望独立 impl 进程改进 Chromium 的滚动效果

在拥抱 Chromium 之后，微软正积极为这款开源网页浏览器做贡献。目前谷歌的 Chrome 浏览器拥有自己的平滑滚动功能，而微软希望进一步优化来增强使用体验。在今年早些时候分享了对 Chromium 鼠标行为的看法之后，微软正计划改善 Windows 平台 Chromium 的滚动效果。

来源： cnBeta.COM

详情： <http://t.cn/Eaqvgy5>

##### 法治政府蓝皮书建议：将行政赔偿扩至个人数据保护领域

《法治政府蓝皮书——中国法治政府发展报告（2018）》21 日在中国政法大学发布。针对备受关注的个人数据保护问题，报告建议，将行政赔偿等行政救济方法扩展到个人数据保护领域，促使行政机关加强个人数据的储存安全与保密力度。

来源： 新京报

详情： http://t.cn/EaqPwss

（信息来源于网络，安华金和搜集整理）


HTTPie：替代 Curl 和 Wget 的现代 HTTP 命令行客户端

# HTTPie：替代 Curl 和 Wget 的现代 HTTP 命令行客户端

<img src="content_image/album_201904_22_123041icp13cxtkrs0morx.jpg" alt="" title="">

大多数时间我们会使用 `curl` 命令或是 `wget` 命令下载文件或者做其他事。

我们以前曾写过 [最佳命令行下载管理器](https://www.2daygeek.com/best-4-command-line-download-managers-accelerators-for-linux/) 的文章。你可以点击相应的 URL 连接来浏览这些文章。

* [aria2 – Linux 下的多协议命令行下载工具](https://www.2daygeek.com/aria2-linux-command-line-download-utility-tool/)
* [Axel – Linux 下的轻量级命令行下载加速器](https://www.2daygeek.com/axel-linux-command-line-download-accelerator/)
* [Wget – Linux 下的标准命令行下载工具](https://www.2daygeek.com/wget-linux-command-line-download-utility-tool/)
* [curl – Linux 下的实用的命令行下载工具](https://www.2daygeek.com/curl-linux-command-line-download-manager/)

今天我们将讨论同样的话题。这个实用程序名为 HTTPie。

它是现代命令行 http 客户端，也是 `curl` 和 `wget` 命令的最佳替代品。

### 什么是 HTTPie？

HTTPie (发音是 aitch-tee-tee-pie) 是一个 HTTP 命令行客户端。

HTTPie 工具是现代的 HTTP 命令行客户端，它能通过命令行界面与 Web 服务进行交互。

它提供一个简单的 `http` 命令，允许使用简单而自然的语法发送任意的 HTTP 请求，并会显示彩色的输出。

HTTPie 能用于测试、调试及与 HTTP 服务器交互。

### 主要特点

* 具表达力的和直观语法
* 格式化的及彩色化的终端输出
* 内置 JSON 支持
* 表单和文件上传
* HTTPS、代理和认证
* 任意请求数据
* 自定义头部
* 持久化会话
* 类似 `wget` 的下载
* 支持 Python 2.7 和 3.x

### 在 Linux 下如何安装 HTTPie

大部分 Linux 发行版都提供了系统包管理器，可以用它来安装。

Fedora 系统，使用 [DNF 命令](https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/) 来安装 httpie：

```
$ sudo dnf install httpie
```

Debian/Ubuntu 系统，使用 [APT-GET 命令](https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/) 或 [APT 命令](https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/) 来安装 HTTPie。

```
$ sudo apt install httpie
```

基于 Arch Linux 的系统，使用 [Pacman 命令](https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/) 来安装 HTTPie。

```
$ sudo pacman -S httpie
```

RHEL/CentOS 的系统，使用 [YUM 命令](https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/) 来安装 HTTPie。

```
$ sudo yum install httpie
```

openSUSE Leap 系统，使用 [Zypper 命令](https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/) 来安装 HTTPie。

```
$ sudo zypper install httpie
```

### 用法

#### 如何使用 HTTPie 请求 URL？

HTTPie 的基本用法是将网站的 URL 作为参数。

```
# http 2daygeek.com
HTTP/1.1 301 Moved Permanently
CF-RAY: 4c4a618d0c02ce6d-LHR
Cache-Control: max-age=3600
Connection: keep-alive
Date: Tue, 09 Apr 2019 06:21:28 GMT
Expires: Tue, 09 Apr 2019 07:21:28 GMT
Location: https://2daygeek.com/
Server: cloudflare
Transfer-Encoding: chunked
Vary: Accept-Encoding
```

#### 如何使用 HTTPie 下载文件

你可以使用带 `--download` 参数的 HTTPie 命令下载文件。类似于 `wget` 命令。

```
# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
CF-Cache-Status: HIT
CF-RAY: 4c4a65d5ca360a66-LHR
Cache-Control: public, max-age=7200
Connection: keep-alive
Content-Length: 32066
Content-Type: image/png
Date: Tue, 09 Apr 2019 06:24:23 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: Tue, 09 Apr 2019 08:24:23 GMT
Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT
Server: cloudflare
Set-Cookie: __cfduid=dd2034b2f95ae42047e082f59f2b964f71554791063; expires=Wed, 08-Apr-20 06:24:23 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure
Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png"
Done. 31.31 kB in 0.01187s (2.58 MB/s)
```

你还可以使用 `-o` 参数用不同的名称保存输出文件。

```
# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png -o Anbox-1.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
CF-Cache-Status: HIT
CF-RAY: 4c4a68194daa0a66-LHR
Cache-Control: public, max-age=7200
Connection: keep-alive
Content-Length: 32066
Content-Type: image/png
Date: Tue, 09 Apr 2019 06:25:56 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: Tue, 09 Apr 2019 08:25:56 GMT
Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT
Server: cloudflare
Set-Cookie: __cfduid=d3eea753081690f9a2d36495a74407dd71554791156; expires=Wed, 08-Apr-20 06:25:56 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure
Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-1.png"
Done. 31.31 kB in 0.01551s (1.97 MB/s)
```

#### 如何使用 HTTPie 恢复部分下载？

你可以使用带 `-c` 参数的 HTTPie 继续下载。

```
# http --download --continue https://speed.hetzner.de/100MB.bin -o 100MB.bin
HTTP/1.1 206 Partial Content
Connection: keep-alive
Content-Length: 100442112
Content-Range: bytes 4415488-104857599/104857600
Content-Type: application/octet-stream
Date: Tue, 09 Apr 2019 06:32:52 GMT
ETag: "5253f0fd-6400000"
Last-Modified: Tue, 08 Oct 2013 11:48:13 GMT
Server: nginx
Strict-Transport-Security: max-age=15768000; includeSubDomains

Downloading 100.00 MB to "100MB.bin"
 |  24.14 %   24.14 MB    1.12 MB/s  0:01:07 ETA^C
```

你根据下面的输出验证是否同一个文件：

```
[email protected]:/var/log# ls -lhtr 100MB.bin
-rw-r--r-- 1 root root 25M Apr  9 01:33 100MB.bin
```

#### 如何使用 HTTPie 上传文件？

你可以通过使用带有小于号 `<` 的 HTTPie 命令上传文件

```
$ http https://transfer.sh < Anbox-1.png
```

#### 如何使用带有重定向符号 > 下载文件？

你可以使用带有重定向 `>` 符号的 HTTPie 命令下载文件。

```
# http https://www.2daygeek.com/wp-content/uploads/2019/03/How-To-Install-And-Enable-Flatpak-Support-On-Linux-1.png > Flatpak.png

# ls -ltrh Flatpak.png
-rw-r--r-- 1 root root 47K Apr  9 01:44 Flatpak.png
```

#### 发送一个 HTTP GET 请求？

您可以在请求中发送 HTTP GET 方法。GET 方法会使用给定的 URI，从给定服务器检索信息。

```
# http GET httpie.org
HTTP/1.1 301 Moved Permanently
CF-RAY: 4c4a83a3f90dcbe6-SIN
Cache-Control: max-age=3600
Connection: keep-alive
Date: Tue, 09 Apr 2019 06:44:44 GMT
Expires: Tue, 09 Apr 2019 07:44:44 GMT
Location: https://httpie.org/
Server: cloudflare
Transfer-Encoding: chunked
Vary: Accept-Encoding
```

#### 提交表单?

使用以下格式提交表单。POST 请求用于向服务器发送数据，例如客户信息、文件上传等。要使用 HTML 表单。

```
# http -f POST Ubuntu18.2daygeek.com hello='World'
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 3138
Content-Type: text/html
Date: Tue, 09 Apr 2019 06:48:12 GMT
ETag: "2aa6-5844bf1b047fc-gzip"
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding
```

运行下面的指令以查看正在发送的请求。

```
# http -v Ubuntu18.2daygeek.com
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: ubuntu18.2daygeek.com
User-Agent: HTTPie/0.9.8

hello=World

HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 3138
Content-Type: text/html
Date: Tue, 09 Apr 2019 06:48:30 GMT
ETag: "2aa6-5844bf1b047fc-gzip"
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding
```

#### HTTP 认证？

当前支持的身份验证认证方案是基本认证（Basic）和摘要验证（Digest）。

基本认证：

```
$ http -a username:password example.org
```

摘要验证：

```
$ http -A digest -a username:password example.org
```

提示输入密码：

```
$ http -a username example.org
```

---

via: <https://www.2daygeek.com/httpie-curl-wget-alternative-http-client-linux/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zgj1024](https://github.com/zgj1024) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何检查多个远程 Linux 系统是否打开了指定端口？

Summary: 本教程中提供了两个脚本，这两个脚本都很有用。

本教程中提供了两个脚本，这两个脚本都很有用。

# 如何检查多个远程 Linux 系统是否打开了指定端口？

<img src="content_image/album_201904_22_230802bz5xy1ry55ve65zy.jpg" alt="" title="">

我们最近写了一篇文章关于如何检查远程 Linux 服务器是否打开指定端口。它能帮助你检查单个服务器。

如果要检查五个服务器有没有问题，可以使用以下任何一个命令，如 `nc`（netcat）、`nmap` 和 `telnet`。但是如果想检查 50 多台服务器，那么你的解决方案是什么？

要检查所有服务器并不容易，如果你一个一个这样做，完全没有必要，因为这样你将会浪费大量的时间。为了解决这种情况，我使用 `nc` 命令编写了一个 shell 小脚本，它将允许我们扫描任意数量服务器给定的端口。

如果你要查找单个服务器扫描，你有多个选择，你只需阅读 [检查远程 Linux 系统上的端口是否打开？](/article-10675-1.html) 了解更多信息。

本教程中提供了两个脚本，这两个脚本都很有用。这两个脚本都用于不同的目的，你可以通过阅读标题轻松理解其用途。

在你阅读这篇文章之前，我会问你几个问题，如果你不知道答案你可以通过阅读这篇文章来获得答案。

如何检查一个远程 Linux 服务器上指定的端口是否打开？

如何检查多个远程 Linux 服务器上指定的端口是否打开？

如何检查多个远程 Linux 服务器上是否打开了多个指定的端口？

### 什么是 nc（netcat）命令？

`nc` 即 netcat。它是一个简单实用的 Unix 程序，它使用 TCP 或 UDP 协议进行跨网络连接进行数据读取和写入。

它被设计成一个可靠的 “后端” 工具，我们可以直接使用或由其他程序和脚本轻松驱动它。

同时，它也是一个功能丰富的网络调试和探索工具，因为它可以创建你需要的几乎任何类型的连接，并具有几个有趣的内置功能。

netcat 有三个主要的模式。分别是连接模式，监听模式和隧道模式。

`nc`（netcat）的通用语法：

```
$ nc [-options] [HostName or IP] [PortNumber]
```

### 如何检查多个远程 Linux 服务器上的端口是否打开？

如果要检查多个远程 Linux 服务器上给定端口是否打开，请使用以下 shell 脚本。

在我的例子中，我们将检查端口 22 是否在以下远程服务器中打开，确保你已经更新文件中的服务器列表而不是使用我的服务器列表。

你必须确保已经更新服务器列表 ：`server-list.txt` 。每个服务器（IP）应该在单独的行中。

```
# cat server-list.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
```

使用以下脚本可以达到此目的。

```
# vi port_scan.sh

#!/bin/sh
for server in `more server-list.txt`
do
  #echo $i
  nc -zvw3 $server 22
done
```

设置 `port_scan.sh` 文件的可执行权限。

```
$ chmod +x port_scan.sh
```

最后运行脚本来达到此目的。

```
# sh port_scan.sh

Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
```

### 如何检查多个远程 Linux 服务器上是否打开多个端口？

如果要检查多个服务器中的多个端口，请使用下面的脚本。

在我的例子中，我们将检查给定服务器的 22 和 80 端口是否打开。确保你必须替换所需的端口和服务器名称而不使用是我的。

你必须确保已经将要检查的端口写入 `port-list.txt` 文件中。每个端口应该在一个单独的行中。

```
# cat port-list.txt
22
80
```

你必须确保已经将要检查的服务器（IP 地址）写入 `server-list.txt` 到文件中。每个服务器（IP） 应该在单独的行中。

```
# cat server-list.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
```

使用以下脚本来达成此目的。

```
# vi multiple_port_scan.sh

#!/bin/sh
for server in `more server-list.txt`
do
  for port in `more port-list.txt`
  do
    #echo $server
    nc -zvw3 $server $port
    echo ""
  done
done
```

设置 `multiple_port_scan.sh` 文件的可执行权限。

```
$ chmod +x multiple_port_scan.sh
```

最后运行脚本来实现这一目的。

```
# sh multiple_port_scan.sh
Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.2 80 port [tcp/http] succeeded!

Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.3 80 port [tcp/http] succeeded!

Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.4 80 port [tcp/http] succeeded!

Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.5 80 port [tcp/http] succeeded!

Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.6 80 port [tcp/http] succeeded!

Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.7 80 port [tcp/http] succeeded!
```

---

via: <https://www.2daygeek.com/check-a-open-port-on-multiple-remote-linux-server-using-nc-command/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zero-MK](https://github.com/zero-mk) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：NCSC 发布最常被黑客入侵的密码列表

Summary: 列出了数据泄露中出现的 100000 个最常见的密码，以鼓励用户选择强密码

列出了数据泄露中出现的 100000 个最常见的密码，以鼓励用户选择强密码

# 每日安全资讯：NCSC 发布最常被黑客入侵的密码列表

<img src="content_image/album_201904_23_130222cywfdwuei3isw3ph.jpg" alt="" title="">

英国国家网络安全中心（NCSC）发布了一份列表，列出了数据泄露中出现的 100000 个最常见的密码，以鼓励用户选择强密码。到目前为止，数据泄露中显示的最常用密码是 “123456”，有 2320 万个帐户使用此密码。另外，全世界有 770 万用户选择使用 “123456789” 作为密码。

紧接着排名靠前的三个密码均被超过 300 万用户使用：“qwerty” 出现 3.8 万次，“password” 出现 3.6 万次，“111111” 出现 310 万次。

许多常用的密码都是由一系列简单的数字构成，或将相同数字重复六到七次。

“iloveyou”、“monkey” 和 “dragon” 也排在最常用密码的前 20 位。

此外，成千上万的用户只使用一个名称作为密码。每年有超过 400,000 名用户使用 “ashley”、“michael” 和 “daniel”；“jessica” 和 “charlie” 各被使用超过 300,000 次。

这些可能是用户自己的名字，这意味着如果黑客获取了一个电子邮件地址而没有密码，那么使用受害者的名字来破解它可能会令人大开眼界。

当用户选择简单密码时，乐队也是一个常见的主题。密码列表详细说明 285,706 用户选择 “blink182” 作为他们的密码——这使得 pop-punk 乐队成为最常用的音乐相关密码。“50cent”、“enimem”、“metallica” 和 “slipknot” 都被使用了超过 140,000 次。

球队也是一大密码主题。“Liverpool” 在密码中赢得了最常用的英超足球队冠军头衔。其余最常遭泄露的此类密码分别为 “chelsea”、“arsenal”、“manutd” 和 “everton”。

使用自己喜欢的球队作为密码的人很容易发现自己是黑客攻击的受害者——许多体育迷会在社交媒体上谈论他们最喜欢的球队，因此对于网络犯罪分子来说，在社交媒体上寻找这些信息以破解帐户可能相对简单。

对此，NCSC 技术总监 Ian Levy 博士给出建议：

>
> 密码重用是一个可以避免的主要风险，没有人应该用可以猜到的东西保护敏感数据，比如他们的名字、当地足球队或最喜欢的乐队。
>
>
> 使用难以猜测的密码是一个强有力的第一步。我们建议结合三个随机但令人难忘的单词，这样人们就无法猜出你的密码。
>
>
>

来源：开源中国

### 更多资讯

##### AV-TEST 反病毒测试表明：Google Play Protect让人失望

近日，知名安全评测机构 AV-TEST 对 19 款面向移动平台的防病毒解决方案进行了测试。结果发现，谷歌官方的 Google Play Protect，无法做到完全让人信赖。本轮测试对 19 款 Android 安全软件的防护、可用性、功能性进行了综合评估，满分分别为 6 分、6 分、以及 1 分。

来源： cnBeta.COM

详情： <http://t.cn/EaxuJCK>

##### Google 故意破坏竞争对手的浏览器？

前 Firefox 副总裁 Johnathan Nightingale 早些时候公开指责 Google 通过各种动作破坏 Firefox。他的故事引起了很多人的共鸣。Nightingale 不是第一个提出此类指控的 Firefox 团队成员。去年 Mozilla 的技术项目经理 Chris Peterson 指责 Google 让 YouTube 在 Edge 和 Firefox 上加载缓慢。

来源： solidot.org

详情： <http://t.cn/EaxuaZV>

##### B 站网站后台工程源码疑似泄露 内含部分用户名密码

4 月 22 日消息，据微博@互联网的那点事 爆料称，哔哩哔哩（B 站）整个网站后台工程源码泄露，并且“不少用户名密码被硬编码在代码里面，谁都可以用。”新浪科技在 GitHub 上查询后发现，平台上确实存在由一个名叫“openbilibili”的用户创建的“go-common”代码库。截至发稿时，该项目已获得 6597 个星标和 6050 个代码库分支。

来源： 新浪科技

详情： <http://t.cn/EaxuKYB>

（信息来源于网络，安华金和搜集整理）


在 Linux 中把用户添加到组的四个方法

Summary: Linux 组是用于管理 Linux 中用户帐户的组织单位。组的主要目的是为组的成员定义一组特权。

# 在 Linux 中把用户添加到组的四个方法

<img src="content_image/album_201904_23_125254ml0g10000tiv0k0d.jpg" alt="" title="">

Linux 组是用于管理 Linux 中用户帐户的组织单位。对于 Linux 系统中的每一个用户和组，它都有惟一的数字标识号。它被称为 用户 ID（UID）和组 ID（GID）。组的主要目的是为组的成员定义一组特权。它们都可以执行特定的操作，但不能执行其他操作。

Linux 中有两种类型的默认组。每个用户应该只有一个 <ruby> 主要组 <rt>  primary group </rt></ruby> 和任意数量的 <ruby> 次要组 <rt>  secondary group </rt></ruby>。

* **主要组：** 创建用户帐户时，已将主要组添加到用户。它通常是用户的名称。在执行诸如创建新文件（或目录）、修改文件或执行命令等任何操作时，主要组将应用于用户。用户的主要组信息存储在 `/etc/passwd` 文件中。
* **次要组：** 它被称为次要组。它允许用户组在同一组成员文件中执行特定操作。例如，如果你希望允许少数用户运行 Apache（httpd）服务命令，那么它将非常适合。

你可能对以下与用户管理相关的文章感兴趣。

* [在 Linux 中创建用户帐户的三种方法？](https://www.2daygeek.com/linux-user-account-creation-useradd-adduser-newusers/)
* [如何在 Linux 中创建批量用户？](https://www.2daygeek.com/how-to-create-the-bulk-users-in-linux/)
* [如何在 Linux 中使用不同的方法更新/更改用户密码？](https://www.2daygeek.com/linux-passwd-chpasswd-command-set-update-change-users-password-in-linux-using-shell-script/)

可以使用以下四种方法实现。

* `usermod`：修改系统帐户文件，以反映在命令行中指定的更改。
* `gpasswd`：用于管理 `/etc/group` 和 `/etc/gshadow`。每个组都可以有管理员、成员和密码。
* Shell 脚本：可以让管理员自动执行所需的任务。
* 手动方式：我们可以通过编辑 `/etc/group` 文件手动将用户添加到任何组中。

我假设你已经拥有此操作所需的组和用户。在本例中，我们将使用以下用户和组：`user1`、`user2`、`user3`，另外的组是 `mygroup` 和 `mygroup1`。

在进行更改之前，我希望检查一下用户和组信息。详见下文。

我可以看到下面的用户与他们自己的组关联，而不是与其他组关联。

```
# id user1
uid=1008(user1) gid=1008(user1) groups=1008(user1)

# id user2
uid=1009(user2) gid=1009(user2) groups=1009(user2)

# id user3
uid=1010(user3) gid=1010(user3) groups=1010(user3)
```

我可以看到这个组中没有关联的用户。

```
# getent group mygroup
mygroup:x:1012:

# getent group mygroup1
mygroup1:x:1013:
```

### 方法 1：使用 usermod 命令

`usermod` 命令修改系统帐户文件，以反映命令行上指定的更改。

#### 如何使用 usermod 命令将现有的用户添加到次要组或附加组？

要将现有用户添加到辅助组，请使用带有 `-G` 选项和组名称的 `usermod` 命令。

语法：

```
# usermod [-G] [GroupName] [UserName]
```

如果系统中不存在给定的用户或组，你将收到一条错误消息。如果没有得到任何错误，那么用户已经被添加到相应的组中。

```
# usermod -a -G mygroup user1
```

让我使用 `id` 命令查看输出。是的，添加成功。

```
# id user1
uid=1008(user1) gid=1008(user1) groups=1008(user1),1012(mygroup)
```

#### 如何使用 usermod 命令将现有的用户添加到多个次要组或附加组？

要将现有用户添加到多个次要组中，请使用带有 `-G` 选项的 `usermod` 命令和带有逗号分隔的组名称。

语法：

```
# usermod [-G] [GroupName1,GroupName2] [UserName]
```

在本例中，我们将把 `user2` 添加到 `mygroup` 和 `mygroup1` 中。

```
# usermod -a -G mygroup,mygroup1 user2
```

让我使用 `id` 命令查看输出。是的，`user2` 已成功添加到 `myGroup` 和 `myGroup1` 中。

```
# id user2
uid=1009(user2) gid=1009(user2) groups=1009(user2),1012(mygroup),1013(mygroup1)
```

#### 如何改变用户的主要组？

要更改用户的主要组，请使用带有 `-g` 选项和组名称的 `usermod` 命令。

语法：

```
# usermod [-g] [GroupName] [UserName]
```

我们必须使用 `-g` 改变用户的主要组。

```
# usermod -g mygroup user3
```

让我们看看输出。是的，已成功更改。现在，显示`user3` 主要组是 `mygroup` 而不是 `user3`。

```
# id user3
uid=1010(user3) gid=1012(mygroup) groups=1012(mygroup)
```

### 方法 2：使用 gpasswd 命令

`gpasswd` 命令用于管理 `/etc/group` 和 `/etc/gshadow`。每个组都可以有管理员、成员和密码。

#### 如何使用 gpasswd 命令将现有用户添加到次要组或者附加组？

要将现有用户添加到次要组，请使用带有 `-M` 选项和组名称的 `gpasswd` 命令。

语法：

```
# gpasswd [-M] [UserName] [GroupName]
```

在本例中，我们将把 `user1` 添加到 `mygroup` 中。

```
# gpasswd -M user1 mygroup
```

让我使用 `id` 命令查看输出。是的，`user1` 已成功添加到 `mygroup` 中。

```
# id  user1
uid=1008(user1) gid=1008(user1) groups=1008(user1),1012(mygroup)
```

#### 如何使用 gpasswd 命令添加多个用户到次要组或附加组中？

要将多个用户添加到辅助组中，请使用带有 `-M` 选项和组名称的 `gpasswd` 命令。

语法：

```
# gpasswd [-M] [UserName1,UserName2] [GroupName]
```

在本例中，我们将把 `user2` 和 `user3` 添加到 `mygroup1` 中。

```
# gpasswd -M user2,user3 mygroup1
```

让我使用 `getent` 命令查看输出。是的，`user2` 和 `user3` 已成功添加到 `myGroup1` 中。

```
# getent group mygroup1
mygroup1:x:1013:user2,user3
```

#### 如何使用 gpasswd 命令从组中删除一个用户？

要从组中删除用户，请使用带有 `-d` 选项的 `gpasswd` 命令以及用户和组的名称。

语法：

```
# gpasswd [-d] [UserName] [GroupName]
```

在本例中，我们将从 `mygroup` 中删除 `user1` 。

```
# gpasswd -d user1 mygroup
Removing user user1 from group mygroup
```

### 方法 3：使用 Shell 脚本

基于上面的例子，我知道 `usermod` 命令没有能力将多个用户添加到组中，可以通过 `gpasswd` 命令完成。但是，它将覆盖当前与组关联的现有用户。

例如，`user1` 已经与 `mygroup` 关联。如果要使用 `gpasswd` 命令将 `user2` 和 `user3` 添加到 `mygroup` 中，它将不会按预期生效，而是对组进行修改。

如果要将多个用户添加到多个组中，解决方案是什么？

两个命令中都没有默认选项来实现这一点。

因此，我们需要编写一个小的 shell 脚本来实现这一点。

#### 如何使用 gpasswd 命令将多个用户添加到次要组或附加组？

如果要使用 `gpasswd` 命令将多个用户添加到次要组或附加组，请创建以下 shell 脚本。

创建用户列表。每个用户应该在单独的行中。

```
$ cat user-lists.txt
user1
user2
user3
```

使用以下 shell 脚本将多个用户添加到单个次要组。

```
vi group-update.sh

#!/bin/bash
for user in `cat user-lists.txt`
do
usermod -a -G mygroup $user
done
```

设置 `group-update.sh` 文件的可执行权限。

```
# chmod + group-update.sh
```

最后运行脚本来实现它。

```
# sh group-update.sh
```

让我看看使用 `getent` 命令的输出。 是的，`user1`、`user2` 和 `user3` 已成功添加到 `mygroup` 中。

```
# getent group mygroup
mygroup:x:1012:user1,user2,user3
```

#### 如何使用 gpasswd 命令将多个用户添加到多个次要组或附加组？

如果要使用 `gpasswd` 命令将多个用户添加到多个次要组或附加组中，请创建以下 shell 脚本。

创建用户列表。每个用户应该在单独的行中。

```
$ cat user-lists.txt
user1
user2
user3
```

创建组列表。每组应在单独的行中。

```
$ cat group-lists.txt
mygroup
mygroup1
```

使用以下 shell 脚本将多个用户添加到多个次要组。

```
#!/bin/sh
for user in `more user-lists.txt`
do
for group in `more group-lists.txt`
do
usermod -a -G $group $user
done
```

设置 `group-update-1.sh` 文件的可执行权限。

```
# chmod +x group-update-1.sh
```

最后运行脚本来实现它。

```
# sh group-update-1.sh
```

让我看看使用 `getent` 命令的输出。 是的，`user1`、`user2` 和 `user3` 已成功添加到 `mygroup` 中。

```
# getent group mygroup
mygroup:x:1012:user1,user2,user3
```

此外，`user1`、`user2` 和 `user3` 已成功添加到 `mygroup1` 中。

```
# getent group mygroup1
mygroup1:x:1013:user1,user2,user3
```

### 方法 4：在 Linux 中将用户添加到组中的手动方法

我们可以通过编辑 `/etc/group` 文件手动将用户添加到任何组中。

打开 `/etc/group` 文件并搜索要更新用户的组名。最后将用户更新到相应的组中。

```
# vi /etc/group
```

---

via: <https://www.2daygeek.com/linux-add-user-to-group-primary-secondary-group-usermod-gpasswd/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[NeverKnowsTomorrow](https://github.com/NeverKnowsTomorrow) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux 中国](https://linux.cn/) 荣誉推出


你应该学习哪种编程语言？

Summary: 学习一门新的编程语言是在你的职业生涯中继续前进的好方法，但是应该学习哪一门呢？

学习一门新的编程语言是在你的职业生涯中继续前进的好方法，但是应该学习哪一门呢？

# 你应该学习哪种编程语言？

>
> 学习一门新的编程语言是在你的职业生涯中继续前进的好方法，但是应该学习哪一门呢？
>
>
>

<img src="content_image/album_201904_24_082838tz6rqkrsdyb9bz7s.png" alt="" title="">

如果你想要开始你的编程生涯或继续前进，那么学习一门新语言是一个聪明的主意。但是，大量活跃使用的语言引发了一个问题：哪种编程语言是最好的？要回答这个问题，让我们从一个简单的问题开始：你想做什么样的程序？

如果你想在客户端进行网络编程，那么特定语言 HTML、CSS 和 JavaScript（看似无穷无尽的方言之一）是必须要学习的。

如果你想在服务器端进行 Web 编程，那么选择包括常见的通用语言：C++、Golang、Java、C#、 Node.js、Perl、Python、Ruby 等等。当然，服务器程序与数据存储（例如关系数据库和其他数据库）打交道，这意味着 SQL 等查询语言可能会发挥作用。

如果你正在为移动设备编写原生应用程序，那么了解目标平台非常重要。对于 Apple 设备，Swift 已经取代 Objective C 成为首选语言。对于 Android 设备，Java（带有专用库和工具集）仍然是主要语言。有一些特殊语言，如与 C# 一起使用的 Xamarin，可以为 Apple、Android 和 Windows 设备生成特定于平台的代码。

那么通用语言呢？通常有各种各样的选择。在*动态*或*脚本*语言（如 Perl、Python 和 Ruby）中，有一些新东西，如 Node.js。而 Java 和 C# 的相似之处比它们的粉丝愿意承认的还要多，仍然是针对虚拟机（分别是 JVM 和 CLR）的主要*静态编译*语言。在可以编译为*原生可执行文件*的语言中，C++ 仍在使用，还有后来出现的 Golang 和 Rust 等。通用的*函数式*语言比比皆是（如 Clojure、Haskell、Erlang、F#、Lisp 和 Scala），它们通常都有热情投入的社区。值得注意的是，面向对象语言（如 Java 和 C#）已经添加了函数式构造（特别是 lambdas），而动态语言从一开始就有函数式构造。

让我以 C 语言结尾，它是一种小巧、优雅、可扩展的语言，不要与 C++ 混淆。现代操作系统主要用 C 语言编写，其余部分用汇编语言编写。任何平台上的标准库大多数都是用 C 语言编写的。例如，任何打印 `Hello, world!` 这种问候都是通过调用名为 `write` 的 C 库函数来实现的。

C 作为一种可移植的汇编语言，公开了其他高级语言有意隐藏的底层系统的详细信息。因此，理解 C 可以更好地掌握程序如何竞争执行所需的共享系统资源（如处理器、内存和 I/O 设备）。C 语言既高级又接近硬件，因此在性能方面无与伦比，当然，汇编语言除外。最后，C 是编程语言中的通用语言，几乎所有通用语言都支持某种形式的 C 调用。

有关现代 C 语言的介绍，参考我的书籍《[C 语言编程：可移植的汇编器介绍](https://www.amazon.com/dp/1977056954?ref_=pe_870760_150889320)》。无论你怎么做，学习 C 语言，你会学到比另一种编程语言多得多的东西。

你认为学习哪些编程语言很重要？你是否同意这些建议？在评论告知我们！

---

via: <https://opensource.com/article/19/2/which-programming-languages-should-you-learn>

作者：[Marty Kalin](https://opensource.com/users/mkalindepauledu) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：搜 Wi-Fi 热点 Android 应用数据泄露

# 每日安全资讯：搜 Wi-Fi 热点 Android 应用数据泄露

一款流行的 Android 热点（WiFi）搜寻 App“WiFi Finder”暴露了 200 多万个网络的 WiFi 密码。目前已有数千人下载了这款 WiFi Finder 应用，它允许用户搜索附近的 WiFi 网络。但同时，这款应用也允许用户将 WiFi 密码从自己的设备上传到数据库，供其他人使用。

这个包含了 200 多万个网络密码的数据库并未受到任何保护，允许任何人访问，并批量下载这些内容。

网络安全研究人员萨亚姆·杰恩率先发现了这个数据库，并将其发现报告给了 TechCrunch。

TechCrunch 试图联系开发商，但无济于事。最后，TechCrunch 联系上了数据库托管商 DigitalOcean，后者在一天内就关闭了该数据库。

据悉，数据库中的每条记录都包含了 WiFi 网络名称、精确的地理位置、基本服务集标识符（BSSID）和明文存储的网络密码。

<img src="content_image/album_201904_24_111318vqna0e5f5a40d2f0.jpg" alt="" title="">

来源：新浪科技

### 更多资讯

##### 手机是否需要安装杀毒软件 看完你就知道答案

虽然我们都已经习惯了要在电脑上安装反病毒软件，但是这种习惯在手机上就不那么常见了，很少有人会在手机上安装反病毒软件，那么手机是否会受到病毒的侵扰呢？到底是否需要给手机也安装反病毒软件呢？

来源： 环球科技

详情： <http://t.cn/Ea9tTgH>

##### 俄罗斯黑客瞄准了各国驻欧洲大使馆和相关官员

根据 CheckPoint Research 的一份新报告，俄罗斯黑客最近通过向官员发送伪装成美国国务院官方文件的恶意附件，攻击了欧洲的一些大使馆。黑客攻击的目标是尼泊尔、圭亚那、肯尼亚、意大利、利比里亚、百慕大和黎巴嫩等国的欧洲大使馆。

来源： cnBeta.COM

详情： <http://t.cn/Ea9tnP8>

##### 收集使用未成年人个人信息应征得监护人同意

互联网时代该如何保护个人信息？4 月 20 日，民法典人格权编草案再次提请全国人大常委会会议审议。其中，有关个人信息保护的规定是此次二审稿的重要修改内容之一，引起广泛关注。

来源： 新华网

详情： <http://t.cn/Ea9td6H>

##### 全国人大常委会组成人员建议：对企业泄露个人信息的情况做专门规定

日前，民法典人格权编草案二审稿正式提请十三届全国人大常委会第十次会议审议。《每日经济新闻》记者注意到，在草案二审稿中，就用专章对隐私权和个人信息保护作出专门规定。

来源： 每日经济新闻

详情： <http://t.cn/Ea9tFaC>

（信息来源于网络，安华金和搜集整理）


使用 sgdisk 管理分区

Summary: Roderick W. Smith 的 sgdisk 命令可在命令行中管理硬盘的分区。

# 使用 sgdisk 管理分区

[Roderick W. Smith](https://www.rodsbooks.com/) 的 `sgdisk` 命令可在命令行中管理硬盘的分区。下面将介绍使用它所需的基础知识。

使用 sgdisk 的大多数基本功能只需要了解以下六个参数：

1、`-p` *打印* 分区表：

```
# sgdisk -p /dev/sda
```

2、 `-d x` *删除* 分区 x：

```
# sgdisk -d 1 /dev/sda
```

3、 `-n x:y:z` 创建一个编号 x 的*新*分区，从 y 开始，从 z 结束：

```
# sgdisk -n 1:1MiB:2MiB /dev/sda
```

4、`-c x:y` *更改*分区 x 的名称为 y：

```
# sgdisk -c 1:grub /dev/sda
```

5、`-t x:y` 将分区 x 的*类型*更改为 y：

```
# sgdisk -t 1:ef02 /dev/sda
```

6、`–list-types` 列出分区类型代码：

```
# sgdisk --list-types
```

如你在上面的例子中所见，大多数命令都要求将要操作的硬盘的[设备文件名](https://en.wikipedia.org/wiki/Device_file)指定为最后一个参数。

可以组合上面的参数，这样你可以一次定义所有分区：

```
# sgdisk -n 1:1MiB:2MiB -t 1:ef02 -c 1:grub /dev/sda
```

在值的前面加上 `+` 或 `–` 符号，可以为某些字段指定相对值。如果你使用相对值，`sgdisk` 会为你做数学运算。例如，上面的例子可以写成：

```
# sgdisk -n 1:1MiB:+1MiB -t 1:ef02 -c 1:grub /dev/sda
```

`0` 值对于以下几个字段有特殊意义：

* 对于*分区号*字段，0 表示应使用下一个可用编号（编号从 1 开始）。
* 对于*起始地址*字段，0 表示使用最大可用空闲块的头。硬盘开头的一些空间始终保留给分区表本身。
* 对于*结束地址*字段，0 表示使用最大可用空闲块的末尾。

通过在适当的字段中使用 `0` 和相对值，你可以创建一系列分区，而无需预先计算任何绝对值。例如，如果在一块空白硬盘中，以下 `sgdisk` 命令序列将创建典型 Linux 安装所需的所有基本分区：

```
# sgdisk -n 0:0:+1MiB -t 0:ef02 -c 0:grub /dev/sda
# sgdisk -n 0:0:+1GiB -t 0:ea00 -c 0:boot /dev/sda
# sgdisk -n 0:0:+4GiB -t 0:8200 -c 0:swap /dev/sda
# sgdisk -n 0:0:0 -t 0:8300 -c 0:root /dev/sda
```

上面的例子展示了如何为基于 BIOS 的计算机分区硬盘。基于 UEFI 的计算机上不需要 [grub 分区](https://en.wikipedia.org/wiki/BIOS_boot_partition)。由于 `sgdisk` 在上面的示例中为你计算了所有绝对值，因此你可以在基于 UEFI 的计算机上跳过第一个命令，并且可以无需修改即可运行其余命令。同样，你可以跳过创建交换分区，并且不需要修改其余命令。

还有使用一个命令删除硬盘上所有分区的快捷方式：

```
# sgdisk --zap-all /dev/sda
```

关于最新和详细信息，请查看手册页：

```
$ man sgdisk
```

---

via: <https://fedoramagazine.org/managing-partitions-with-sgdisk/>

作者：[Gregory Bartholomew](https://fedoramagazine.org/author/glb/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Shell 脚本编程陷阱

# Shell 脚本编程陷阱

<img src="content_image/album_201904_24_121450s0zeo02x0eevzkho.jpg" alt="" title="">

Shell 脚本很棒，你可以非常轻松地写出有用的东西来。甚至像是下面这个傻瓜式的命令：

```
# 用含有 Go 的词汇起名字：
$ grep -i ^go /usr/share/dict/* | cut -d: -f2 | sort -R | head -n1
goldfish
```

如果用其他编程语言，就需要花费更多的脑力，用多行代码实现，比如用 Ruby 的话：

```
puts(Dir['/usr/share/dict/*-english'].map do |f|
  File.open(f)
    .readlines
    .select { |l| l[0..1].downcase == 'go' }
end.flatten.sample.chomp)
```

Ruby 版本的代码虽然不是那么长，也并不复杂。但是 shell 版是如此简单，我甚至不用实际测试就可以确保它是正确的。而 Ruby 版的我就没法确定它不会出错了，必须得测试一下。而且它要长一倍，看起来也更复杂。

这就是人们使用 Shell 脚本的原因，它简单却实用。下面是另一个例子：

```
curl https://nl.wikipedia.org/wiki/Lijst_van_Nederlandse_gemeenten |
    grep '^<li><a href=' |
    sed -r 's|<li><a href="/wiki/.+" title=".+">(.+)</a>.*</li>|\1|' |
    grep -Ev '(^Tabel van|^Lijst van|Nederland)'
```

这个脚本可以从维基百科上获取荷兰基层政权的列表。几年前我写了这个临时的脚本，用来快速生成一个数据库，到现在它仍然可以正常运行，当时写它并没有花费我多少精力。但要用 Ruby 完成同样的功能则会麻烦得多。

---

现在来说说 shell 的缺点吧。随着代码量的增加，你的脚本会变得越来越难以维护，但你也不会想用别的语言重写一遍，因为你已经在这个 shell 版上花费了很多时间。

我把这种情况称为“Shell 脚本编程陷阱”，这是[沉没成本谬论](https://youarenotsosmart.com/2011/03/25/the-sunk-cost-fallacy/)的一种特例（LCTT 译注：“沉没成本谬论”是一个经济学概念，可以简单理解为，对已经投入的成本可能被浪费而念念不忘）。

实际上许多脚本会增长到超出预期的大小，你经常会花费过多的时间来“修复某个 bug”，或者“添加一个小功能”。如此循环往复，让人头大。

如果你从一开始就使用 Python、Ruby 或是其他类似的语言来写这个程序，你可能会在写第一版的时候多花些时间，但以后维护起来就容易很多，bug 也肯定会少很多。

以我的 [packman.vim](https://github.com/Carpetsmoker/packman.vim) 脚本为例。它起初只包含一个简单的用来遍历所有目录的 `for` 循环，外加一个 `git pull`，但在这之后就刹不住车了，它现在有 200 行左右的代码，这肯定不能算是最复杂的脚本，但假如我一上来就按计划用 Go 来编写它的话，那么增加一些像“打印状态”或者“从配置文件里克隆新的 git 库”这样的功能就会轻松很多；添加“并行克隆”的支持也几乎不算个事儿了，而在 shell 脚本里却很难实现（尽管不是不可能）。事后看来，我本可以节省时间，并且获得更好的结果。

出于类似的原因，我很后悔写出了许多这样的 shell 脚本，而我在 2018 年的新年誓言就是不要再犯类似的错误了。

### 附录：问题汇总

需要指出的是，shell 编程的确存在一些实际的限制。下面是一些例子：

* 在处理一些包含“空格”或者其他“特殊”字符的文件名时，需要特别注意细节。绝大多数脚本都会犯错，即使是那些经验丰富的作者（比如我）编写的脚本，因为太容易写错了，[只添加引号是不够的](https://dwheeler.com/essays/filenames-in-shell.html)。
* 有许多所谓“正确”和“错误”的做法。你应该用 `which` 还是 `command`？该用 `$@` 还是 `$*`，是不是得加引号？你是该用 `cmd $arg` 还是 `cmd "$arg"`？等等等等。
* 你没法在变量里存储空字节（0x00）；shell 脚本处理二进制数据很麻烦。
* 虽然你可以非常快速地写出有用的东西，但实现更复杂的算法则要痛苦许多，即使用 ksh/zsh/bash 扩展也是如此。我上面那个解析 HTML 的脚本临时用用是可以的，但你真的不会想在生产环境中使用这种脚本。
* 很难写出跨平台的通用型 shell 脚本。`/bin/sh` 可能是 `dash` 或者 `bash`，不同的 shell 有不同的运行方式。外部工具如 `grep`、`sed` 等，不一定能支持同样的参数。你能确定你的脚本可以适用于 Linux、macOS 和 Windows 的所有版本吗（无论是过去、现在还是将来）？
* 调试 shell 脚本会很难，特别是你眼中的语法可能会很快变得记不清了，并不是所有人都熟悉 shell 编程的语境。
* 处理错误会很棘手（检查 `$?` 或是 `set -e`），排查一些超过“出了个小错”级别的复杂错误几乎是不可能的。
* 除非你使用了 `set -u`，变量未定义将不会报错，而这会导致一些“搞笑事件”，比如 `rm -r ~/$undefined` 会删除用户的整个家目录（[瞅瞅 Github 上的这个悲剧](https://github.com/ValveSoftware/steam-for-linux/issues/3671)）。
* 所有东西都是字符串。一些 shell 引入了数组，能用，但是语法非常丑陋和费解。带分数的数字运算仍然难以应付，并且依赖像 `bc` 或 `dc` 这样的外部工具（`$(( .. ))` 这种方式只能对付一下整数）。

**反馈**

你可以发邮件到 [martin@arp242.net](mailto:martin@arp242.net)，或者[在 GitHub 上创建 issue](https://github.com/Carpetsmoker/arp242.net/issues/new) 来向我反馈，提问等。

---

via: <https://arp242.net/weblog/shell-scripting-trap.html>

作者：[Martin Tournoij](https://arp242.net/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[jdh8383](https://github.com/jdh8383) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


增强边缘计算的安全性

Summary: 边缘计算环境带来的安全风险迫使公司必须特别关注它的安全措施。

边缘计算环境带来的安全风险迫使公司必须特别关注它的安全措施。

# 增强边缘计算的安全性

>
> 边缘计算环境带来的安全风险迫使公司必须特别关注它的安全措施。
>
>
>

<img src="content_image/album_201904_24_230338sf58uh94vu4p44of.jpg" alt="" title="">

说数据安全是高管们和董事会最关注的问题已经是陈词滥调了。但问题是：数据安全问题不会自己消失。

骇客和攻击者一直在寻找利用缺陷的新方法。就像公司开始使用人工智能和机器学习等新兴技术来自动化地保护他们的组织一样，那些不良分子们也在使用这些技术来达成他们的目的。

简而言之，安全问题是一定不能忽视的。现在，随着越来越多的公司开始使用边缘计算，如何保护这些边缘计算环境，需要有新的安全考量。

### 边缘计算的风险更高

正如 Network World 的一篇文章所说，边缘计算的安全架构应该将重点放在物理安全上。这并不是说要忽视保护传输过程中的数据。而是说，实际的物理环境和物理设备更加值得关注。

例如，边缘计算的硬件设备通常位于较大的公司或者广阔空间中，有时候是在很容易进入的共享办公室和公共区域里。从表面上看，这节省了成本，能更快地访问到相关的数据，而不必在后端的数据中心和前端的设备之间往返。

但是，如果没有任何级别的访问控制，这台设备就会暴露在恶意操作和简单人为错误的双重风险之下。想象一下办公室的清洁工意外地关掉了设备，以及随之而来的停机所造成的后果。

另一个风险是 “影子边缘 IT”。有时候非 IT 人员会部署一个边缘设备来快速启动项目，却没有及时通知 IT 部门这个设备正在连接到网络。例如，零售商店可能会主动安装他们自己的数字标牌，或者，销售团队会将物联网传感器应用到电视中，并在销售演示中实时地部署它们。

在这种情况下，IT 部门很少甚至完全看不到这些边缘设备，这就使得网络可能暴露在外。

### 保护边缘计算环境

部署微型数据中心（MDC）是规避上述风险的一个简单方法。

>
> “在历史上，大多数这些[边缘]环境都是不受控制的，”施耐德电气安全能源部门的首席技术官和创新高级副总裁 Kevin Brown 说。“它们可能是第 1 级，但很可能是第 0 级类型的设计 —— 它们就像开放的配线柜。它们现在需要像微型数据中心一样的对待。你管理它需要像管理关键任务数据中心一样”
>
>
>

单说听起来的感觉，这个解决方案是一个安全、独立的机箱，它包括在室内和室外运行程序所需的所有存储空间、处理性能和网络资源。它同样包含必要的电源、冷却、安全和管理工具。

而它最重要的是高级别的安全性。这个装置是封闭的，有上锁的门，可以防止非法入侵。通过合适的供应商，DMC 可以进行定制，包括用于远程数字化管理的监控摄像头、传感器和监控技术。

随着越来越多的公司开始利用边缘计算的优势，他们必须利用安全解决方案的优势来保护他们的数据和边缘环境。

在 APC.com 上了解保护你的边缘计算环境的最佳方案。

---

via: <https://www.networkworld.com/article/3388130/enhanced-security-at-the-edge.html#tk.rss_all>

作者：[Anne Taylor](https://www.networkworld.com/author/Anne-Taylor/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[hopefully2333](https://github.com/hopefully2333) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


喜欢 Netflix 么？你应该感谢 FreeBSD

Summary: Netflix 是世界上最受欢迎的流媒体服务之一。对，你已经知道了。但你可能不知道的是 Netflix 使用 FreeBSD 向你提供内容。

大企业才有能力跟最新，小企业不用稳定版遇到问题就没辙了。

# 喜欢 Netflix 么？你应该感谢 FreeBSD

Netflix 是世界上最受欢迎的流媒体服务之一。对，你已经知道了。但你可能不知道的是 Netflix 使用 [FreeBSD](https://www.freebsd.org/) 向你提供内容。

是的。Netflix 依靠 FreeBSD 来构建其内部内容交付网络（CDN）。

[CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/) 是一组位于世界各地的服务器。它主要用于向终端用户分发像图像和视频这样的“大文件”。

Netflix 没有选择商业 CDN 服务，而是建立了自己的内部 CDN，名为 [Open Connect](https://openconnect.netflix.com/en/)。

Open Connect 使用[自定义硬件](https://openconnect.netflix.com/en/hardware/)：Open Connect Appliance。你可以在下面的图片中看到它。它可以每秒处理 40Gb 的数据，存储容量为 248 TB。

Netflix 免费为合格的互联网服务提供商（ISP） 提供 Open Connect Appliance。通过这种方式，大量的 Netflix 流量得到了本地化，ISP 可以更高效地提供 Netflix 内容。

Open Connect Appliance 运行在 FreeBSD 操作系统上，并且[几乎完全运行开源软件](https://openconnect.netflix.com/en/software/)。

### Open Connect 使用最新版 FreeBSD

你或许会觉得 Netflix 会在这样一个关键基础设施上使用 FreeBSD 的稳定版本，但 Netflix 会跟踪 [FreeBSD 最新/当前版本](https://www.bsdnow.tv/tutorials/stable-current)。Netflix 表示，跟踪“最新版”可以让他们“保持前瞻性，专注于创新”。

以下是 Netflix 跟踪最新版 FreeBSD 的好处：

* 更快的功能迭代
* 更快地使用 FreeBSD 的新功能
* 更快的 bug 修复
* 实现协作
* 尽量减少合并冲突
* 摊销合并“成本”

>
> 运行 FreeBSD “最新版” 可以让我们非常高效地向用户分发大量数据，同时保持高速的功能开发。
>
>
> Netflix
>
>
>

请记得，甚至[谷歌也使用 Debian](https://itsfoss.com/goobuntu-glinux-google/) 测试版而不是 Debian 稳定版。也许这些企业更喜欢最先进的功能。

与谷歌一样，Netflix 也计划向上游提供代码。这应该有助于 FreeBSD 和其他基于 FreeBSD 的 BSD 发行版。

那么 Netflix 用 FreeBSD 实现了什么？以下是一些统计数据：

>
> 使用 FreeBSD 和商业硬件，我们在 16 核 2.6 GHz CPU 上使用约 55％ 的 CPU，实现了 90 Gb/s 的 TLS 加密连接。
>
>
> Netflix
>
>
>

如果你想了解更多关于 Netflix 和 FreeBSD 的信息，可以参考 [FOSDEM 的这个演示文稿](https://fosdem.org/2019/schedule/event/netflix_freebsd/attachments/slides/3103/export/events/attachments/netflix_freebsd/slides/3103/FOSDEM_2019_Netflix_and_FreeBSD.pdf)。你还可以在[这里](http://mirror.onet.pl/pub/mirrors/video.fosdem.org/2019/Janson/netflix_freebsd.webm)观看演示文稿的视频。

目前，大型企业主要依靠 Linux 来实现其服务器基础架构，但 Netflix 已经信任了 BSD。这对 BSD 社区来说是一件好事，因为如果像 Netflix 这样的行业领导者重视 BSD，那么其他人也可以跟上。你怎么看？

---

via: <https://itsfoss.com/netflix-freebsd-cdn/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


小白观察：已经 14 岁的 Scientific Linux 将停止开发

Summary: Scientific Linux 是一个由费米实验室和其他的研究机构基于 Red Hat Enterprise Linux 开发的针对于科学实验场景下的 Linux 发行版本，主要收录了一些上游产品不会收录的软件包，比如 R 语言等。

# 小白观察：已经 14 岁的 Scientific Linux 将停止开发

### Big News

##### 已经 14 岁的 Scientific Linux 将停止开发

Scientific Linux 是极少数专注于科学的GNU / Linux 发行版之一，是由费米实验室和其他的研究机构基于 Red Hat Enterprise Linux 开发的针对于科学实验场景下的 Linux 发行版本，主要收录了一些上游产品不会收录的软件包，比如 R 语言等。现在，差不多 14 年后，那些努力维护的人们[决定是时候休息了](http://scientificlinuxforum.org/index.php?showtopic=3852)，不再发布新版本的 Scientific Linux。[【Softpedia】](https://news.softpedia.com/news/scientific-linux-will-be-discontinued-as-fermilab-moves-to-centos-linux-525789.shtml)

>
> Scientific Linux 在过去网络、资源不足的情况下，是一个好的解决方案，但如今各方面的资源都很充沛，我们可以有更好的方案来解决这个问题。
>
>
>

### Quick News

##### QEMU 4.0.0 发布 几乎可以模拟任何硬件设备的模拟器

QEMU 是一个纯软件实现的通用模拟器和虚拟机，它有三种模式，几乎可以模拟任何硬件设备：

* 完整系统模拟：可在任何支持的硬件架构上运行任何操作系统
* 用户模式模拟：运行另一个 Linux/BSD 程序
* 虚拟化：接近本机性能运行 KVM 和 Xen 虚拟机。

[【cnbeta】](https://www.cnbeta.com/articles/soft/840967.htm)

##### 深度学习可以帮助我们解决自杀的问题

纽约大学的一项最新研究表明，借助自然语言处理技术，可以实现通过收听录音来分析退伍军人的创伤后应激障碍，从而解决退伍军人自杀的问题。[【The Next Web】](https://thenextweb.com/artificial-intelligence/2019/04/24/deep-learning-can-help-us-eradicate-suicide-but-only-if-we-let-it/)

##### MongoDB 收购了移动端数据库解决方案 Realm

Realm 是一个非常好用的移动端数据库解决方案，开发者可以使用 Realm 来替代 SQLite。 Realm 发布了文章说明了其被 MongoDB 收购的信息。[【Realm Blog】](https://realm.io/blog/mongodb-to-acquire-realm-the-future-is-bright/)

##### Facebook 的马克·扎克伯格启动了他自己的 Podcast

马克·扎克伯格启动了他自己的 Podcast：Tech & Society with Mark Zuckerberg。 在这个播客中，马克·扎克伯格会分享会他和一些其他的人士的一些讨论。[【Engadget】](https://www.engadget.com/2019/04/24/mark-zuckerberg-podcast/)


每日安全资讯：除华硕外至少还有 6 家公司受到“影锤”行动攻击

Summary: 影锤攻击行动在最初是在华硕的升级服务中发现的新型供应链攻击方式。

影锤攻击行动在最初是在华硕的升级服务中发现的新型供应链攻击方式。

# 每日安全资讯：除华硕外至少还有 6 家公司受到“影锤”行动攻击

<img src="content_image/album_201904_25_093022mbgqtorte2pqtuqz.jpg" alt="" title="">

在深入调查后卡巴斯基表示，华硕并非是<ruby> 影锤 <rp>  （ </rp> <rt>  ShadowHammer </rt> <rp>  ） </rp></ruby>攻击行动的唯一受害者，至少还有6家其他组织被攻击者渗透。除了华硕之外，卡巴斯基表示还有来自泰国的游戏发行商 Electronics Extreme、网页&IT 基础服务公司 Innovative Extremist、韩国游戏公司 Zepetto，另外还有来自韩国的一家视频游戏开发商、一家综合控股公司和一家制药公司。

影锤攻击行动在最初是在华硕的升级服务中发现的新型供应链攻击方式。华硕电脑一般都默认预装了华硕的 Live Update Utility 软件，用于更新华硕电脑专用的驱动、软件、BIOS 和补丁等，用户在使用该软件更新时可能会安装植入后门程序的软件更新包。黑客疑似入侵控制了华硕的更新服务，篡改使用合法证书签署的安装包，在官方给用户推送的升级软件包中加入了恶意代码。

来源：cnBeta.COM

### 更多资讯

##### GitHub 公开 Bilibili 寄来的 DMCA 删除通知

根据 GitHub 的透明政策，当一个代码库应版权所有者的要求移除，它会公开对方发来的 DMCA 删除通知。本周早些时候，匿名人士[公布了](https://www.solidot.org/story?sid=60351)Bilibili 网站后台工程源代码，Bilibili 迅速发出 DMCA 通知删除该代码库。现在，GitHub [公开了](https://github.com/github/dmca/blob/master/2019/04/2019-04-23-bilibili.md) Bilibili 寄来的 DMCA 删除通知。

这个通知引人注目之处在于它非常的不正式。Bilibili 是一个在美国上市的中国知名网站，但它的通知一点不像是一个正式的法律文件，它的开头是“Hello Dear Github:”，然后是“We Are:”，最后一句是“求求你们帮助我们吧，还加了三个感叹号（Please help us!!!）”，就像它的源代码一样，它的通知也在社交网络上引发了广泛热议。

来源： solidot.org

详情： <http://t.cn/EajnbX6>

##### 腾讯安全提醒：暴风影音等数千款 APP 遭恶意 SDK 嵌入

4 月 24 日消息，公众号“腾讯安全联合实验室”称，近日，腾讯安全反诈骗实验室追踪到一款恶意 SDK 子包，该恶意子包已“潜伏”在掌通家园、暴风影音、天天看、塔读文学等数千款移动应用中，潜在可能影响上千万用户。

来源： 快科技

详情： <http://t.cn/EajnfU3>

##### 这个黑客靠猜测私钥 成功窃取了 4.5 万个 ETH

4 月 23 日，分析机构 Independent Security Evaluators 发布的一份报告称，一名“区块链强盗”通过成功猜测安全性较弱的私钥，成功窃取了近 4.5 万个 ETH。

来源： 新浪财经综合

详情： <http://t.cn/EajnJgS>

##### 日媒：日本企业至少 268 万份客户信息可能外泄

中新网 4 月 24 日电，据日本共同社 24 日统计报道，由于遭受网络攻击，2018 年日本企业发生外泄或可能外泄的个人信息至少达到268万份。据悉，日本酒店和大学的信息外泄情况严重。

来源： 中国新闻网

详情： <http://t.cn/EajnS0N>

（信息来源于网络，安华金和搜集整理）