Linux/UNIX为什么比Windows安全
说到安全
通俗的说法是Linux比windows安全
但是你知道原因吗?
这是一个非常流行的言论:
Linux下的病毒少,是因为Linux的使用者少,黑客显然不愿意浪费气力去攻击没有人使用的操作系统。
您可能已经知道了,互联网上用作重要用途的服务器,其中很大一部分是Linux系统,另外的一部分是Unix系统,如果黑客能够搞掉Linux系统的话,那么整个互联网就会陷于瘫痪!效果似乎更好一些。
当然了,您一定会想:黑客也是人,他们也喜欢上网,兔子还不吃窝边草呢……兔子那么笨,连乌龟都跑不过……黑客们可比兔子要聪明的多了!它们总没有理由让自己无家可归吧。
是的,我承认这一点……不过他们也不一定非得把互联网干掉。很多黑客作梦都想入侵美国军方的服务器,美军服务器中的绝密数据,我想拉登大叔一定愿意以重金买下的。
如果黑客可以入侵任何一台主机,他们为什么不去入侵美军的服务器,而要入侵您的电脑呢?
有些人又会认为:这样的解释不能说明什么,Linux比Windows安全也许只是偶然的,或许下一个版本的Windows会超过Linux。
Windows的缺陷
尽管支持抢先式多任务处理,但进程生成却很昂贵——虽然比不上VMS,但是(平均生成一个进程需要0.1秒左右)要比现在的Unix高出一个数量级。脚本功能薄弱,操作系统广泛使用二进制文件格式。除了此前我们总结过的,还有这些后果:
大多数程序都不能用脚本调用。程序间依赖复杂脆弱的远程过程调用(RPC)来通信,这是滋生bug的温床。
Unix的系统配置和用户配置数据分散存放在众多的dotfiles(名字以“.”开头的文件)和系统数据文件中,而NT则集中存放在注册表中。以下后果贯穿于设计中:
· 注册表使得整个系统完全不具备正交性。应用程序的单点故障就会损毁注册表,经常使得整个操作系统无法使用、必须重装。
· 注册表蠕变( registry creep ) 现象:随着注册表的膨胀,越来越大的存取开销拖慢了所有程序的运行。
互联网上的NT系统因易受各种蠕虫、病毒、损毁程序以及破解(crack)的攻击而臭名昭著。原因很多,但有一些是根本性的,最根本的就是:NT的内部边界漏洞太多。
NT有访问控制列表,可用于实现用户权限组管理,但许多遗留代码对此视而不见,而操作系统为了不破坏向后兼容性又允许这种现象的存在。在各个GUI客户端之间的消息通讯机制也没有安全控制,如果加上的话,也会破坏向后兼容性。
虽然NT将要使用MMU,出于性能方面的考虑,NT 3.5后的版本将系统GUI和优先内核一起塞进了同一个地址空间。为了获得和Unix相近的速度,最新版本的NT甚至将Web服务器也塞进了内核空间。
由于这些内部边界漏洞产生的协合效应,要在NT上达到真正的安全实际上是不可能的[16]。如果入侵者随便作为什么用户把一段代码运行起来(例如,通过 Outlook email宏功能),这段代码就可以通过窗口系统向其它任何运行的应用程序发送虚假信息。只要利用缓存溢出或GUI及Web服务器的缺口就可以控制整个系统。
Unix的健壮
Unix至少设立了三层内部边界来防范恶意用户或有缺陷的程序。一层是内存管理:Unix用硬件自身的内存管理单元(MMU)来保证各自的进程不会侵入到其它进程的内存地址空间。第二层是为多用户设置的真正权限组——普通用户(非root用户)的进程未经允许,就不能更改或者读取其他用户的文件。第三层是把涉及关键安全性的功能限制在尽可能小的可信代码块上。在Unix中,即使是shell(系统命令解释器)也不是什么特权程序。
操作系统内部边界的稳定不仅是一个设计的抽象问题,它对系统安全性有着重要的实际影响。
彻头彻尾的反Unix系统,就是抛弃或回避内存管理,这样失控的进程就可以任意摧毁、搅乱或破坏掉其它正在运行的程序;弱化甚至不设置权限组,这样用户就可以轻而易举地修改他人的文件和系统的关键数据(例如,掌控了Word程序的宏病毒可以格式化硬盘);依赖大量的代码,如整个shell和GUI,这样任何代码的bug或对代码的成功攻击都可以威胁到整个系统。