IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Apache用户认证方法汇总

PT Ubuntu Blog 2010-07-18 23:39:48 累计浏览 3,839 次
本机暂存

一.基本的Apache用户认证方法:

若对某一目录下的文件如/home/ftp/pub需要做到用户认证,则在httpd.conf
中加入下面的行
<>
options indexes followsymlinks
allowoverride authconfig
order allow,deny
allow from all

<>
用在目录/home/ftp/pub下放文件.htaccess,内容如下:
authname ”shared files”
authtype basic
authuserfile /etc/.passwd
require valid-user

用随Apache来的程序htpasswd 生成文件/etc/.passwd,每行一个用户名:密码

只要能提供正确的用户名和密码对,就允许登录访问,这是针对任何地址来的
请求都要求提供用户名和密码认证。

二.针对部分网段或地址要求认证。

若公司LAN所在网段为192.168.0.0/24,且有一防火墙专线接入Internet,
内部网卡的地址为192.168.0.1/32,则现在希望所有通过拨本地163通过
防火墙上的apache反向代理向LAN上的另一WWW服务器访问时需要认证,而本地
LAN上的用户不需认证。可以在httpd.conf中放入:
〈Directory /home/ftp/pub>
Options Indexes FollowSymLinks
AllowOverride AuthConfig
order deny,allow
deny from 192.168.0.1
〈/Directory>

且在/home/ftp/pub/.htaccess中放入:
AuthName ”shared files”
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user
satisfy any

三.对同一目录及其下的子目录有不同的权限,仅某些人可以存取一目录下的
子目录。
如有一目录/home/ftp/pub/sales,有三个用户user1,user2,user3都需要用户名
和密码进入/home/ftp/pub,但仅user1,user2能进入/home/ftp/pub/sales.则
放下面的行到httpd.conf

〈Directory /home/ftp/pub>
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
〈/Directory>

〈Directory /home/ftp/pub/sales>
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
〈/Directory>

且看/home/ftp/pub/.htaccess为:
AuthName ”shared files”
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user

且看/home/ftp/pub/sales/.htaccess
AuthName ”shared files”
AuthType Basic
AuthUserFile /etc/.passwd
AuthGroupFile /etc/.salesgroup
require group manager

且文件/etc/.passwd内容为:
user1:passwd1
user2:passwd2
user3:passwd3

且文件/etc/.salesgroup内容为:
manager: user1 user2

――――――――――――――――――――

启用认证
先介绍用密码来保护服务器上的目录。

首先需要建立一个密码文件。这个文件应该放在不能被网络访问的位置,以避免被下载, 例如,如果,/usr/local/apache/htdocs以外的空间不能被网络访问, 那么可以考虑把密码文件放在/usr/local/apache/passwd目录中。

Apache在其安装目录的bin子目录中提供了叫htpasswd的工具,以建立密码文件,可以这样使用:

htpasswd -c /usr/local/apache/passwd/passwords rbowen

htpasswd会要你输入密码,并要求重新输入以确认:

# htpasswd -c /usr/local/apache/passwd/passwords rbowen
New password: mypassword
Re-type new password: mypassword
Adding password for user rbowen

如果htpasswd不在搜索路径中,则必须使用完整路径, 如,/usr/local/apache/bin/htpasswd

然后,需要修改httpd.conf或.htaccess文件, 以指示服务器允许哪些用户访问并向用户索取密码。 例如,要保护 /usr/local/apache/htdocs/secret 目录, 则可以将下列指令写入 /usr/local/apache/htdocs/secret/.htaccess, 或者httpd.conf的 <Directory /usr/local/apache/apache/htdocs/secret> 段。

AuthType Basic
AuthName “Restricted Files”
AuthUserFile /usr/local/apache/passwd/passwords
Require user rbowen

其中,AuthType指令选择了对用户实施认证的方法, 最常用的是由mod_auth提供的Basic。很重要的必须认识到的一点是,Basic认证方法并不加密来自用户浏览器的密码,因此,不应该用于高度敏感的数据。Apache在最近的版本中还有另一种更安全的认证方法,即由mod_auth_digest提供的AuthType Digest。

AuthName指令设置了使用认证的领域, 它起两个作用,首先,此领域说明会出现在显示给用户的密码提问对话框中, 其次,也帮助客户端程序确定应该输入哪个密码。

