Apache 目录权限的设置
# 这是我创建的一个虚拟主机跟虚拟目录的配置
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.abc.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options -Indexes FollowSymLinks ## 这段我定义了主目录不能被浏览
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/html/download">
Options Indexes FollowSymLinks ## 但是我又指定我的 download 子目录可以被浏览
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<FilesMatch ".(txt|exe|ipa|apk)"> ## 这里是定义我的这些后缀文件可以下载,而不是直接打开 例如 .txt
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
</VirtualHost>
# Options -Indexes FollowSymLinks 定义目录使用哪些特性
MultiViews MultiViews 是 Apache 的一个智能特性。当客户访问目录中一个不存在的对象时,如:http://ip/download/a 这时 Apache 会查找目录下所有 a.* 的文件并返回给 客户 ## 这个特性我测试发现不好使!!!大家注意一下
All All 包含了除 MultiViews 之外的所有特性,如果没有 Options 语句,默认为 All
ExecCGI 允许在该目录下执行 CGI 脚本
FollowSymLinks 允许在该目录中使用符号连接
Includes 允许服务器端包含功能 (这是啥意思 ???)
IncludesNoExec 允许服务器端包含功能,但禁用执行 CGI 脚本
## 允许目录浏览会将 web 站点的文件夹、文件名结构暴露给黑客,并允许黑客浏览文件,所以指定该权限会带来安全隐患。非特殊情况应禁用此特性。可以在此特性前加 - ,例如:Options -Indexes FollowSymLinks
# AllowOverride None
此选项用于定义每个目录下 .htaccess (访问控制)文件中的指定类型。尽量避免使用 .htaccess 文件,所以设置为 None 。目录权限的设置放在主置文件 httpd.conf 的<Directory "path">和</Directory>语句之间。
# Order allow,deny
Order 选项定义缺省的访问权限与 Allow 和 Deny 语句的处理顺序。Allow 、Deny 语句可以针对客户机的域名或IP地址定义是否可以访问服务器。
Allow,deny : 缺省禁止所有客户机访问,因为 Allow 在 Deny 前被匹配,如果条件既匹配 Allow 又匹配 Deny ,则 Deny 生效。(后者覆盖前者)
Deny,Allow : 缺省允许所有客户机访问,因为 Deny 在 Allow 前被匹配,如果条件既匹配 Deny 又匹配 Allow ,则 Allow生效。(后者覆盖前者)
举例说明:
Order Allow,deny
Allow from all
##允许所有客户机访问,因为允许了所有,所以匹配不到 Deny
Order Deny,allow
Deny from abc.com
Deny from 192.168.2.99
##拒绝 abc.com、192.168.2.99 访问,允许其余客户机访问
Order Allow,deny
Allow from 192.168.2.0/24
##因为只允许 192.168.2.0/24 的客户机访问,所以拒绝了其余的
Order Deny,allow
Allow from 192.168.2.0/24
##允许所有客户机访问,因为没有匹配到拒绝,所有允许 2.0/24 还有其余的
Order Allow,deny
Allow from 192.168.2.0/24
Deny from 192.168.2.99
## 先匹配只允许 2.0/24 网段,然后拒绝 2.99 客户机
Order Deny,allow
Allow from 192.168.2.0/24
Deny from 192.168.2.99
# 这是我创建的一个虚拟主机跟虚拟目录的配置
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.abc.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options -Indexes FollowSymLinks ## 这段我定义了主目录不能被浏览
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/html/download">
Options Indexes FollowSymLinks ## 但是我又指定我的 download 子目录可以被浏览
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<FilesMatch ".(txt|exe|ipa|apk)"> ## 这里是定义我的这些后缀文件可以下载,而不是直接打开 例如 .txt
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
</VirtualHost>
# Options -Indexes FollowSymLinks 定义目录使用哪些特性
Indexes 允许目录浏览。当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache 会以超文本的形式返回目录中的文 件、子目录列表 如图:
MultiViews MultiViews 是 Apache 的一个智能特性。当客户访问目录中一个不存在的对象时,如:http://ip/download/a 这时 Apache 会查找目录下所有 a.* 的文件并返回给 客户 ## 这个特性我测试发现不好使!!!大家注意一下
All All 包含了除 MultiViews 之外的所有特性,如果没有 Options 语句,默认为 All
ExecCGI 允许在该目录下执行 CGI 脚本
FollowSymLinks 允许在该目录中使用符号连接
Includes 允许服务器端包含功能 (这是啥意思 ???)
IncludesNoExec 允许服务器端包含功能,但禁用执行 CGI 脚本
## 允许目录浏览会将 web 站点的文件夹、文件名结构暴露给黑客,并允许黑客浏览文件,所以指定该权限会带来安全隐患。非特殊情况应禁用此特性。可以在此特性前加 - ,例如:Options -Indexes FollowSymLinks
# AllowOverride None
此选项用于定义每个目录下 .htaccess (访问控制)文件中的指定类型。尽量避免使用 .htaccess 文件,所以设置为 None 。目录权限的设置放在主置文件 httpd.conf 的<Directory "path">和</Directory>语句之间。
# Order allow,deny
Order 选项定义缺省的访问权限与 Allow 和 Deny 语句的处理顺序。Allow 、Deny 语句可以针对客户机的域名或IP地址定义是否可以访问服务器。
Allow,deny : 缺省禁止所有客户机访问,因为 Allow 在 Deny 前被匹配,如果条件既匹配 Allow 又匹配 Deny ,则 Deny 生效。(后者覆盖前者)
Deny,Allow : 缺省允许所有客户机访问,因为 Deny 在 Allow 前被匹配,如果条件既匹配 Deny 又匹配 Allow ,则 Allow生效。(后者覆盖前者)
举例说明:
Order Allow,deny
Allow from all
##允许所有客户机访问,因为允许了所有,所以匹配不到 Deny
Order Deny,allow
Deny from abc.com
Deny from 192.168.2.99
##拒绝 abc.com、192.168.2.99 访问,允许其余客户机访问
Order Allow,deny
Allow from 192.168.2.0/24
##因为只允许 192.168.2.0/24 的客户机访问,所以拒绝了其余的
Order Deny,allow
Allow from 192.168.2.0/24
##允许所有客户机访问,因为没有匹配到拒绝,所有允许 2.0/24 还有其余的
Order Allow,deny
Allow from 192.168.2.0/24
Deny from 192.168.2.99
## 先匹配只允许 2.0/24 网段,然后拒绝 2.99 客户机
Order Deny,allow
Allow from 192.168.2.0/24
Deny from 192.168.2.99
## 先匹配拒绝 2.99 客户机,然后允许 2.0/24 网段和其余所有。所以这是允许所有客户机访问