87 FreeBSD连载:基于用户的访问控制( 二 )


当基于用户的认证和基于地址的认证综合使用时,可以通过使用satify参数指定不同的限制条件,如果设置satify all,那么必须同时通过用户和地址认证才能访问网页,而设置satify any,只需要通过一个认证客户就能访问这个目录了 。缺省情况下Satify参数的值为all 。下面为一个综合了地址认证和用户认证的.htaccess的例子,这个例子允许private.site的计算机可以不需认证访问这台服务器,而其他位置的用户必须是group1组中的合法用户,或者是user1、user2、user3用户,才能访问这台服务器 。
AuthUserFile /usr/local/etc/.htpasswdAuthGroupFile /usr/local/etc/.htgroupAuthName SecurityAuthAuthType Basicorder deny,allowdeny from allallow from private.siterequire group group1require user user1 user2 user3satify any其他认证方式
Apache使用AuthType指定加密的方式,AuthType设为Basic时为使用命令htpasswd创建口令文件并进行口令加密 。然而这种方式有两个缺点,一个为浏览器将在Internet上使用明文发送用户名和口令信息,另一个是htpasswd的口令文件为普通文本文件,这样当用户数目较多时,查找用户的效率就很低 。
【87 FreeBSD连载:基于用户的访问控制】为了弥补安全性的缺点,可以将AuthType设置为Digest,这样就会使用Digest鉴别方式进行认证,此时认证口令文件要使用AuthDigestFile来规定,而口令文件必须使用另一个加密程序htdigest产生和维护,而hdigest的使用方法和htpasswd相同 。在Digest认证方式下,浏览器不会直接发送口令的明文信息,而是在传输口令之前先使用MD5算法进行编码处理 。注意,不是所有类型的浏览器都支持Digest类型的鉴别方式的,只有在浏览器和服务器同时都支持Digest方式时,这种认证才可行 。
AuthType为Basic时,是使用系统加密方法,一般是使用DES算法,但在FreeBSD下有可能是使用的MD5算法,但除非管理员希望在不同系统间共享口令文件,否则不必考虑他们使用的到底是何种算法 。需要与其他系统兼容时,可以重新安装DES算法 。但在系统使用时重新安装加密算法,就无法重建整个口令文件,因此不推荐在系统使用过程中更换认证算法,而应该在系统安装时就确定使用的认证算法 。
为了减少用户数量较多时服务器的处理开销,就必须使用数据库技术,这是因为数据库使用了索引技术,对数据的查找就比较快速 。Unix下最简单的数据库为使用系统提供的DB(或DBM)库进行创建数据库文件的技术,Apache服务器中使用模块mod_auth_db.so对这种数据库口令文件提供支持 。htpasswd产生的文本文件在有几百个用户时就会花费相当大的服务器开销,而DBM格式的认证方式可以高效的支持上万个用户 。
BSD风格的Unix系统通常使用DB库,而其他Unix通常使用DBM库 。因此其他Unix使用的命令和设置中应该为dbm而非db 。
为了支持这种认证方式,应载入mod_auth_db.so模块,使用Ports Collection安装的Apache服务器缺省情况就支持这个模块而不需要改动 。可以让Apache同时支持多种认证方式,而不会发生冲突 。
此外,配置文件中的认证方式也需要改变,首先要创建数据库文件,这会在通过使用dbmmanage命令第一次增加用户时创建 。
# dbmmanage /usr/local/etc/users adduser user1 pass123这个命令将创建/usr/local/etc/usersdbm数据库文件,并使用pass123为口令在数据库中增加用户user1 。然后就可以针对现有的数据库文件,增加、删除和查看用户信息了:
# dbmmanage /usr/local/etc/httpd/usersdbm delete user2# dbmmanage /usr/local/etc/httpd/usersdbm vIEw在拥有了数据库文件和用户数据之后,就可以使用这种认证方式了:

推荐阅读