屋顶上的木帷幕

海鸥之所以追着渔船飞,是因为它们认为会有沙丁鱼抛向大海 - Eric Cantona, 1995
随笔 - 146, 评论 - 3168, 引用 - 56

导航

工具

关于


标签

每月存档

广告



访客

 

关于开放源代码和Linux,被说得最多的三句谎言是:

1)因为Linux是开放源代码的,所以所有人都可以去看代码,检查代码里面的漏洞,所以Linux的安全性很高;
2)因为Linux是开放源代码的,所以所有人都可以修改代码,按照自己的喜好和需要编译出最适合自己的系统平台来;
3)因为Linux是开放源代码的,所以所有人都可以参与Linux的开发,所以Linux的发展一定会很快,新功能会不断地被添加进来。

不过事实并不如理论所描述的那么美,就好像我并不认为有朝一日所有人都可以按需分配,而工作只是为了满足一种快乐。这只是一个乌托邦式的假想。以上三句关于开放源代码和Linux的谎言也是这种乌托邦式的设想而已,我并不认为他们会是真的。

起码开放源代码并不等于安全。

“开源=安全”这一说法的理论依据是人们都会去查看源代码,并会主动地从代码中发现问题所在。你相信么?你相信code review能够发现很多bug么?你相信code review能够取代软件测试么?如果真的像一些支持开源的人说的那样能够通过Code Review来发现产品里面存在的漏洞和缺陷,那么Rational公司可以倒闭了,他那些关于内存泄漏、代码覆盖、自动化测试等的工具恐怕就卖不出去了。

按照XP的说法(我自己也倾向于这个观点),Code Review的主要益处是能让开发者之间相互学习对方编程中的优点,看看别人编程的手法,开阔自己的眼界和思路。Code Review的另一个益处是能够在开发过程中确保代码的可读性,还能够防止一些架构上的、代码可重用方面的问题——仅限于这一层面的问题而已。至于细致到buffer overrun引起的代码执行漏洞,我不相信仅仅靠Code Review就可以发现到。

最近的一个例证是今天我在CSDN看到的一篇新闻:Linux内核发现三处缺陷 开放源码安全受疑。我特别同意的是最后这段话:

阿尔弗雷德表示,新发现的缺陷表明了这样一个事实,即Linux中还存在缺陷。这对“许多眼睛”理论提出了质疑,这种理论认为,由于开放源代码软件的代码能够被自由查看,其中的安全缺陷更容易被发现、修正,因而也更安全。阿尔弗雷德指出,事实上,大多数开发人员都不愿意对老代码进行检查。尽管这一理论非常好,但它与人们的行为有偏差


随贴广告(测试期)
相关文章

打印 | 张贴于 2004-02-26 10:48:00 | Tag:Cool Stuffs

留言反馈

re: 开放源代码 != 安全 编辑
Hi, man, you r totally a swagger...and an advocate of Windows.
Just now I saw one of your article, complaining you can't set Graphic Environment in Linux as easily as that in windows. What makes me feel funny is that you declared, "无奈,我只能reboot整个系统(因为我不知道怎么重新启动XWindows——连我这个接触Linux已经5年的人都不会,我打赌大部分的IT人以及绝大部分的普通用户都不会)。". Wow, how incredible! Five years, so long a time, I began to use RHEL AS 3 only few weeks ago, and I know how to finish such a simple task, since once I met a problem, I tried to work it out, to find the solution, but seems one of your traits is, when you are in the corner, you never never make any effort to find a way out. As you mentioned in another article, "Live不能登录的原因", it's not a problem of Linux, it's the problem of you.
As a developer, I have to say, code review do works in many cases. But since your bias in Linux, I won't try to persuade you.
What's your job? Seems you r a teacher?
To whom said, "开放源代码不就给了HACKER很多的帮助和机会了吗?", no, you are totally wrong. Security means, even someone knows every line in your code, he can't do something harmful. Danger may come from anybody, not only the hackers. Such as an ex-employer, full of hate to the boss.
Well I'm in an environment can only read but can't write Chinese. It makes me depressed since I can't express myself well in English. :( pL
2006-06-25 20:56:00 | [匿名用户:Incan]
re: 开放源代码 != 安全 编辑
开放源代码不就给了HACKER很多的帮助和机会了吗?
2005-09-16 09:40:00 | [匿名用户:毛小琪]
回复: 开放源代码 != 安全 编辑
to wfwt:

