⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1297.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 5 页
字号:
  AuthGroupFile /etc/httpd/conf/groups<br>
  <br>
  AuthUserFile /etc/httpd/conf/users<br>
  <br>
  &lt;/Directory&gt;<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>
  &lt;Directory "/home/public"&gt;<br>
  <br>
  order allow,deny<br>
  <br>
  allow from all<br>
  <br>
  AllowOverride AuthConfig<br>
  <br>
  &lt;/Directory&gt;<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>
  &lt;html&gt;<br>
  <br>
  &lt;?php phpinfo(); ?&gt;<br>
  <br>
  &lt;/html&gt;<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>
  在通常的情况下,我们可以像处理其他功能那样处理CGI。但是,当你的CGI程序试图<br>
去写一个服务器上的文件时(比如说,留言板),你会发现浏览器将返回一个“服务器<br>
内部错误”的信息。这是因为apache的服务程序缺省是使用nobody权限启动的,所以cg<br>
i程序的权限也是nobody。这样,它不能写任何服务器文件(因为没有哪个文件的属主是<br>
nobody)。<br>
  <br>
  解决的方法有许多种,最简单的方法是更改httpd.conf中服务器的运行权限,例如,<br>
将User和Group都改成someone,然后就可以写someone的文件了。问题在于,对于一个为<br>
许多用户提供主页空间的服务器来说,这样的方法是行不通的,除非设置为root,但这<br>
又很容易导致安全性问题。<br>
  <br>
  常用的办法之一是使用setuid。按照我们前面讲的,setuid程序执行时按照自己的拥<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -