一、用户认证
用户认证在网络安全中是非常重要的技术之一,它是保护网络系统资源的第一道防线。用户认证控制着所有登录并检查访问用户的合法性,其目标是仅让合法用户以合法的权限访问网络系统的资源。当用户第一次访问了启用用户认证目录下的任何文件,浏览器会显示一个对话框,要求输入正确的登录用户名和口令进行用户身份的确认。若是合法用户,则显示所访问的文件内容。此后访问该目录的每个文件时,浏览器会自动送出用户名和密码,不用再输入了,直到关闭浏览器为止。用户认证功能起到了一个屏障的作用,限制非授权用户非法访问一些私有的内容。下面通过一个实际的例子说明在Apache中启用用户认证功能的方法。
假设有一个名为mysecret的虚拟目录,其对应的物理路径是/usr/local/mysecret,现需要对其启用用户认证功能,只允许用户名为linden和tom的用户访问。
1.建立口令文件
要实现用户认证功能,首先要建立保存用户名和口令的文件。Apache自带的htpasswd命令提供了建立和更新存储用户名、密码的文本文件的功能。需要注意的是,这个文件必须放在不能被网络访问的位置,以避免被下载。本例将口令文件放在/etc/httpd/目录下,文件名为mysecretpwd。使用以下命令建立口令文件。
htpasswd -c /etc/httpd/mysecretpwd linden
命令执行结果如图7-9所示,htpasswd命令会提示为linden用户输入口令。
-c选项表示无论口令文件是否已经存在,都会重新写入文件并删去原有内容。所以在添加第2个用户到口令文件时,就不需要使用-c选项了。
htpasswd /etc/httpd/mysecretpwd tom
2.建立虚拟目录并配置用户认证
在Apache的主配置文件httpd.conf中加入以下语句建立虚拟目录并配置用户认证。
Alias /mysecret "/usr/local/mysecret" <Directory "/usr/local/mysecret"> AuthType Basic AuthName "This is a private directory. Please Login:" AuthUserFile /etc/httpd/mysecretpwd Require user linden tom </Directory>
(1)设置认证类型
AuthType Basic
AuthType选项定义了对用户实施认证的类型,最常用的是由mod_auth提供的Basic。
(2)设置认证领域内容
AuthName "This is a private directory. Please Login:"
AuthName选项定义了Web浏览器显示输入用户/密码对话框时的领域内容。
(3)设置口令文件的路径
AuthUserFile /etc/httpd/mysecretpwd
AuthUserFile选项定义了口令文件的路径,即使用htpasswd建立的口令文件。
(4)设置允许访问的用户
Require user linden tom
Require user选项定义了允许哪些用户访问,各用户之间用空格分开。
3.测试用户认证
测试用户认证的具体步骤如下。
在服务器中使用命令"/etc/init.d/httpd restart"重启Web服务。
在客户端的Web浏览器中访问这个虚拟目录,这时Web浏览器会弹出输入用户名和口令的对话框,如图7-10所示。
输入正确的用户名和口令,就能访问该目录了,如图7-11所示。
如果用户名和口令不正确,则出现"401 Authorization Required"的错误信息,如图7-12所示。
测试用户认证时最好在虚拟目录中建立一个名为index.html的文件,否则输入正确的用户名和口令后,由于虚拟目录既没有设置默认文档,也没有设置允许目录浏览,所以会出现"403 Forbidden"的错误信息。
二、CGI运行环境的配置
CGI是通用网关接口Common Gateway Interface的缩写,用于连接网页和Web服务器应用程序的接口。众所周知,HTML语言的功能是比较贫乏的,难以完成诸如访问数据库等一类的操作,而实际的情况则是经常需要先对数据库进行操作(比如文件检索系统),然后把访问的结果动态地显示在网页上。诸如此类的需求只用HTML是无法做到的,所以CGI便应运而生。CGI是在Web服务器运行的一个可执行程序,由网页的一个超链接激活进行调用,并对该程序的返回结果进行处理,显示在客户端的Web浏览器上。用CGI程序可以实现处理网页的表单处理、数据库查询、发送电子邮件等工作。CGI使网页变得不再是静态的,而是交互式的。Web服务器的CGI程序需要有用户调用才会执行,下面是Web浏览器、Web服务器和CGI程序之间的一个工作流程。
(1)用户通过Web浏览器访问CGI程序。
(2)Web服务器接收用户请求并交给CGI程序处理。
(3)CGI程序执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序。
(4)CGI程序产生某种Web服务器能理解的输出结果。
(5)Web服务器接收来自CGI程序的输出并且把它传回Web浏览器。
Perl语言解释器的安装
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量,如Perl、C、C++、Java。其中,Perl易编译调试、移植性颇强,可以说在众多的CGI编程语言中是最好的、最容易上手的语言。Perl几乎成了CGI的标准或代言词。每当人们提到CGI的时候,必然会想到Perl。Perl是Practical Extraction and Reporting Language实用摘录与报告语言的缩写,它自1987年初次登台亮相以来,它的用户数一直急剧膨胀。Perl不是由某个公司大力推广而得到发展的,正如Java那样,Perl全凭自身的优势来发展。从最初被当作一种在跨平台环境中书写可移植工具的高级语言开始,Perl就已经被广泛地认为是一种工业级的强大工具。Perl特别适合系统管理和Web编程。Perl实际上已经被所有Linux(包括UNIX)捆绑在一起作为标准部件发布了,如今的Perl语言已经被移植到除了Linux之外的多种操作平台上。
默认情况下,Red Hat Enterprise Linux安装程序会将Perl语言解释器安装在系统上,读者可使用下面的命令检查系统是否已经安装了Perl解释器或查看已经安装了何种版本。
rpm -q perl
命令执行结果如图7-17所示,这表示Perl解释器已安装,它的版本为5.8.8-10。
如果系统还没有安装Perl解释器,应将Red Hat Enterprise Linux 5第1张安装盘放入光驱,加载光驱后在光盘的Server目录下找到Perl解释器的RPM安装包文件perl-5.8.8-10.i386.rpm,使用下面命令安装Perl解释器。
rpm -ivh /mnt/Server/ perl-5.8.8-10.i386.rpm
httpd.conf文件的配置
1.设置存放CGI文件的目录权限
设置存放CGI文件的目录权限可以告诉Apache允许CGI程序在哪些目录下运行。例如主目录需要执行的CGI文件,应在主目录权限设置的Options指令中添加一个"ExecCGI"选项,如图7-18所示。
2.标明CGI程序的文件类型
找到"#AddHandler cgi-script .cgi"语句,删除前面的"#"即可,该语句告诉Apache扩展名为".cgi"的文件是CGI程序。如果同时想运行扩展名为.pl的文件可以在语句后面添加"pl",如图7-19所示。
测试CGI运行环境
测试CGI运行环境的步骤如下。
在CGI文件存放的目录(如/var/www/html/)中建立一个名为test.cgi的文件,该文件的内容如下。
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello World!\n";
执行命令"chmod +x /var/www/html/test.cgi",为test.cgi文件添加运行权限。
在客户端的浏览器访问"http://Linux服务器的IP地址/test.cgi",如果出现如图7-20所示的"Hello World!",则代表CGI运行环境配置成功。
参考:http://book.51cto.com/art/200811/96897.htm
http://book.51cto.com/art/200811/96918.htm