所以,如果一个用户已经在”Restricted Files”领域通过了认证, 则客户端就可以尝试使用”Restricted Files”的密码来访问同一个服务器的其他任何领域, 从而使多个受限领域共享密码,以避免用户重复输入。当然,考虑到安全,如果服务器变了,客户端始终会要求重新输入密码。

AuthUserFile指令设置了密码文件,也就是刚才我们已经用htpasswd建立的。 如果用户很多则认证速度会很慢,因为对每个请求都必须搜索这个纯文本文件,对此,Apache还支持把用户信息存入快速数据库, mod_auth_dbm模块提供了指令AuthDBMUserFile,并可以用dbmmanage程序建立和操作这些数据库。 Apache模块数据库中还提供了其他许多认证选项。

最后,Require指令设置了允许访问的用户, 下一节将对Require指令作详细说明。

允许多人访问
上述指令只允许一个人(一个叫rbowen的用户)访问这个目录, 但是多数情况下,都需要允许多人访问,所以就要用到AuthGroupFile。

首先,需要建立一个组文件以确定组中的用户。 其格式很简单,可以用你喜欢的编辑器建立,例如:

GroupName: rbowen dpitts sungo rshersey

它只是每组一行的一个用空格分隔的组成员列表。

向已有的密码文件中增加一个用户,可以输入:

htpasswd /usr/local/apache/passwd/password dpitts

程序的提示和上面的一样,但是,它会附加到已有的文件中, 而不是建一个新的(参数-c可以强制建立新的密码文件)。

现在,需要修改.htaccess文件如这样:

AuthType Basic
AuthName “By Invitation Only”
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName

如此,GroupName组中的成员都在密码文件中有一个相应的记录, 从而允许他们输入正确的密码以进入。

除了建立组文件,还有另一种途径允许多人访问,即使用如下指令:

Require valid-user

使用上述指令,而不是require user rbowen, 可以允许密码文件中的所有用户以正确的密码进行访问。这里甚至允许列举各个组,而为每个组建立密码文件, 其优点是,Apache只需要校验一个文件,而缺点是,必须维护众多密码文件,而且要确保AuthUserFile指令指定了一个正确的密码文件。

可能的问题
由于采用了Basic认证的方法, 每次向服务器请求甚至刷新一个受保护的页面或图片时都必须校验用户名和密码, 为此,必须打开密码文件并逐行搜索用户名,因此,服务器响应速度会受一些影响, 其程度与密码文件大小成正比。

所以,对密码文件中的用户总数存在一个实际上的上限, 此上限取决于特定的服务器机器的性能,但是一般有几百个用户就会对响应速度有明显的影响, 在这种情况下,可以考虑用其他认证方法。

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

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

上例首先拒绝任何人,然后允许来自特定主机的访问。

创建:2005-10-27 16:18:00
作者:Unlinux
来自: http://www.Unlinux.com

http://www.chinaunix.net 作者:南非蜘蛛 发表于:2003-01-16 13:34:28

http://sinbad.dhs.org 作者:吴阿亭

http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#satisfy

同时使用AllowRequire时的访问策略。参数可以设置为 All 或 Any 。这个指令仅在某个特定区域的访问控制同时被用户名/密码客户端主机地址进行限定的时候起作用。默认行为(All)采取客户端首先通过地址访问限制并且输入有效的用户名和密码的方式。使用可选项 Any 将使客户端在通过主机限制或是输入一个有效的用户名和密码两种方式之一得到访问权限。这样,就可以通过密码来限制一个区域的访问,但允许某些特定地址的客户端访问时不需要输入密码。

比如,如果您想让您局域网内的用户访问您的web网站时不受限制,但局域网外的用户需提供密码才能进行访问,您可以采取类似如下的配置:

Require valid-user
Allow from 192.168.1
Satisfy Any

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,057)
  2. server日志的路径分析 (累计阅读 11,240)
  3. AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁) (累计阅读 10,088)
  4. 查看 Apache并发请求数及其TCP连接状态 (累计阅读 10,068)
  5. PHP程序的执行流程 (累计阅读 10,032)
  6. Cacti 添加 Apache 监控 (累计阅读 9,244)
  7. 大型高并发高负载网站的系统架构分析 (累计阅读 9,004)
  8. 使用Apache 和Passenger来运行puppetmaster (累计阅读 8,316)
  9. 使用apache的404设置来转向可能不存在的页面 (累计阅读 8,206)
  10. 使用.htaccess 开启gzip 缓存文件 网页 提高速度 (累计阅读 7,602)