其他的我不多评论。

指出一点:你的“第二”里面是有逻辑错误的,只是你自己没感觉到而已。

商业软件的程序员_未必_比open soft的程序员更加喜欢看旧代码,这点不错。但商业软件从来没有宣称自己_主要_是靠看旧代码来发现bug的。

体会到你自己的逻辑错误了么?

2004-03-05 14:44:00 | [匿名用户:mvm]
回复: 开放源代码 != 安全 编辑
这个论点明显属于诡辩,是用正确的原理导出错误的观点
第一、code review不能代替测试 很正确,但linux不测试吗?恐怕测试的力量要比任何一家商业厂家都大。
第二、没有多少程序员愿意去看旧代码 很正确,但毕竟还是有人会去看。难道商业软件的程序员比其他的程序员更加喜欢看旧代码?仔细想一想这倒是有可能的。但数量上是不是比愿意看旧开源代码的人多?
2004-03-04 17:38:00 | [匿名用户:wfwt]
回复: 开放源代码 != 安全 编辑
写完之后发现,其实我还没有考虑周全。

硬件前面的测试主要测功能,和软件测试相仿;后面的测试主要测制造过程中存在的问题,而软件则没有。

比对不当,当我没说。
2004-02-27 13:31:00 | [匿名用户:费乐沃]
回复: 开放源代码 != 安全 编辑
兄弟我是做硬件的,想比较一下软件的测试和硬件的测试
软件的测试各位应该比熟悉,讲一讲硬件的测试吧。

现在硬件前端的开发过程和软件极为类似,采用硬件描述语言(Hardware Description Language)编写硬件模块,一个系统完成后采用软件仿真的方式,即输入激励,察看输出。这一步骤颇多借鉴软件开发,而且现在集成电路设计中的重用概念窃以为也是从软件里面借用过来的。

硬件和软件不同的地方是在制造中有中测,在制造完成之后要上测试机台(Tester)测试。通过这些测试的幸存者,并不会马上交到客户手中,根据他们的应用领域他们还需要接受另外的测试考验。

例如工业级的,据我所知,有家张江的小设计公司专门买了一台炉子把芯片放在里面上了电烤,大约一个星期后再拿出来,再上Tester,然后的幸存者才会Ship。

如果是军用的,更加严格,如果是神五里面用的芯片,估计是万里挑一的片子,所以还请放心使用。

2004-02-27 13:20:00 | [匿名用户:费乐沃]
回复: 开放源代码 != 安全 编辑
早先在蝈蝈那看到JGTM'2004 [MVP] 的回复,就很羡慕你的那个EleantDAL,什么时候能看到,并使用到我的项目呢?期待中..........
2004-02-27 13:04:00 | [匿名用户:Meyer]
回复: 开放源代码 != 安全 编辑
嗯,有没有可以online搞的code review、version control、documenting的东东呢……把.Text的项目放上去,大家可以对每一行代码review/comment(类似wiki的做法),不是很有一番风景吗?:)
2004-02-26 19:43:00 | [匿名用户:JGTM'2004 [MVP]]
回复: 开放源代码 != 安全 编辑
好久没拜访过SCOTT先生的BLOG了, 看见代码吓了一跳-_-, 多了二块东西
2004-02-26 16:18:00 | [匿名用户:Bz]
回复: 开放源代码 != 安全 编辑
对,非常不错,我同意!!!!
谁来开个头呢?比如拿MusicLand的代码来Review?:P
2004-02-26 15:01:00 | [匿名用户:开心就好]
回复: 开放源代码 != 安全 编辑
嘿嘿,现在那个叫做竹子什么的mm也不错啊 :)

我倒觉得,大家伙在这里争来争去code review如何如何,倒不如真的去找点好的代码来review,一起学习。或者搞个什么读书推荐活动也不错啊。
2004-02-26 14:52:00 | [匿名用户:rIPPER]
回复: 开放源代码 != 安全 编辑
to rIPPER:

如果想引起争议,从而达到炒作的目的,我还不如请木子美呢:)
2004-02-26 14:37:00 | [匿名用户:开心就好]
回复: 开放源代码 != 安全 编辑
方兴东不错啊,要不是他现在出名了,开心清他来博客堂开个帐户,Post两篇文章,也能称得上是堂前一景了。

