2016年10月

据 Linus Torvalds 最近的一则 Google+ 帖子,他开玩笑的说,当 Linux 项目有 6 百万个 Git 对象时就发布 Linux 5.0 内核。

Linux 内核主要的里程碑版本,比如 Linux 3.0、Linux 4.0 都是发布于 Git 对象数量分别达到了 2 百万和 4 百万时,而在2016 年 10 月 8 日,当前的 Git 对象已经达到了 5 百万,所以,看起来到下一个百万数量线时,就会发布 Linux 5.0 了。

“现在我们正处于 Linux 4.0 和 5.0 中间,”Linus Torvalds 说,“换句话说: 3.0 发布于内核 Git 对象数据库有 2 百万个对象时,而 4.0 发布于 4 百万时。所以,很自然的,按数字来说,毫无疑问 5.0 应该在我们到达 6 百万对象时发布。”

正如你已经知道的, Linux 4.8 内核已经于 2016 年 10 月 2 日发布,而且由于一个严重错误,很快发布了第一个维护版本 4.8.1。这就代表目前已经进入了 Linux 4.9 内核的开发阶段,它也是下一个 LTS 分支。而就在下周 10 月 16 日,4.9 就会发布其第一个 RC 版本。

Linux 5.0 内核的开发将于 2016 年 12 月开始

如果 Linux 4.9 内核能够正常发布,有 7 个 RC 版本的话,那它应该正式发布于 12 月 4 日。如果不幸的遇到了一些问题而延迟,那有可能要到 12 月中旬才能开启 Linux 5.0 内核的合并窗口,也许会在今年的圣诞节前发布第一个 RC 版本。

而且,如果 Linux 5.0 的开发也是常规的 7 个 RC 版本的话, 第二个 RC 版本应该出现在明年 1 月 8 日,而最后一个则会在 2017 年的 2 月中旬。不管怎么说,我们会在 2 月份见到 Linux 5.0 内核的正式发布——当然,如果 6 百万 Git 对象的线达到了的话。

为了通过命令行和系统互动,每一款 Linux 发行版都有一款默认的终端仿真器。但是,默认的终端应用可能不适合你。为了大幅提升你工作的速度,有好多款终端应用提供了更多的功能,可以同时执行更多的任务。这些有用的终端仿真器就包括 Terminator,这是一款 Linux 系统下支持多窗口的自由开源的终端仿真器。

什么是 Linux 终端仿真器

Linux 终端仿真器是一个让你和 shell 交互的程序。所有的 Linux 发行版都会自带一款 Linux 终端应用让你向 shell 传递命令。

Terminator,一款自由开源的 Linux 终端应用

Terminator 是一款 Linux 终端模拟器,提供了你的默认的终端应用不支持的多个特性。它提供了在一个窗口创建多个终端的功能,以加快你的工作速度。除了多窗口外,它也允许你修改其它特性,例如字体、字体颜色、背景色等等。让我们看看我们如何安装它,并且如何在不同的 Linux 发行版下使用 Terminator。

如何在 Linux 下安装 Terminator?

在基于 Ubuntu 的发行版上安装 Terminator

Terminator 在默认的 Ubuntu 仓库就可以使用。所以你不需要添加额外的 PPA。只需要使用 APT 或者“软件应用”在 Ubuntu 下直接安装。

sudo apt-get install terminator

假如你的默认的仓库中 Terminator 不可用,只需要使用源码编译 Terminator 即可。

下载 Terminator 源码并且解压到你的桌面。现在打开你的默认的终端,然后 cd 到解压的目录。

现在就可以使用下面的命令来安装 Terminator 了:

sudo ./setup.py install

在 Fedora 及衍生的操作系统上安装 Terminator

dnf install terminator

在 OpenSuse 上安装 Terminator

参见此文:在 OPENSUSE 上安装

如何在一个窗口使用多个终端?

安装好 Terminator 之后,你可以简单的在一个窗口打开多个终端。只需要右键点击并切分。

只要你愿意,你可以创建尽可能多的终端,只要你能管理得过来。

定制终端

右键点击终端,并单击属性。现在你可以定制字体、字体颜色、标题颜色和背景,还有终端字体颜色和背景。

结论:什么是你最喜欢的终端模拟器

Terminator 是一款先进的终端模拟器,它可以让你自定义界面。如果你还没有从你默认的终端模拟器中切换过来的话,你可以尝试一下它。我知道你将会喜欢上它。如果你正在使用其他的自由开源的终端模拟器的话,请让我们知道你最喜欢的那一款。不要忘了和你的朋友分享这篇文章。或许你的朋友正在寻找类似的东西。


