mirror of
https://github.com/LCTT/TranslateProject.git
synced 2026-09-04 04:32:49 +08:00
Merge branch 'master' of https://github.com/LCTT/TranslateProject into translating
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (CanYellow)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Understanding Linus's Law for open source security)
|
||||
[#]: via: (https://opensource.com/article/21/2/open-source-security)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
|
||||
理解开源安全中的李纳斯定律
|
||||
======
|
||||
李纳斯定律 (Linus's Law) 即“只要有足够多的眼睛关注,任何漏洞都无处隐藏” (given enough eyeballs, all bugs are shallow)。那么李纳斯定律是如何应用于开源软件安全的呢?
|
||||
|
||||
![Hand putting a Linux file folder into a drawer][1]
|
||||
|
||||
2021 年,有更多的原因使人们比以往更钟情 Linux 。在本系列中,我将分享 21 个使用 Linux 的不同原因。 这篇文章则讨论 Linux 对开源软件安全的影响。
|
||||
|
||||
开源软件的一个常被赞扬的优点是它的代码能够被任何人检查(安全专家通常称之为“代码审计”)。然而,如果你真的去问很多开源软件用户他们上一次检查代码是什么时候。你大概只能收获他们茫然的眼神或者是喃喃的低语。此外,对于一些相当大型的开源应用,高效地审查每一行代码也是困难的。
|
||||
|
||||
根据上述这些稍显不安的事实,我们不得不思考:如果没有人察看这些代码,它是开源还是闭源真的有关系吗?
|
||||
|
||||
|
||||
### 你应该相信开源吗?
|
||||
|
||||
计算机爱好者倾向于作出认为开源软件比其他软件更加安全的传统假设。我们通常不会讨论这意味者什么:比较的基础是什么(比什么更安全?),或者上述结论是如何得到的。这是一个危险的陈述,因为它表明只要你将一些东西称之为“开源”,它就自动如魔法般地继承了更高的安全性。这不是开源,事实上,这正是开源安全所非常反对的。
|
||||
|
||||
除非你已经亲自审计并理解了软件代码,否则就不应该假定一个应用程序是安全的。一但你做到了这一点,就可以给予它_最高信任_。_最高信任_不是对计算机而言的,而是对你本人而言的,至少在这一应用程序被渗透攻击之前,你信任它是因为你选择了相信它是安全的。
|
||||
|
||||
使用者本人是唯一可以对软件代码最高信任的人,因此任何人想要获得这样的享受都必须亲自审查代码。相信其他人的话是不管用的。
|
||||
|
||||
只有你已经亲自审计并理解了软件代码,你才可以对一个应用程序给予最高信任,最高信任的范围可以是从_根本不信任_到_相当信任_之间。然而我们并没有一个关于信任程度的标准对照表,这是一个你必须亲自做出的个人选择。如果你已经听说了一款应用程序的安全性是可以信任的,相比没有任何建议的情况而言,你可能更加信任它。
|
||||
|
||||
然而,因为无法审计专有(闭源)软件代码,你不可能给予它_最高信任_。
|
||||
|
||||
### 李纳斯定律
|
||||
|
||||
现实很骨感,并不是每个人都是程序员,同时也不是每个程序员都有时间检查数以万计的代码行。因此如果你没有亲自审查代码,你就只能选择相信(一定程度上)_亲自_审查了代码的人。
|
||||
|
||||
那么,有哪些人会审计代码呢?
|
||||
|
||||
李纳斯定律声称_只要有足够的眼睛关注,任何漏洞都无处隐藏_,然而我们并不知道多少双眼睛是“足够”的。请不要低估这一数量,应用程序往往经过了远超你想象数量的人员审计。原始开发人员以及后续开发人员显然清楚他们自己写下的代码,不过开源软件往往都是团队成果,开源时间越长,阅读了代码的开发人员越多。新加入的开发人员也必须回顾项目代码的核心部分,因为他们必须学习基础代码以加入新的功能。
|
||||
|
||||
同时,为了使开源软件能够在 Linux 发行版上可用,负责开源软件打包分发的开发人员会加入多个项目。有时一个应用程序可能会在不熟悉项目代码的情况下打包,但是大多数时候,开源软件打包人员都是熟悉所打包的项目代码的。这不仅仅是因为他们不想在他们不信任的软件上签名,还由于他们可能不得不修改代码来使得程序能够正确编译。漏洞报告人员和漏洞修复人员一般也是熟悉基本代码的,因为他们需要尝试解决的问题小到运行异常,大到程序崩溃。当然,一些漏洞报告人员无意中揭示了代码漏洞不是通过亲自审查项目代码而是通过关注明显未按预期工作的现象。系统管理员通常都是通晓用户依赖的重要应用软件的代码的。最后,是安全研究人员,他们专门深入代码内部以揭露潜在的漏洞。
|
||||
|
||||
### 信任与透明
|
||||
|
||||
很多人先入为主的认为大型软件的审计是基本不可能的,因为它由数以万计的代码行组成。不要被软件运行所需的代码量欺骗了。我们不需要真的阅读数以万计的代码行。代码是高度结构化的,可被利用的代码漏洞仅仅只是其中的一行,不过它通常影响软件的全部功能。
|
||||
|
||||
当然,也有例外。有时仅仅一个系统调用或者链接一个有缺陷的库文件就可能引入一系列漏洞。幸运的是,多亏安全研究人员以及漏洞数据库所扮演的积极角色,这些错误相对而言是容易发现的。
|
||||
|
||||
一些人指向错误追踪系统,比如 [通用漏洞披露 (CVE)][2] 网站,并推断开源软件显而易见是不安全的。毕竟已经向公众公开了大量的安全风险,涉及许多开源项目。但是不要被数据欺骗了。只是因为我们不能发现闭源软件的漏洞,并不意味着闭源软件中不存在漏洞。事实上,已经有很多针对闭源软件的漏洞攻击提出了,闭源软件也是存在漏洞的。区别在于开发者(以及用户)可以查看开源软件的_所有的漏洞_从而降低漏洞的影响。这是扩大对开源软件信任的系统机制的一部分,却正是闭源软件软件所缺少的。
|
||||
|
||||
对于任何代码而言,可能永远没有“足够的眼睛”来发现漏洞,但是开发社区越壮大、越多样化,越有机会发现和修复代码中的缺陷。
|
||||
|
||||
### 信任与人
|
||||
|
||||
在开源社区中,参与同一项目的众多开发者已经发现“不安全”的漏洞却保持沉默的的可能性是微乎其微的,因为人们彼此间不会同意以这样的方式密谋。我们已经看到了在应对 COVID-19 的过程中,人类的行为是如何不一致了,在这里也一样:
|
||||
|
||||
* 我们都识别出了漏洞(病毒)。
|
||||
* 我们知晓如何避免它传播(待在家里)。
|
||||
* 然而病毒还是在持续传播,因为总是有一个或者多个人偏离了消减疫情的计划。
|
||||
|
||||
开源软件中的漏洞也一样,如果有人发现了漏洞总会公之于众(当然,我们说的是“假如”能够发现)。
|
||||
|
||||
然而就专有软件而言,有很大可能参与项目的众多开发者即使注意到不安全的漏洞却仍然保持沉默,因为专有模式依赖于回报。如果一个开发者将漏洞泄漏出来,他可能只是伤害了该专有软件的声誉,进而降低软件的销售额;或者,在更糟糕的情况下,他可能因此而丢了工作。付费秘密开发软件的开发者倾向于不讨论软件的缺陷。如果你曾经是一名开发者,你可能曾经签署过 NDA (译者注:Non-Disclosure Agreement,保密协议),你可能被培训过商业秘密的重要性等等不一而足。专有软件鼓励在面对严重的秘密缺陷时保持沉默,更多时候甚至是强制要求沉默。
|
||||
|
||||
|
||||
### 信任与软件
|
||||
|
||||
不要信任未经你审计的软件。
|
||||
|
||||
如果你必须相信未经你审计的软件,那么选择相信已经面向那些更有可能将软件缺陷公之于众的开发者公开代码的软件。
|
||||
|
||||
开源软件并没有比专有软件继承更高的安全性,但是修复它的系统得到了更好的规划实施和人员配置。
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/2/open-source-security
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[CanYellow](https://github.com/CanYellow)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC (Hand putting a Linux file folder into a drawer)
|
||||
[2]: https://cve.mitre.org
|
||||
100
translated/tech/20221004 Learn the OSI model in 5 minutes.md
Normal file
100
translated/tech/20221004 Learn the OSI model in 5 minutes.md
Normal file
@@ -0,0 +1,100 @@
|
||||
[#]: subject: "Learn the OSI model in 5 minutes"
|
||||
[#]: via: "https://opensource.com/article/22/10/osi-model-network-communications"
|
||||
[#]: author: "Anamika https://opensource.com/users/anamika"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "cool-summer-021"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
|
||||
5 分钟内了解 OSI 模型
|
||||
======
|
||||
理解OSI框架的基本概念,掌握计算机系统通信机制
|
||||
|
||||
开放系统互联(OSI)模型是一个定义计算机、服务器和用户如何在一个系统内通信的标准。它是第一个网络通信标准模型,在20世纪80年代早期,所有主流的计算机和通信公司都采用了这个标准。
|
||||
|
||||
OSI 模型提供了一种通用语言,用于描述网络,以及在离散的块或层中考虑相关的问题。
|
||||
|
||||
### OSI模型的各个层
|
||||
|
||||
该模型描述了计算机系统通过网络进行通信的七个层。
|
||||
|
||||
1. [应用层][2]
|
||||
2. [表现层][3]
|
||||
3. [会话层][4]
|
||||
4. [传输层][5]
|
||||
5. [网络层][6]
|
||||
6. [数据链路层][7]
|
||||
7. [物理层][8]
|
||||
|
||||
每个层都有自己的工作方式和一系列跟其他层不同的协议。本文将逐个剖析这些层级。
|
||||
|
||||
### 应用层
|
||||
|
||||
应用层是在软件中实现的。它是与应用程序交互的层级。
|
||||
|
||||
考虑发送消息的例子。发送消息的程序与应用层进行交互,并发送消息。接着,应用层向 OSI 模型的下一个层级(即表现层)发送消息。
|
||||
|
||||
### 表现层
|
||||
|
||||
来自应用层的数据被转发到表现层。表现层接收到文字、字符、字母、数字等形式的数据,并把它们转换为机器可识读的二进制格式数据。这个过程叫做编译。
|
||||
|
||||
在此阶段,ASCII(美国信息交换标准码) 字符被转换为扩充的二进制编码的十进制交换码(EBCDIC)。转换后的数据在继续传输前,也会进行编码和加密过程,使用SSL协议进行加密和解密。
|
||||
|
||||
表现层的作用是抽象化,它假设下面的层级会处理它们收到的数据。它也负责压缩数据。数据的压缩可能是有损的,也有可能是无损的,这取决于很多因素,不属于本文的讨论范围。
|
||||
|
||||
### 会话层
|
||||
|
||||
会话层的作用是建立和管理连接。该层级的主要工作是建立会话。例如,你登录网上商城,就在你的机器和服务器之间建立了会话。
|
||||
|
||||
会话层的作用是实现数据的发送和接收,完成后连接的会话就终止了。在一个会话建立前,会进行身份验证。与上一层类似,会话层也假设在它的工作完成后,下面的层级也会准确无误地处理数据。
|
||||
|
||||
### 传输层
|
||||
|
||||
传输层的作用是管理数据传输和其自身的关于数据如何传输的一些协议。从会话层传到这里的数据被分为更小的数据单元,这些数据单元称为片段。这个过程叫做“分割”。每个片段包含来源端口号、目标端口号和一个序列号。端口号用来识别发送数据的应用程序。注意,数据以块的形式传输。序列号用于把这些片段按正确的顺序排列。
|
||||
|
||||
传输层负责控制流量或在给定的时间内传输的数据量。它也负责错误的管理,比如数据丢失、损坏等情况。它利用一种错误探测值,通常叫做校验和。传输层对每个数据片段加上校验和,就可以检查所发送的数据是否被正确接收。然后数据传输到网络层。
|
||||
|
||||
### 网络层
|
||||
|
||||
网络层的作用是跟其他网络进行通信。它把从一台机器接收到的数据片段传输给另一台位于不同网络的机器。路由器是作用于网络层的。
|
||||
|
||||
网络层的功能是逻辑寻址(就是确定 IP 地址)。它为发送方和接收方分配 IP 地址,数据包附带了这个地址,就可以被传输到正确的目标机器。接着网络层对数据包进行路由。负载均衡也是在网络层进行的,旨在确保不会发生过载。下一步,数据传输到数据链路层。
|
||||
|
||||
### 数据链路层
|
||||
|
||||
数据链路层支持跟其他设备直接通信。
|
||||
|
||||
它接收到来自网络层、包含发送方和接收方 IP 地址的数据包,进行物理寻址,然后将发送方和接收方的 MAC 地址分配给数据包,形成帧。
|
||||
|
||||
### 物理层
|
||||
|
||||
物理层由系统的所有硬件和物理设备(包括网线、导航系统、适配器等)组成。在这里,从前面层级接收到的数据都是 0 和 1 形式的。物理层把这些数据转换并通过各种方式(如果是光纤电缆,有电线、电信号、光信号;如果是 WIFI,则为无线电信号)传输至本地媒介。
|
||||
|
||||
注意,物理层作用于接收方的一端,把接收到的信号以帧的形式传输到数据链路层(把它转换回二进制数据形式)。然后帧传输到上面的层级,最终应用层(应用软件)会接收到需要的数据。
|
||||
|
||||
### 结语
|
||||
|
||||
当你需要描述网络架构或排除网络问题时,OSI 模型的相关知识会对你有所帮助。我希望本文能令你对这个模型的方方面面有清晰的理解。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/10/osi-model-network-communications
|
||||
|
||||
作者:[Anamika][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[cool-summer-021](https://github.com/cool-summer-021)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/anamika
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/code_computer_development_programming.png
|
||||
[2]: https://opensource.com/article/22/10/osi-model-network-communications#application-layer
|
||||
[3]: https://opensource.com/article/22/10/osi-model-network-communications#presentation-layer
|
||||
[4]: https://opensource.com/article/22/10/osi-model-network-communications#session-layer
|
||||
[5]: https://opensource.com/article/22/10/osi-model-network-communications#transport-layer
|
||||
[6]: https://opensource.com/article/22/10/osi-model-network-communications#network-layer
|
||||
[7]: https://opensource.com/article/22/10/osi-model-network-communications#data-link-layer
|
||||
[8]: https://opensource.com/article/22/10/osi-model-network-communications#physical-layer
|
||||
Reference in New Issue
Block a user