BTW:大家都认同Blog==博客,或者blogger==博客吗?好像这个提法是方搞出来的吧,要不就是他很喜欢的提法。

抛开方这个人不说,各位都觉得博客这个叫法很好吗? 信雅达,哪一条够得上呢?
2004-02-26 14:30:00 | [匿名用户:rIPPER]
回复: 开放源代码 != 安全 编辑
关于谎言:
1)因为Linux是开放源代码的,所以所有人都可以去看代码,检查代码里面的漏洞,所以Linux的安全性很高;
2)因为Linux是开放源代码的,所以所有人都可以修改代码,按照自己的喜好和需要编译出最适合自己的系统平台来;
3)因为Linux是开放源代码的,所以所有人都可以参与Linux的开发,所以Linux的发展一定会很快,新功能会不断地被添加进来。

第一条大概太过了,但有review总比review不到来的好,前日微软漏出来的代码里面ie5的安全问题,大概就是review得出的吧(见CSDN的报导)。

第二条确实如此,不过有个前提,在使用者技术能力有保证的情况下。各种专用的经过定制的linux多如牛毛,专门做router、firewall、入侵检测的、pda上面用的(这个mvm应该比较清楚;)、专门用来玩跳舞毯的...


第三条嘛,好像用词也太绝对了。不过free的好处倒不是发展地快不快(我觉得所谓发展快,是IBM之类对linux别有用心的“坏”家伙所关心的事情:),而是起码大家都可以自得其乐。喜欢开发的可以“扯虎皮当大旗”,搞出些东东来自我陶醉一番;使用者当然有充分的自由选择喜欢或者不喜欢某个软件;就算是用,也可以选择积极参与软件的开发、建议软件的发展方向、提交bug等等,或者就是用好了,不用关心这许多麻烦事情。最后留下来的一般都是不错的软件,当然安全不安全可能也难说,sendmail听说问题挺多,一直解决地不怎么样。

另外说到安全,其实linux kernel做的还是不错的,起码反应非常快。一天增加一个子版本号也是有过的事情。

最后,系统再好,还是得看管理员;)
2004-02-26 14:25:00 | [匿名用户:rIPPER]
回复: 开放源代码 != 安全 编辑
To JGTM(割资本主义尾巴):
别误会呀,我只是有感而发。中国人太喜欢“辩”了,当年八国联军都打进城了,那些官员们还在辩“师夷长技以制夷”是不是有损“天朝威严”。

“师夷长技以制夷”,其实是中国人的另外一种思想,就像我们师以Linux以制Microsoft一样,总觉得外夷的东西都是我天朝的驾驭物,谁对天朝不尽,则鄙视你,换一个夷物来制你。以体现我中华泱泱文明。

君不见,方兴东之流(呵呵,用法类似于新浪新闻稿中“所谓的MVP”)整天的呼吁打倒Microsoft,其实我想他是最不希望Microsoft从中国市场中退出的,因为那样,他就得转行,他就得做另外一个夷物的斗士,或者那时候他的口号就是“打倒Linux”。

同情弱者去吧:)
2004-02-26 14:24:00 | [匿名用户:开心就好]
回复: 开放源代码 != 安全 编辑
@开心就好:为什么人家一个大学生就可以做出来那样的影响后人的东西?并且可以提供给我们,以作为我们的辩料?

虽然偶的ElegantDAL远不能够达到影响后人的程度,不过也许以后当大家“辩料疲劳”的时候,我也会拿出源码来给大家点儿新的话题——不过手下的工作就是设计与代码重构,可不能被人骂说给中国人丢脸啊!:)
2004-02-26 14:11:00 | [匿名用户:JGTM'2004 [MVP]]
回复: 开放源代码 != 安全 编辑
就重粒子提到的:通过ms泄漏的source可以看出,ms内部是缺乏review的,否则不会有那么多奇怪的comment。

去年我听了MS总部的朱敏博士的一个有关MS项目管理的会议,他说MS的很多BUG是通过code review得到的,而很多奇怪的comment是因为MS在code中仍然允许保持个人的开发风格,但comment是必须的,这样有助里其他人来review。这一点与重粒子的想法不敢苟同:)
2004-02-26 13:55:00 | [匿名用户:韦小宝是我的老乡]
回复: 开放源代码 != 安全 编辑
我认为,Linux生长在夹缝中,大学生的一个毕业设计作品,在Linus刚开始创作它的时候,肯定没有想到与Microsoft进行一争。甚至Linus从来没有想过以它为生,只不过当作一个玩具,为了可以毕业而已。