via: http://www.linuxandubuntu.com/home/terminator-a-linux-terminal-emulator-with-multiple-terminals-in-one-window

作者:linuxandubuntu 译者:yangmingming 校对:wxy

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

有如此之多的各种新的云计算技术、工具和技术需要我们跟进,到底从哪里开始学习是一个艰难的决定。这一系列下一代云计算技术的文章旨在让你快速了解新兴和快速变化领域的重大项目和产品,比如软件定义网络(SDN)、容器,以及其交叉领域:容器网络。

对于企业容器部署,容器和网络之间的关系仍然是一个挑战。容器需要网络功能来连接分布式应用程序。根据一篇最新的企业网络星球的文章,一部分的挑战是“以隔离的方式部署容器,在提供隔离自己容器内数据的所需功能的同时,保持有效的连接性”。

流行的容器平台 Docker,使用了软件定义虚拟网络来连接容器与本地网络。此外,它使用 Linux 的桥接功能和虚拟可扩展局域网(VXLAN)技术,可以在同一 Swarm 或容器集群内互相沟通。Docker 的插件架构也支持其他网络管理工具来管理容器网络,比如下面的提到的工具。

容器网络上的创新使得容器可以跨主机连接到其他容器上。这使开发人员可以在开发环境中,在一个主机上部署一个容器来运行一个应用,然后可以过渡到测试环境中,进而到生产环境中,使应用可以持续集成,敏捷开发,快速部署。

容器网络工具有助于实现容器网络的可扩展性,主要是通过:

  1. 使复杂的,多主机系统能够跨多个容器主机进行分发。
  2. 允许构建跨越多个公有云和私有云平台上的大量主机的容器系统。

John Willis speaking 在 Open Networking Summit 2016.

要获取更多信息,查看 Docker 网络教程,是由 Brent Salisbury 和 John Willis 在最近的 Open Networking Summit (ONS)讲演的。更多关于 ONS 的演讲内容可以在这里找到。

你应该知道的容器网络工具和项目包括下述:

  • Calico -- Calico 项目(源自 Metaswitch)利用边界网关协议(BGP)和集成的云编排系统来保证虚拟机和容器之间的 IP 通信安全。
  • Flannel -- Flannel (之前叫 rudder) 源自 CoreOS,它提供了一个覆盖网络,可以作为一个现有的 SDN 解决方案的替代品。
  • Weaveworks -- Weaveworks 项目管理容器的工具包括 Weave Net、Weave Scope、Weave Flux。Weave Net 是一种用于构建和部署 Docker 容器的网络工具。
  • Canal -- 就在本周,CoreOS 和 Tigera 宣布了新的开源项目 Canal 的信息。据其声明,Canal 项目旨在结合部分 Calico 和 Flannel,“构造网络安全策略到网络架构和云管理平台之中”。

你可以通过 Linux 基金会的免费“云基础设施技术”课程来了解更多关于容器管理、软件定义网络和其他下一代云技术,这是一个在 edX 上提供的大规模公开在线课程。课程注册目前已经开放,课程内容于 6 月开放。


via: https://www.linux.com/news/4-container-networking-tools-know

作者:AMBER ANKERHOLZ 译者:Bestony 校对:wxy

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

在 Canonical 的 Webapps 团队,我们总在寻找可以为开发者所用的 web 和 web 相关技术。我们想让每个人生活更轻松,让 web 开发者更加熟悉工具的使用,并且在 Ubuntu 上提供一个使用它们的简单途径。

我们提供对 web 应用以及创建和打包 Cordova 应用的支持,这使得在 Ubuntu 上使用任意 web 框架来创造美妙的应用体验成为可能。

其中一个可以在这些情景中使用的主流框架就是 React.js。React.js 是一个拥有声明式编程模型和强大的组件系统的 UI 框架,它主要侧重于 UI 的构建,所以你可以在你喜欢的任何地方用上它。

然而这些应用场景太广泛了,有时候你可能需要更高的性能,或者能够直接用原生 UI 组件来开发,但是在一个不太熟悉的场景中使用它可能不合时宜。如果你熟悉 React.js,那么通过 React Native 来开发可以毫不费力地将你所有现有的知识和工具迁移到完全的原生组件开发中。React Native 是 React.js 的姐妹项目,你可以用同样的方式和代码来创建一个直接使用原生组件并且拥有原生级别性能的应用,而且这就和你期待的一样轻松快捷。

我们很高兴地宣布随着我们对 HTML5 应用的支持,现在可以在 Ubuntu 平台上开发 React Native 应用了。你可以移植你现有的 iOS 或 Android 版本的 React Native 应用,或者利用你的 web 开发技能来创建一个新的应用。

