1、apache 目录权限设置方法可以使用和这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用。下面是主配置文件中设置目录权限的例子。Options Indexes MultiViewsAllowOverride NoneOrder allow,denyAllow from all(1)定义目录使用哪些特性Options Indexes MultiViews Options 选项用于定义目录使用哪些特性,包括 Indexes、MultiViews 和ExecCGI 等,如表 7-1 所示。表 7-1
2、目录特性选项命 令说 明Indexes允许目录浏览当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache 以超文本形式返回目录中的文件和子目录列表(虚拟目录不会出现在目录列表中),如图 7-8 所示MultiViews允许内容协商的多重视图MultiViews 其实是 Apache 的一个智能特性。当客户访问目录中一个不存在的对象时,如访问“http:/192.168.16.177/icons/a”,则 Apache 会查找这个目录下所有 a.*文件。由于 icons 目录下存在 a.gif 文件,因此 Apache 会将a.gif 文件返回给客户
3、,而不是返回出错信息AllAll 包含了除 MultiViews 之外的所有特性,如果没有 Options 语句,默认为AllExecCGI允许在该目录下执行 CGI 脚本FollowSymLinks可以在该目录中使用符号连接Includes允许服务器端包含功能IncludesNoExec允许服务器端包含功能,但禁用执行 CGI 脚本让主目录允许目录浏览细心的用户可能会发现虽然在主目录设置了 Indexes 权限,且主目录中并不存在默认文档,但访问时并不会出现目录列表,而只出现 Apache 的测试页面。解决这个问题的方法很简单,只要将位于/etc/httpd/conf.d/目录下的welco
4、me.conf 文件删除后重启 Apache 即可。图 7-8 Apache 返回的目录列表 允许目录浏览要小心一旦定义允许目录浏览,就会将 Web 站点的文件夹和文件名结构暴露给黑客。目录浏览还会允许黑客浏览文件并掌握服务器配置信息,所以指定该权限往往带来安全性上的隐患。除非有充足的理由要使用目录浏览,否则应该禁用它。(2)设置.htaccess 文件中的指令类型AllowOverride None AllowOverride 选项用于定义位于每个目录下.htaccess(访问控制)文件中的指令类型。基于安全和效率的原因,虽然可以通过.htaccess 来设置目录的访问权限,但应尽可能地避免
5、使用.htaccess 文件,所以一般将 AllowOverride设置为“None“,即禁止使用.htaccess 文件,而将目录权限的设置放在主配置文件 httpd.conf 的和语句之间。(3)设置缺省的访问权限与 Allow 和 Deny 语句的处理顺序Order allow, deny Order 选项用于定义缺省的访问权限与 Allow 和 Deny 语句的处理顺序。Allow和 Deny 语句可以针对客户机的域名或 IP 地址进行设置,以决定哪些客户机能够访问服务器。Order 语句通常设置为以下两种值之一。allow, deny:缺省禁止所有客户机的访问,且 Allow 语句在
6、 Deny 语句之前被匹配。如果某条件既匹配 Deny 语句又匹配 Allow 语句,则 Deny 语句会起作用(因为 Deny 语句覆盖了 Allow 语句)。deny, allow:缺省允许所有客户机的访问,且 Deny 语句在 Allow 语句之前被匹配。如果某条件既匹配 Deny 语句又匹配 Allow 语句,则 Allow 语句会起作用(因为 Allow 语句覆盖了 Deny 语句)。下面举一些例子来说明 Order、Allow 和 Deny 语句的使用方法。【例 1】允许所有客户机的访问。Order allow,denyAllow from all 【例 2】除了来自 域和 IP
7、 地址为 192.168.16.111 的客户机外,允许所有客户机的访问。Order deny ,allowDeny from Deny from 192.168.16.111 【例 3】仅允许来自网络 192.168.16.0/24 客户机的访问。Order allow,denyAllow from 192.168.16.0/24 对比:Order deny ,allowAllow from 192.168.16.0/24 这两条语句是允许所有客户机的访问。【例 4】仅允许来自网络 192.168.16.0/24 客户机的访问,但 IP 地址为192.168.16.111 的客户机除外。Or
8、der allow,denyAllow from 192.168.16.0/24Deny from 192.168.16.111 对比: Order deny ,allowAllow from 192.168.16.0/24Deny from 192.168.16.111 由于 Allow 语句覆盖了 Deny 语句,因此这 3 条语句是允许所有客户的访问。参考:Options FollowSymLinks AllowOverride None Apache 服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,一个是在设置文件 httpd.conf(或 access.co
9、nf)中针对每个目录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动 httpd 守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess 文件设置具体目录的访问控制更为灵活方便。 Directory 语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行的,设置了允许符号连接的选项 FollowSymLinks ,以及使用 AllowOverrid
10、e None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。 由于 Apache 对一个目录的访问控制设置是能够被下一级目录继承的,因此对根目录的设置将影响到它的下级目录。注意由于 AllowOverride None 的设置,使得 Apache 服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目录下的访问控制文件,直至 httpd.conf(或 access.conf )中为某个目录指定了 允许 Alloworride,即允许查看访问控制文件。由于 Apache 对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制
11、文件,那么 Apache 就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得 Apache 从 httpd.conf 中具体指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置 AllowOverride None 不但对于系统安全有帮助,也有益于系统性能。 Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all 这里定义的是系统对外发布文档的目录的访问设置,设置不同的 AllowOverride 选项,以定义配置文件中的
12、目录设置和用户目录下的安全控制文件的关系,而 Options 选项用于定义该目录的特性。 配置文件和每个目录下的访问控制文件都可以设置访问限制,设置文件是由管理员设置的,而每个目录下的访问控制文件是由目录的属主设置的,因此管理员可以规定目录的属主是否能覆盖系统在设置文件中的设置,这就需要使用 啊 AllowOverride 参数进行设置,通常可以设置的值为: AllowOverride 的设置 对每个目录访问控制文件作用的影响 All 缺省值,使访问控制文件可以覆盖系统配置 None 服务器忽略访问控制文件的设置 Options 允许访问控制文件中可以使用 Options 参数定义目录的选项
13、FileInfo 允许访问控制文件中可以使用 AddType 等参数设置 AuthConfig 允许访问控制文件使用 AuthName,AuthType 等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录 Limit 允许对访问目录的客户机的 IP 地址和名字进行限制每个目录具备一定属性,可以使用 Options 来控制这个目录下的一些访问特性设置,以下为常用的特性选项: Options 设置 服务器特性设置 All 所有的目录特性都有效,这是缺省状态 None 所有的目录特性都无效 FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录 (Docume
14、ntRoot)之外的文档 SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性 ExecCGI 允许这个目录下可以执行 CGI 程序 Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有 index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表 此外,上例中还使用了 Order、Allow、Deny 等参数,这是 Limit 语句中用来根据浏览器的域名和 IP 地址来控制访问的一种方式。其中 Order 定义处理Allow 和 Deny 的顺序,而 Allow、Deny
15、 则针对名字或 IP 进行访问控制设置,上例使用 allowfrom all,表示允许所有的客户机访问这个目录,而不进行任何限制。 UserDir public_html 当在一台 Linux 上运行 Apache 服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如 # # AllowOverride FileInfo AuthConfig Limit # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec # # Order allow,deny # Allow from all # # # Order deny,allow # Deny from all # # 这里可以看到 Directory 的另一个用法,即可以通过简单的模式匹配方法,针对分布在不同目录下的子目录定义访问控制权限。这样设置就需要 Apache 服务器对每个路径进行额外的处理,因此就会降低服务器的性能,所以缺省情况并没有打开这种访问限制。