中国人崇尚辩,总以为“真理越辩越明”,真的是这样吗?为什么人家一个大学生就可以做出来那样的影响后人的东西?并且可以提供给我们,以作为我们的辩料?我们的计算机专业的学生日复一日的记着笔记,把“程序=数据结构+算法”当作真理写在笔记本的前面,却从没有看出来他们参出来什么玄机?
2004-02-26 13:49:00 | [匿名用户:开心就好]
回复: 开放源代码 != 安全 编辑
我想mvm强调的可能是整个过程中“人”的因素,正如阿尔弗雷德所指出的一样,人们的行为与理论的偏差经常导致理论本身在被应用时的偏差。

比如说Java里面关于方法应显式声明可能throw的异常的语法规则,理论说的是人们应该确认每一段代码可以处理的所有异常并显式声明出来,这将提高代码的健壮性和稳定性。可是实际上呢?大量的代码表明人们在应用这一理论的时候产生了偏差,他们嫌麻烦,所以对所有的方法定义都声明throw Exception(等于什么都没说)……于是理论所推导出来的可以得到更高质量的代码的目标就跟着产生了偏差。

同理,XP中对于持续code review的观点实际上是很实事求是的。除了mvm所提到的根本性的、普遍性的知识共享、保证代码可读性的好处之外,团队中持续性的code review(主要是在pair programming实践中产生的)确实不是为了发现高层次的软件缺陷(比如隐藏很深的安全漏洞),然而结合XP的另一个重要实践即test-driven development,代码的基本品质得以保障,这就达到了XP承诺的code review的目标——关键是,这个理论与人们的普遍实践环境是一致的,人们在大量的实践中就会一次又一次的看到期待的结果。

所以我觉得,理论都是有其可实践范畴的。当“review code将产生更安全代码”这一理论被应用在一个高级安全专家团队中的时候,it'll probably be TRUE;然而当其应用于普遍意义上的开发团队中时,it'll probably not be so TRUE, or simply FALSE. ——IMHO
2004-02-26 13:39:00 | [匿名用户:JGTM'2004 [MVP]]
4th comment sorry... :-( 编辑
Since 开心就好 said it's ok.

there are some totally different era we are talking about.

1 Open Source/Closed Source
2 The Cathedral and the Bazaar.
and much more development models between them (for example the Linux kernel).
3 Safe or Not, in practical.

Now I cant get the point, I can't make any conclusion.
555 stupid stupid.
2004-02-26 13:29:00 | [匿名用户:Daily Linux User]
回复: 开放源代码 != 安全 编辑
虽然辩不清楚,但我喜欢仍然看这种充满理智的辩论,让我时不时的冒出来一些想法。
只要不是谩骂,其实有时间辩一辩何尝不可?:)
2004-02-26 13:12:00 | [匿名用户:开心就好]
回复: 开放源代码 != 安全 编辑
About your title.

Open Source != Safe. TRUE. but a little misleading, people will think about the two assertions below are true.

Open Source == Not Safe?
Closed Source == Safe?

but they are both FALSE, whats more:

Closed Source == Not Safe? FALSE too
2004-02-26 13:09:00 | [匿名用户:Daily Linux User]
回复: 开放源代码 != 安全 编辑
about your '3 lies'

1) not so true. Linux IS very safe in pratical, but the reason is not only the OpenSource/CodeReview stuff. This IS a lie.
2) true. I do this kind of things very often. This IS NOT a lie.
3) not so true. The problem is about the word 一定. This IS a lie.
2004-02-26 12:53:00 | [匿名用户:Daily Linux User]
FUD! 编辑
Not about code review at alll !!!!!

Many 3rd party company/hackers can discover bugs in Windows, how did they do this? They don't have source code of Windows.

They just use it, test it, research it, and many people are doing these things for Linux too.

Microsoft will discover bugs in Windows by theirself,
Linux kernel team and big Linux distro vendors are doing this for Linux too.

On this aspect, Windows and Linux has the same ability.

What's more for Linux, you got the source for the kernel and other OS softwares , then its much easier to find bugs.

About fixing bugs, it's similiar,

The kernel team will fix bugs just like MS Windows team.

What's more for Linux, anyone with the ability and time can fix bugs too.

Yes, it's all about the posibilities. you got more posibilities, it doesn't guaranteen better result, but at least it wont lead to worse result.
2004-02-26 12:45:00 | [匿名用户:Daily Linux User]
回复: 开放源代码 != 安全 编辑
关于“种种可能,更多选择”

“更多选择,更多。。。”这是我们经常听到的话,
我的想法是对于一件事情来讲更多选择=没有选择。试想面对一台有1000个频道的电视机我们选择哪个台看?
2004-02-26 12:38:00 | [匿名用户:yf611x]
回复: 开放源代码 != 安全 编辑
linux不安全的原因来自,分散开发而交流不够,没有专业,高强度的集中测试。而不是review或者说是open source的错。
open source是双刃刀,导致的问题是心怀不轨的人发现了bug,而进行恶意攻击。
通过ms泄漏的source可以看出,ms内部是缺乏review的,否则不会有那么多奇怪的comment。在close source,黑箱的状态下windows得到了很多的bug,广泛review得到的bug相信会更多。
如果linux保持open source,同时还有像ms一样的专业的测试管理队伍的话,相信质量会更高。
开放源代码当然不等与安全,但不安全绝对不是开放源代码的错。
2004-02-26 12:35:00 | [匿名用户:重粒子]
回复: 开放源代码 != 安全 编辑
这永远是一个充满争议的问题。

我同意yf611x的比喻:“我们永远面对的是封装的芯片,那么我们是否信任芯片? 面对封装的飞机我们是否敢坐?”

非常好的比喻。

对于Uestc95,我喜欢你的blog,不过“君子和而不同”,我不认为给大众太多的主动和选择是什么好事情。你把Linux丢在我面前,我还是不懂得如何去“主动的”提高安全。我在前一篇blog里面提到过,很多人自己去调整优化出来的结果往往还不如系统缺省状态的好。其实只有一小部分人是专家。

对于maddog,我同意你说的“如果面对的是二进制包,使用者就永远无法具有自己修改源代码的可能”——但是,请注意,你说的仅仅是一种“可能性”——有多少人会自己去修改源代码?

在美国式的民主里,任何40岁以上、在美国居住超过若干年的人就都有被当选总统的可能——但谁都清楚,这仅仅是“可能”,对于我们普通的普罗大众,这种可能永远无法兑现,因而也就没有任何价值。

不能兑现的可能是没有价值的,同样也适用于开放源代码给我们提供的种种可能。
2004-02-26 12:17:00 | [匿名用户:mvm]
回复: 开放源代码 != 安全 编辑
开源系统的配置管理难做呀....
2004-02-26 11:34:00 | [匿名用户:萧远山]
回复: 开放源代码 != 安全 编辑
如果面对的是二进制包,
使用者就永远无法具有自己修改源代码的可能。
也无法对这个包建立信任。

===================
面对封装的汽车和飞机,无法建立信任,我们敢坐吗?
2004-02-26 11:21:00 | [匿名用户:yf611x]
回复: 开放源代码 != 安全 编辑
如果面对的是二进制包,
使用者就永远无法具有自己修改源代码的可能。
也无法对这个包建立信任。
================================
我们永远面对的是封装的芯片,那么我们是否信任芯片? 面对封装的飞机我们是否敢坐?
2004-02-26 11:17:00 | [匿名用户:yf611x]
回复: 开放源代码 != 安全 编辑
“许多眼睛”理论可以让你主动的逐渐趋近于安全。
而不开放源代码则是被动的趋近于安全
2004-02-26 11:17:00 | [匿名用户:Uestc95]
回复: 开放源代码 != 安全 编辑
反对!

code review的作用仅限于学习和保证代码的可读性?????
千万不要误导,好的code review是可以发现大量问题的,从设计到编码细节的问题都可能被发现。关键看review的形式和参与的人员的素质。

你引用阿尔弗雷德的话来说明linux有bug,正说明review的质量不高,而不是review没有用。

2004-02-26 11:04:00 | [匿名用户:重粒子]
回复: 开放源代码 != 安全 编辑
如果面对的是二进制包,
使用者就永远无法具有自己修改源代码的可能。
也无法对这个包建立信任。
2004-02-26 10:59:00 | [匿名用户:maddog]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode MVC Blogger System