你可以在 这里 找到 React Native Ubuntu 的源代码,要开始使用时,跟随 README-ubuntu.md 的指导,并创建你的第一个应用吧。

Ubuntu 的支持包括生成软件包的功能。通过 React Native CLI,构建一个 snap 软件包只需要简单执行 react-native package-ubuntu --snap 这样的命令。还可以为 Ubuntu 设备构建一个 click 包,这意味着 React Native Ubuntu 应用从一开始就可以放到 Ubuntu 商店了。

在不久的将来会有很多关于在 Ubuntu 上开发一个 React Native 应用你所需要了解的东西的博文,例如创建应用、开发流程以及打包并发布到商店等等。还会有一些关于怎样开发新型的可复用的模块的信息,这些模块可以给运行时环境增加额外的功能,并且可以发布为 npm 模块。

赶快去实践一下吧,看看你能创造出些什么来。


via: https://developer.ubuntu.com/en/blog/2016/08/05/introducing-react-native-ubuntu/

作者:Justin McPherson 译者:Mars Wong 校对:wxy

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

很久之前,我的个人网站被攻击了。我不知道它是如何发生的,但它确实发生了。幸运的是,攻击带来的破坏是很小的:一小段 JavaScript 被注入到了某些页面的底部。我更新了 FTP 和其它的口令,清理了一些文件,事情就这样结束了。

有一点使我很恼火:在当时,还没有一种简便的方案能够使我知道那里有问题,更重要的是能够保护网站的访客不被这段恼人的代码所扰。

现在有一种方案出现了,这种技术在上述两方面都十分的成功。它就是 内容安全策略 content security policy (CSP)。

什么是 CSP?

其核心思想十分简单:网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的与什么是需要被禁止的。

这里有一个 PHP 的例子:

<?php
    header("Content-Security-Policy: <your directives>");
?>

一些指令

你可以定义一些全局规则或者定义一些涉及某一类资源的规则:

default-src 'self' ;
     # self = 同端口,同域名,同协议 => 允许

基础参数是 default-src:如果没有为某一类资源设置指令规则,那么浏览器就会使用这个默认参数值。

script-src 'self' www.google-analytics.com ;
     # 来自这些域名的 JS 文件 => 允许

在这个例子中,我们已经授权了 www.google-analytics.com 这个域名来源的 JavaScript 文件使用到我们的网站上。我们也添加了 'self' 这个关键词;如果我们通过 script-src 来重新设置其它的规则指令,它将会覆盖 default-src 规则。

