linux下apache用户授权访问和IP授权访问冲突问题

2024-12-03 20:08:41
推荐回答(1个)
回答1:

建议你先查阅一下Apache手册,手册上写得明明白白的,以下内容摘录自手册文件:
首先需要建立一个密码文件。具体如何创建这个文件与你使用什么样的认证支持模块有关(这里假定你使用mod_authn_file模块)。这个文件应该放在不能被网络访问的位置,以避免被下载。例如,如果/usr/local/apache2/htdocs以外的空间不能被网络访问,那么可以考虑把密码文件放在/usr/local/apache2/passwd目录中。
Apache在其安装目录的bin子目录中提供了htpasswd工具,用于建立密码文件,可以这样使用:
htpasswd -c /usr/local/apache2/passwd/passwords rbowen
htpasswd会要你输入密码,并要求重新输入以进行确认:
# htpasswd -c /usr/local/apache2/passwd/passwords rbowen
New password: mypassword
Re-type new password: mypassword
Adding password for user rbowen
如果htpasswd不在搜索路径中,则必须使用完整路径,如:/usr/local/apache2/bin/htpasswd
然后修改httpd.conf或.htaccess文件,指示服务器允许哪些用户访问并向用户索取密码。若要保护/usr/local/apache2/htdocs/secret目录,则可以将下列指令写入/usr/local/apache2/htdocs/secret/.htaccess或者httpd.conf的段。
AuthType Basic
AuthName "Restricted Files"
#(下面这一行是可选的)
AuthBasicProvider file
AuthUserFile /usr/local/apache2/passwd/passwords
Require user rbowen

......

其他认证方法

基于用户名和密码的认证只是方法之一,时常会有不需要知道来访者是谁,只需要知道来自哪里的情况。

Allow和Deny指令可以允许或拒绝来自特定主机名或主机地址的访问,同时,Order指令告诉Apache处理这两个指令的顺序,以改变过滤器。

这些指令的用法:

Allow from address

address可以是一个IP地址(或者IP地址的一部分),也可以是一个完整的域名(或者域名的一部分),还可以同时指定多个IP地址和域名。

比如,要拒绝不受欢迎的兜售垃圾的站点:

Deny from 205.252.46.165

这样,这个指令所管辖的区域将拒绝所有来自该地址的访问。除了指定IP地址,也可以指定域名,如:

Deny from host.example.com

另外,还可以指定地址或域名的一部分来阻止一个群体:

Deny from 192.101.205
Deny from cyberthugs.com moreidiots.com
Deny from ke

Order可以组合Deny和Allow指令,以保证在允许一个群体访问的同时,对其中的一些又加以限制:

Order deny,allow
Deny from all
Allow from dev.example.com

只列出Allow指令不会得到你想要的结果,因为它在允许指定对象访问的同时并不禁止其他未列出的对象的访问。所以上例使用的方法是:首先拒绝任何人,然后允许来自特定主机的访问。