jieying 写了:这个才是以理服人,“用win的人多,所以病毒多”这种白痴的解释我最讨厌了。lisir 写了:Unix至少设立了三层内部边界来防范恶意用户或有缺陷的程序。一层是内存管理:Unix用硬件自身的内在管理单元(MMU)来保证各自的进程不会侵入到其它进程的内在地址窨。第二层是为多用户设置的真正权限组──普通用户(非root用户)的进程未经允许,就不能更改或者读取其他用户的文件。第三层是把涉及关键安全性的功能限制在尽可能小的可信代码块上。在Unix中,即使是Shell也不是什么特权程序。
而Windows中大多数程序都不能用脚本调用。程序间依赖复杂脆弱的远程过程调用(RPC)来,这是滋生BUG的温床。
Unix的系统配置和用户配置数据分散存放在众多的dotfiles(名字以“.”开头的文件)和系统数据文件中,而NT则集中存放在注册表中。
注册表使得整个系统完全不具备正交性。应用程序的单点故障就会损毁注册表,经常使得整个操作系统无法使用、必须重装。
注册表蠕变(registry creep)现象:随着注册表的膨胀,越来越大的存取开销拖慢了所有程序的运行。
互联网上的NT系统因易受各种蠕虫、病毒、损毁程序以及破解(crack)的攻击而臭名昭著。原因很多,但有一些是根本性的,最根本的就是:NT的内部边界漏洞太多。
NT有访问控制列表,可用于实现用户权限组管理,但许多遗留代码对此视而不见,而操作系统为了不破坏向后兼容性又允许这种现象的存在。在各个GUI客户端之间的消息通讯机制也没有安全控制,如果加上的话,也会破坏向后兼容性。
虽然NT将要使用MMU,出于性能方面的考虑,NT3.5后的版本将系统GUI和俦内核一起塞进了同一个地址窨。为了获得和Unix相近的速度,最新版本的NT甚至将Web用品也塞进了内核空间。
由于这些内部边界漏洞的协合疚,要在NT上达到真正的安全实际上是不可能的。如果入侵者随便作为什么用户把一段代码运行起来(例如,通过Outlook email宏功能),这段代码就可以通过窗口系统向其它任何运行的应用程序发送虚假信息。只要利用缓存或GUI及Web服务器的缺口就可以整个系统。
这是《Unix编程艺术》中的一部分,我看不太懂,给明白人看看吧。
商业化有很多缺点,比如早年还衰的时候落下的病根,是没指望大改了,只能靠补丁,真的不行了,就自己搞一套规范,避开bug。。,因为要考虑到商业伙伴的利益。ms就算强的跟神一样,也没办法的。说起来商业unix这种问题也很多的。
linux里面的软件,大改是常有的事,老毛病一般能医好。