📄 00000011.htm
字号:
现在我们来看看身份控制功能。身份控制功能其实很简单,就是对某个目录的存取权 <BR>限加上限制,最常用的功能是加上密码,要求用户必须输入正确的用户名和密码才能进 <BR>入。作用上,它和前面的地址控制类似,只是这一次限制的是用户的身份。 <BR> <BR> 要设置某个目录的存取权限,首先必须允许身份认证,这是在对应的directory段落里 <BR>面设置的,例如,有个目录/home/public,要使用身份认证,需要使用AuthType进行定 <BR>义: <BR> <BR> <Directory "/home/public"> <BR> <BR> AuthType Basic <BR> <BR> AuthName "Give Your Name and Passwd" <BR> <BR> Require valid-user <BR> <BR> order allow,deny <BR> <BR> allow from all <BR> <BR> AuthGroupFile /etc/httpd/conf/groups <BR> <BR> AuthUserFile /etc/httpd/conf/users <BR> <BR> </Directory> <BR> <BR> 这里面涉及到了几个新的命令: <BR> <BR> AuthType <BR> <BR> 使用的身份认证形式,就我所知道的,实际上只能使用Basic和Digest两个选项,而且 <BR>通常总是使用Basic。 <BR> <BR> AuthName <BR> <BR> 当进入一个需要身份认证的目录的时候,将弹出一个对话框让你输入用户名和口令, <BR>AuthName是对话框的提示信息。 <BR> <BR> AuthGroupFile <BR> <BR> AuthUserFile <BR> <BR> 这两个选项用来设置身份认证的用户名文件。注意Apache并不使用机器的真实账号, <BR>相反你必须用htpasswd命令来建立WWW用户,格式是: <BR> <BR> htpasswd [-c] 文件名 用户名 <BR> <BR> -c选项创建一个新的www用户名字文件,文件名是容纳www用户名和口令的文件名字, <BR>例如 <BR> <BR> htpasswd –c /etc/httpd/conf/users user1将创建/etc/httpd/conf/users文件,并 <BR>且加入user1用户,htpasswd程序还同时提示你输入用户口令。htpasswd /etc/httpd/c <BR>onf/users user2将继续加入user2。以此类推。 <BR> <BR> 至于www的group文件就是一个普通的文本文件,每行格式是: <BR> <BR> 组名:用户1 用户2,.... <BR> <BR> 例如: <BR> <BR> group1:user1 user2 <BR> <BR> 至于两个Auth命令的用法则可以看看刚才的那个例子,就是直接给出文件名。 <BR> <BR> <BR> Require <BR> <BR> 这个选项设定允许哪些用户进入,Require user [用户列表]将允许某些用户进入,例 <BR>如Require user user1 user2 将允许user1和user2访问,而Require group [组列表]将 <BR>允许某些组访问。另外有两个特殊的选项就是Require valid-user和Require valid-gr <BR>oup,分别表示只允许在www用户/组文件中存在的用户和组访问。 <BR> <BR> 如上面说的那样设置了httpd.conf并且建立了users和groups文件,然后重新启动Apa <BR>che,现在就可以访问这个站点了。当你用IE或者Netscape 访问的时候,会弹出一个对 <BR>话窗口让你输入用户名和口令: <BR> <BR> <BR> <BR> 图6.1 身份认证 <BR> <BR> 这是进行用户身份认证的标准方法。 <BR> <BR> 一般来说,对于普通的站点,这样的处理方式就已经足够,问题是,在虚拟主机的情 <BR>况下,允许每个虚拟主机的Web管理者修改你的httpd.conf显然是无法想象的。还记得我 <BR>们前面提到的AccessFileName和AllowOverride选项吗?利用AccessFileName选项可以定 <BR>义缺省的存取控制文件的名字,一般是.htaccess。然后,你需要允许每个目录的自身设 <BR>定功能: <BR> <BR> AllowOverride AuthConfig <BR> <BR> 这样的行将允许用户用自己的有关Auth的定义去覆盖缺省的定义,例如,我们可以把 <BR>上面的设置改成: <BR> <BR> <Directory "/home/public"> <BR> <BR> order allow,deny <BR> <BR> allow from all <BR> <BR> AllowOverride AuthConfig <BR> <BR> </Directory> <BR> <BR> 然后在/home/public这个目录下面建立一个文件.htaccess,内容是 <BR> <BR> AuthType Basic <BR> <BR> AuthName "Give Your Name and Passwd" <BR> <BR> Require valid-user <BR> <BR> AuthGroupFile /etc/httpd/conf/groups <BR> <BR> AuthUserFile /etc/httpd/conf/users <BR> <BR> 然后同样建立users和groups文件,当Apache准备访问这个目录的时候,会自动使用. <BR>htaccess里面定义的信息去代替本来应该在httpd.conf里面设置的内容。当然,这种代 <BR>替只是对于这个目录有效。 <BR> <BR> Limit和Order,Allow/Deny也可以在.htaccess文件里面设置。当然,AccessFileNam <BR>e则设置这个文件的缺省名字。 <BR> <BR> 6.3.5 重新编译Apache和附加产品 <BR> <BR> Apache的功能已经十分强大了,但是很多人仍然认为它的功能还不够强大,于是为它 <BR>开发了许许多多的功能,这些功能通常都以源代码的形式提供。另外,由于某些原因, <BR>Apache的一些特殊功能(比如我们马上要介绍的SuEXEC)在缺省设置里面是不包括的。 <BR>如果你只是要自己建立一个简单的Web站点,那可能并不需要这些功能,但是很多人总希 <BR>望自己的站点功能更强大,页面更美观。无论哪一种情况,你都很可能需要重新编译Ap <BR>ache或者某些产品。 <BR> <BR> 编译Apache是一件相当恶心的事情,因为有太多的东西需要设定,你可以安装apache <BR>的源代码,将它展开后进入到里面,执行./configure –help可以显示configure命令的 <BR>选项,你看看需要设置多少东西。其中最主要的是设置允许使用哪些模块或者DSO,以及 <BR>缺省的系统目录。要在命令行输入如此之长的配置命令是不现实的,你肯定需要建立一 <BR>个脚本文件来处理这件事情,例如,下面是我的配置文件: <BR> <BR> ./configure --enable-module=ssl --enable-module=proxy \ <BR> <BR> --enable-module=alias --enable-module=so --enable-module=auth_db \ <BR> <BR> --enable-module=vhost_alias --with-perl=/usr/bin/perl \ <BR> <BR> --prefix=/usr --exec-prefix=/usr \ <BR> <BR> --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec \ <BR> <BR> --mandir=/usr/man --sysconfdir=/etc/httpd/conf --datadir=/home/httpd/html <BR>\ <BR> <BR> --includedir=/usr/include/apache --localstatedir=/var/state/httpd \ <BR> <BR> --runtimedir=/var/log --logfiledir=/var/log --proxycachedir=/var/cache \ <BR> <BR> --enable-suexec --suexec-caller=nobody \ <BR> <BR> --suexec-logfile=/var/log/httpd/suexec.log --suexec-userdir=cgi-bin \ <BR> <BR> --suexec-uidmin=10 --suexec-gidmin=10 \ <BR> <BR> --suexec-safepath=/usr/bin:/bin:/usr/local/bin \ <BR> <BR> --suexec-docroot=/home/ \ <BR> <BR> 其中关于xxxdir=的选项的含义是一目了然的,通常Apache源代码的设置是将所有的东 <BR>西安装在/usr/local/apache下面,而你可以用-xxxdir=选项改变它,例如-mandir=/us <BR>r/man表示手册页面将被安装到/usr/man,而-bindir=/usr/bin和-sbindir=/usr/sbin代 <BR>表apache的执行程序被安装到/usr/bin和/usr/sbin等等。 <BR> <BR> --enable-module是将某个模块编译入内核,通常用./configure –help可以显示那些 <BR>模块被设定为缺省打开而那些是缺省关闭的。例如-enable-module=ssl代表在apache执 <BR>行程序中直接启用ssl。还有一个相反的选项叫-disable-module。 <BR> <BR> 而-enable-suexec是启动SuEXEC功能(见下节)。 <BR> <BR> 执行配置文件之后,make,make install,然后重新启动Apache,就可以使用新的功能 <BR>了。 <BR> <BR> 实际上,编译apache的主要理由是加入一些模块,所谓的模块是可以添加在Apache里 <BR>面提供新功能的产品。通常,我们可以象我刚才说的那样用-enable-module命令把模块 <BR>直接加入Apache里面。不过,也有时候,可以把模块编译成独立的模块文件-DSO(Dyna <BR>mic Shared Object),以独立文件的形式提供,并且在httpd.conf文件里面用LoadMod <BR>ule命令装入,这样就不需要重新编译源代码了。这要求你的apache编译的时候必须支持 <BR>装入模块(--enable-mudule=so,--enable-rule=SHARED_CODE)。 <BR> <BR> 把模块编译成为DSO的命令是-enable-shared=xxx。例如把proxy支持编译成DSO的命令 <BR>就是-enable-shared=proxy。编译后会生成对应的.so文件,就可以用LoadModule命令装 <BR>入了。不过,一般我们建议将模块直接编译入apache程序,除非是使用后提供的模块。 <BR>(如下面说的PHP3) <BR> <BR> 由于可以使用模块扩展Apache的功能,有许多的人为它编写各种功能扩展程序,其中 <BR>最重要的是SSL支持和脚本语言支持。SSL支持我们将放在安全性的那一章来讲,现在主 <BR>要介绍服务器脚本。 <BR> <BR> 用过Windows NT作页面服务的用户应该都知道ASP,ASP在服务器端运行,服务器将它 <BR>解释为HTML文件并且送交给客户。不过ASP只能在IIS Server上运行。 <BR> <BR> Apache有一个类似的东西叫php3,也是一种服务器端脚本语言,通常在Apache的缺省 <BR>安装中并没有php3支持,你需要自己安装php3源码并且编译成Apache模块。php3的源程 <BR>序在RedHat 6.1的源代码盘里面有,当然你也可以自己去下载它。另外,确定你已经安 <BR>装了apache-devel软件包。 <BR> <BR> 为了把php3编译为apache模块,需要一个apache工具,称为apxs程序,缺省的情况下 <BR>,这个文件是/usr/sbin/apxs,先确定一下这个文件的位置,然后安装php3源代码。通 <BR>常这个代码是rpm文件,安装后是位于/usr/src/redhat/SOURCES下的一个tgz包,展开它 <BR>之后,进入php3源代码目录,先浏览一下configure程序的选项(./configure –help) <BR>,然后开始编译,这里用的是最小编译选项: <BR> <BR> ./configure –with-apxs=/usr/sbin/apxs <BR> <BR> make <BR> <BR> 然后将生成的libphp3.so拷贝到一个合适的地方,比如说/usr/lib。接着就可以装入 <BR>动态连接库了。这可以用LoadModule命令完成: <BR> <BR> 在httpd.conf中加入这样的行: <BR> <BR> LoadModule php3_module /usr/lib/libphp3.so <BR> <BR> AddModule mod_php3.c <BR> <BR> AddType application/x-httpd-php3 .php3 <BR> <BR> AddType application/x-httpd-php3-source .phps <BR> <BR> LoadModule的语法是LoadModule [模块名] [模块文件名],然后的AddType命令启用了 <BR>php3的解释功能,重新启动apache,php3功能就可以使用了。当然,如果你重新编译了 <BR>apache,要确保加入了装入模块支持。 <BR> <BR> 为了测试php3是否正确安装了,可以建立这样的一个文件,命名为test.php3: <BR> <BR> <html> <BR> <BR> <?php phpinfo(); ?> <BR> <BR> </html> <BR> <BR> 然后把它拷贝到你的DocumentRoot下面,在浏览器中输入(比如说)httpd://www.mydo <BR>main.com/test.php3,你会看到好几屏的测试信息,这就表示php3已经工作了。 <BR> <BR> php3支持很多扩展功能,其中最重要的是和各种数据库的接口,例如可以用php3脚本 <BR>访问Oracle,Sybase,MySQL等等,由于本书不是主页指南,无法详细地向你叙述php3的 <BR>详情,你可以自己看php3的手册。 <BR> <BR> 不过,尽管php3功能十分强大,但是它确实不容易学懂。为此,有一些其他的脚本工 <BR>具,例如服务器端的JavaScript等等,它们也经常被发行为Apache的模块,安装方法和 <BR>php3大同小异。另外,也有一些人开发了ASP到java或者php3的解释程序,这样就可以在 <BR>Apache上使用ASP了(主要是为了支持用FrontPage做的主页),安装起来也不复杂,例 <BR>如iasp,这个程序可以把ASP翻译成java程序,只要你安装了java jdk,使用它是一件很 <BR>轻松的事情。 <BR> <BR> 6.3.6 SuEXEC和其他 <BR> <BR> 对于许多用户来说,可能最常用的交互工具仍然是CGI。CGI程序从网页的输入得到信 <BR>息,并且存取服务器的文件。 <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -