主题:【原创】基于Linux内核的开放源代码操作系统的组成:第一篇 -- 请尽量
感觉和Apache的许多想法是一致的。IIS 6.0中的那个HTTP.SYS就是从Linux中学来的。HTTP.SYS是Kernel level Driver,而不是User Space Process,这样的设计减少了很多Mode switch的开销,性能有了巨大提高。
BTW,PDF文件已经更新了。
Linux的2.4版曾经出现过一个完全在内核里的HTTPD,完全避免了mode switch导致的性能损失。When serving static contents, it beat all user space HTTPDs at the time。可惜的是,由于运行在内核里,无法支持CGI。
另外,在性能与之接近的用户态HTTPD出现后,人们认为没有必要在为此而bloat the kernel,故此2.6版的Linux内核不再包括HTTPD。
首先,对每个进程而言,根目录是一个逻辑上的概念。在内核中代表进程的数据结构中,有一个指向一个dentry结构的指针,代表该进程的根目录。在当前进程下进行文件操作时,所有的路径都要以这个dentry指向的目录作为出发点,也就是根目录。dentry是dir entry的简称,是Linux在内核中用于代表文件系统目录的数据结构。在fork一个新进程时,该指针指向代表真正的(the physical)根目录“/”的那个dentry。也就是说,大家刚生下来时,都把“/”当作自己的根目录。
内核提供的chroot系统调用使得应用程序可以改变当前进程的根目录。要注意这里说的是当前进程的根目录,也就是说,其他进程的根目录并不会受影响。
可能举个例子会清楚一些。要把HTTPD进程限制在目录“/data/jail_root”下作为HTTPD进程的根目录,只需要调用chroot("/data/jail_root")。chroot要完成的事情说起来挺简单,用代表“/data/jail_root”的dentry指针替换当前进程中的根目录dentry指针。虽然chroot返回后,HTTPD进程“看”到的所有路径,还是从根目录“/”开始的,比如说“/images/next.gif”。但是在查找代表该路径的dentry时,内核先找到“/data/jail_root/”,然后再从那里出发,查找“images/next.gif”。
对另外一个没有调用chroot的进程,要得到那个GIF文件,需要使用的路径是“/data/jail_root/images/next.gif”。
说chroot是一个工具,一方面是因为内核提供了chroot这样一个系统调用,另一方面是因为操作系统在/usr/sbin目录下还提供了一个同名的命令行程序,使shell scripts可以使用chroot。其实除了增加系统安全性外,chroot还普遍用于系统安装和修复。
说chroot是一种机制,是因为光是系统调用本身并不足以完成一个应用程序的chroot jail,还需要进行相当的设置工作。应用程序通常都需要运行环境,比如说动态链接库、存放临时文件的目录、系统级的配置文件、数据文件等等。例如,在Debian下,缺省配置的Apache HTTPD就需要/etc、/var/log、/usr/lib/httpd、/var/lib/www等目录。所以,仅仅是调用chroot是不够的。还必须在“/data/jail_root”下复制相应的目录,例如/data/jail_root/etc、/data/jail_root/var/log等。这样,当HTTPD进程调用chroot返回,还能继续找到这些路径。
安全方面设置起来复杂不复杂?
接下去会不会讲到 .htaccess方面的内容?
首先,应用(图片上传)自身的设置工作应该要比HTTP服务器要复杂。不光要安装相应的模块,如PHP或其他如Python、Perl,还得要个数据库如MySQL。类似这样的服务,一般都要有严格的用户授权和完善的quota管理,几乎肯定要用到数据库来记录有关的数据。
虽然HTTP协议本身提供了用户认证的机制,但是安全性不太好。使用表单进行认证,起码可以靠SSL来增加安全性。
这样一来,Apache的设置几乎可以说是简单到了bare bone,大部分的工作实际上是由应用完成的。
对Apache来说,.htaccess不是必需的。特别是对于图片上传这样动态产生内容的web应用,数据都应该放在DocumentRoot之外的地方,否则从客户端来的请求可以绕开应用程序的控制,直接访问数据。
再花一朵。
于明俭的中文输入法应该是chinput。
据说对了解软硬件和C语言的学习好处非常大,但是我想这个工作应该还是很不容易的,到底有没有必要看??谢谢指教!
不妨看Minix原码,
这个是专门为操作系统课程写的一个小操作系统,也是Linux的源头。
麻烦啊
去年这里发了不少好东西,现在我还在学。
原始链接在这里:
可惜highway的存储空间已经失效了。
太好了!要是再有一些Linux的命令小技巧,和一些心得笔记就更好了,还请河里Linux的高手多补充啊。
深入浅出,简单明了,上花。
没想到Apache也是NCSA的,让俺的敬仰更上一层。