如果没有指明协议(scheme)或端口,它就会强制选择与当前页面相同的协议或端口。这样做防止了混合内容(LCTT 译注:混合内容指 HTTPS 页面中也有非 HTTPS 资源,可参见: https://developer.mozilla.org/zh-CN/docs/Security/MixedContent )。如果页面是 https://example.com,那么你将无法加载 http://www.google-analytics.com/file.js 因为它已经被禁止了(协议不匹配)。然而,有一个例外就是协议的提升是被允许的。如果 http://example.com 尝试加载 https://www.google-analytics.com/file.js,接着协议或端口允许被更改以便协议的提升。

style-src 'self' data: ;
     # Data-Uri 嵌入 CSS => 允许

在这个例子中,关键词 data: 授权了在 CSS 文件中 data 内嵌内容。

在 CSP 1 规范下,你也可以设置如下规则:

  • img-src 有效的图片来源
  • connect-src 应用于 XMLHttpRequest(AJAX),WebSocket 或 EventSource
  • font-src 有效的字体来源
  • object-src 有效的插件来源(例如,<object><embed><applet>
  • media-src 有效的 <audio><video> 来源

CSP 2 规范包含了如下规则:

  • child-src 有效的 web workers 和 元素来源,如 <frame><iframe> (这个指令用来替代 CSP 1 中废弃了的 frame-src 指令)
  • form-action 可以作为 HTML <form> 的 action 的有效来源
  • frame-ancestors 使用 <frame><iframe><object><embed><applet> 内嵌资源的有效来源
  • upgrade-insecure-requests 命令用户代理来重写 URL 协议,将 HTTP 改到 HTTPS (为一些需要重写大量陈旧 URL 的网站提供了方便)。

为了更好的向后兼容一些废弃的属性,你可以简单的复制当前指令的内容同时为那个废弃的指令创建一个相同的副本。例如,你可以复制 child-src 的内容同时在 frame-src 中添加一份相同的副本。

CSP 2 允许你添加路径到白名单中(CSP 1 只允许域名被添加到白名单中)。因此,相较于将整个 www.foo.com 域添加到白名单,你可以通过添加 www.foo.com/some/folder 这样的路径到白名单中来作更多的限制。这个需要浏览器中 CSP 2 的支持,但它很明显更安全。

一个例子

我为 Web 2015 巴黎大会上我的演讲 “CSP in Action”制作了一个简单的例子。

在没有 CSP 的情况下,页面展示如下图所示:

不是十分优美。要是我们启用了如下的 CSP 指令又会怎样呢?

<?php
    header("Content-Security-Policy: 
      default-src 'self' ;
      script-src 'self' www.google-analytics.com stats.g.doubleclick.net ; 
      style-src 'self' data: ;
      img-src 'self' www.google-analytics.com stats.g.doubleclick.net data: ;
      frame-src 'self' ;");
?>

浏览器将会作什么呢?它会(非常严格的)在 CSP 基础规则之下应用这些指令,这意味着任何没有在 CSP 指令中被授权允许的都将会被禁止(“blocked” 指的是不被执行、不被显示并且不被使用在网站中)。

在 CSP 的默认设置中,内联脚本和样式是不被授权的,意味着每一个 <script>onclick 事件属性或 style 属性都将会被禁止。你可以使用 style-src 'unsafe-inline' ; 指令来授权使用内联 CSS。

在一个支持 CSP 的现代浏览器中,上述示例看起来如下图:

发生了什么?浏览器应用了指令并且拒绝了所有没有被授权的内容。它在浏览器调试终端中发送了这些通知:

如果你依然不确定 CSP 的价值,请看一下 Aaron Gustafson 文章 “More Proof We Don't Control Our Web Pages”。

当然,你可以使用比我们在示例中提供的更严格的指令:

  • 设置 default-src 为 'none'
  • 为每条规则指定你的设置
  • 为请求的文件指定它的绝对路径

更多关于 CSP 的信息

支持

CSP 不是一个需要复杂的配置才能正常工作的每日构建特性。CSP 1 和 2 是候选推荐标准!浏览器可以非常完美的支持 CSP 1

CSP 2 是较新的规范,因此对它的支持会少那么一点。

现在 CSP 3 还是一个早期草案,因此还没有被支持,但是你依然可以使用 CSP 1 和 2 来做一些重大的事。

其他需要考虑的因素

CSP 被设计用来降低跨站脚本攻击(XSS)的风险,这就是不建议开启内联脚本和 script-src 指令的原因。Firefox 对这个问题做了很好的说明:在浏览器中,敲击 Shift + F2 并且键入 security csp,它就会向你展示指令和对应的建议。这里有一个在 Twitter 网站中应用的例子:

如果你确实需要使用内联脚本和样式的话,另一种可能就是生成一份散列值。例如,我们假定你需要使用如下的内联脚本:

<script>alert('Hello, world.');</script>

你应该在 script-src 指令中添加 sha256-qznLcsROx4GACP2dm0UCKCzCG-HiZ1guq6ZZDob_Tng= 作为有效来源。这个散列值用下面的 PHP 脚本执行获得的结果:

<?php
    echo base64_encode(hash('sha256', "alert('Hello, world.');", true));
?>

我在前文中说过 CSP 被设计用来降低 XSS 风险,我还得加上“……与降低未经请求内容的风险。”伴随着 CSP 的使用,你必须知道你内容的来源是哪里它们在你的前端都作了些什么(内联样式,等)。CSP 同时可以帮助你让贡献者、开发人员和其他人员来遵循你内容来源的规则!

现在你的问题就只是,“不错,这很好,但是我们如何在生产环境中使用它呢?”

如何在现实世界中使用它

想要在第一次使用 CSP 之后就失望透顶的方法就是在生产环境中测试。不要想当然的认为,“这会很简单。我的代码是完美并且相当清晰的。”不要这样作。我这样干过。相信我,这相当的蠢。

正如我之前说明的,CSP 指令由 CSP 头部来激活,这中间没有过渡阶段。你恰恰就是其中的薄弱环节。你可能会忘记授权某些东西或者遗忘了你网站中的一小段代码。CSP 不会饶恕你的疏忽。然而,CSP 的两个特性将这个问题变得相当的简单。

report-uri

还记得 CSP 发送到终端中的那些通知么?report-uri 指令可以被用来告诉浏览器发送那些通知到指定的地址。报告以 JSON 格式送出。

report-uri /csp-parser.php ;

因此,我们可以在 csp-parser.php 文件中处理有浏览器送出的数据。这里有一个由 PHP 实现的最基础的例子:

$data = file_get_contents('php://input');

    if ($data = json_decode($data, true)) {
     $data = json_encode(
      $data,
      JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES
      );
     mail(EMAIL, SUBJECT, $data);
    }

这个通知将会被转换成为一封邮件。在开发过程中,你可能不会需要比这更复杂的其它东西。

对于一个生产环境(或者是一个有较多访问的开发环境),你应该使用一种比邮件更好的收集信息的方式,因为这种方式在节点上没有验证和速率限制,并且 CSP 可能变得乱哄哄的。只需想像一个会产生 100 个 CSP 通知(例如,一个从未授权来源展示图片的脚本)并且每天会被浏览 100 次的页面,那你就会每天收到 10000 个通知啊!

例如 report-uri.io 这样的服务可以用来简化你的通知管理。你也可以在 GitHub上看一些另外的使用 report-uri (与数据库搭配,添加一些优化,等)的简单例子。

report-only

正如我们所见的,最大的问题就是在使用和不使用 CSP 之间没有中间地带。然而,一个名为 report-only 的特性会发送一个稍有不同的头部:

<?php
    header("Content-Security-Policy-Report-Only: <your directives>");
?>

总的来说,这个头部就是告诉浏览器,“表现得似乎所有的 CSP 指令都被应用了,但是不禁止任何东西。只是发送通知给自己。”这是一种相当棒的测试指令的方式,避免了任何有价值的东西被禁止的风险。

report-onlyreport-uri 的帮助下你可以毫无风险的测试 CSP 指令,并且可以实时的监控网站上一切与 CSP 相关的内容。这两个特性对部署和维护 CSP 来说真是相当的有用!

结论

为什么 CSP 很酷

CSP 对你的用户来说是尤其重要的:他们在你的网站上不再需要遭受任何的未经请求的脚本,内容或 XSS 的威胁了。

对于网站维护者来说 CSP 最重要的优势就是可感知。如果你对图片来源设置了严格的规则,这时一个脚本小子尝试在你的网站上插入一张未授权来源的图片,那么这张图片就会被禁止,并且你会在第一时间收到提醒。

开发者也需要确切的知道他们的前端代码都在做些什么,CSP 可以帮助他们掌控一切。会促使他们去重构他们代码中的某些部分(避免内联函数和样式,等)并且促使他们遵循最佳实践。

如何让 CSP 变得更酷

讽刺的是,CSP 在一些浏览器中过分的高效了,在和书签栏小程序一起使用时会产生一些 bug。因此,不要更新你的 CSP 指令来允许书签栏小程序。我们无法单独的责备任何一个浏览器;它们都有些问题:

  • Firefox
  • Chrome (Blink)
  • WebKit

大多数情况下,这些 bug 都是禁止通知中的误报。所有的浏览器提供者都在努力解决这些问题,因此我们可以期待很快就会被解决。无论怎样,这都不会成为你使用 CSP 的绊脚石。


via: https://www.smashingmagazine.com/2016/09/content-security-policy-your-future-best-friend/

作者:Nicolas Hoffmann 译者:wcnnbdk1 校对:wxy

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

作为专业人员,我们不少人喜欢玩角色扮演游戏,比如 D&D 这样的,那么有没有想过把你在 Web 前端方面的技能、经验也像游戏里面一样的技能树一样点亮呢?

今天给大家介绍的就是这样的一个有趣的网站:地下城与码农(Dungeons aNd Developers)。

题图就是老王自己点亮的技能树。

啊哈,老王自己都不知道已经懂这么多了。是不是也想试试?

那么就点此链接吧: http://www.dungeonsanddevelopers.com/ ,会看到如下界面:

点击“Open the talent tree »”,即可看到一个空白的技能树,虽然是英文的,不过这应该难不倒你。

英雄!去点亮你的技能树吧,你会回来分享你的链接的。

当然,作为专业人员,只是这样点一点,似乎并不满足,那么我们来探究一下背后所用的技术吧。

这个网站是 352 公司在内部竞赛中产生的,除了精美的仿游戏界面外,采用了 jQueryKnockout 来构建的。jQuery 大家已经熟知了,而 Knockout 可能有的人不太了解,其实它也不太新了,但是它的特性正好用在这个项目上:

Knockout 是一款很优秀的 JavaScript 库,它可以帮助你仅使用一个清晰整洁的底层数据模型,即可创建一个富文本且具有良好的显示和编辑功能的用户界面。任何时候你的局部 UI 内容需要自动更新(比如:依赖于用户行为的改变或者外部的数据源发生变化),Knockout 都可以很简单的帮你实现,并且非常易于维护。

是不是也想自己搭建一个呢?