如何拒绝访问给定目录的所有子目录? (允许手动修改目录树中单个项目的访问权限。)
我试图用<Directory(Match)>
指令来做。服务器配置(启用了000个站点)如下所示:
DocumentRoot /var/www
<Directory /var/www>
Allow from all
Deny from none
Order deny,allow
</Directory>
<Directory /var/www/*>
Deny from all
</Directory>
http://localhost/
的查询成功显示/var/www/index.html
,并且对所有子目录的所有查询都失败。
问题是:对httproot中文件的任何查询都失败 - 即请求http://localhost/index.html
将导致403 Forbidden
。
<Directory(Match)>
指令似乎与目录AND文件匹配!?
为了确定这是否属实,我试过:
<Directory /var/www/i*>
Deny from all
</Directory>
这拒绝只访问以“i”开头的文件/目录。
有没有办法改变这种行为,让<Directory>
只匹配目录?还有另一种方法可以实现所有子目录被拒绝吗? (除了手动拒绝所有文件或手动启用所有文件)
答案 0 :(得分:16)
最后,解决方案变得非常简单:
<Directory /var/www/*/>
Allow from None
Order allow,deny
</Directory>
注意目录模式之后的尾部斜杠/
,这将使它只匹配目录,而不是文件!
这与我们对<Directory>
- 指令的期望完全一样,因为它拒绝仅访问/var/www/
的直接子目录。
仍然可以使用<Directory>
指令手动重新启用指定的子目录(树中的任何位置)。
这与<DirectoryMatch>
相反
- 还匹配所有文件&amp;树中的目录和
- 覆盖树中任何项目的所有<Files>
或<Directory>
指令。
答案 1 :(得分:3)
这对我有用。
<DirectoryMatch "^/var/www/(.+)/"> # don't put $ at the end
Order Allow,Deny
Deny From All
</DirectoryMatch>
<小时/> 修改
为了不拒绝子子目录(下面的注释),在配置文件中添加上面的DirectoryMatch:
<DirectoryMatch "^/var/www/(.+?)/(.+)/"> # again no $, see comment
Order Deny,Allow
Allow From All
</DirectoryMatch>
答案 2 :(得分:1)
使用此:
<Directory /var/www/public>
allow from all
</Directory>
<DirectoryMatch "^/var/www/public/(.+)/">
deny from all
</DirectoryMatch>
您可能想要添加选项等。
答案 3 :(得分:0)
所以,我有两个可能有帮助(或没有)的想法。
首先,位置可以覆盖您的目录权限。所以一定要确保没有。点击localhost /正在点击你设置为root的任何内容,这可能会覆盖你的安全性。这就是为什么如果直接指定文件,你就无法实现它。因此,如果您不希望人们能够访问您的根,you should not specify a root。
关于限制访问子目录的观点,我会查看其他帖子。 ......也许没用。也许更多关于您的用例的细节会有所帮助。
答案 4 :(得分:0)
最好的方法是将公众无法使用的所有内容移动到根树之外的目录,例如/ home / my / app /
<Directory /home/my/app>
Order Allow,Deny
Deny from all
</Directory>
然后为该目录中的Apache用户以及通向该用户的所有目录提供读取权限,例如/ home和/ my
这样,当发生某些根目录配置错误时,不存在某些内容泄露的风险。
答案 5 :(得分:0)
您可以通过从配置文件中的Indexes
指令中删除Options
选项来禁用所有子目录中的自动索引,因此对于默认配置,Options
指令应如下所示:
的httpd.conf:
...
Options FollowSymLinks
...
(未设置“索引”选项。)
然后,将index.html
或index.php
文件放在您希望可供客户端访问的每个特定子目录中。
如果要在某个特定目录中启用自动索引,可以在这些目录中添加.htaccess
个文件,并将此行放在.htaccess
文件中:
Options Indexes
请注意.htaccess
会对其目录及其所有子目录产生递归影响,因此您应该通过添加{来排除任何不希望使用此选项的递归子目录。 {1}}并通过以下方式禁用自动索引:
.htaccess
注意:要启用Options -Indexes
个文件并对apache配置生效,您应该在目录上.htaccess
匹配您要放置AllowOveride All
文件。