扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
更严格、有效的控制方法还是基于用户和对应的口令对浏览客户进行控制。这使得对这个目录进行强制性的保护,浏览器用户必须输入合法的用户名和正确的口令才能浏览网页。如果要针对用户对访问服务器的客户进行控制,首先就要设置访问控制文件为对用户进行认证,因此要允许目录访问控制文件中具备 AuthConfig的设置。
设置用户认证需要为这个目录指定AuthName、AuthType和AuthUserFile 指令,AuthUserFile定义一个口令文件,那么此后就可以使用require valid-user命令让客户输入名字和正确的口令,根据这个口令文件对用户的身份进行验证。AuthName定义这个认证的标识,用于返回给浏览器用户,起到提示作用。AuthType定义使用的认证加密类型,通常使用 Basic,即使用Unix的标准加密算法进行加密。
AuthUserFile /usr/local/etc/htpasswdAuthName SecurityAuthAuthType Basicrequire vaild-user
这个例子里,使用/usr/local/etc/htpasswd作口令文件,使用Basic的加密认证方法,并定义AuthName为SecurityAuth。
虽然浏览器访问每个使用这种认证方式保护的网页都需要先进行认证,然而不会每访问一次网页都让用户输入用户名和口令,因为浏览器会将用户输入的用户和口令数据保存起来,每次需要认证的时候就自动进行认证操作。由于认证是通过H EAD请求来完成的,因此它不会影响浏览器显示的网页。然而,用户有可能使用浏览器访问了多个不同的对用户进行认证的网页,那么浏览器就会保存了多个不同的用户和口令对,当自动进行认证的时候,浏览器必须区分出应该使用哪个用户名和口令进行认证,而区分就是通过AuthName的值进行的,服务器将首先将 AuthName的值传递给客户浏览器,此后浏览器就能发送正确的用户和口令进行认证了。
要使用口令文件来认证合法用户,首先就必须生成这个口令文件。当认证类型为Basic时,口令文件与Unix 的passwd文件非常类似,甚至可以直接使用系统passwd文件来作认证文件,当然由于现代Unix使用了sha dow技术,/etc/passwd中并没有保存真实的加密口令,因此直接使用系统passwd文件进行认证只能适合那些没有使用shadow技术的 Unix系统。而使用shadow技术的Unix系统的真实口令文件(FreeBSD 下为master.passwd)被保护起来,读取它需要root权限,而Web服务器通常以普通用户的权限运行,不能直接使用系统口令对用户进行认证。如果强制使用root权限启动httpd守护进程来访问shadow之后的口令,那么必然会带来严重的安全漏洞。
因此一般使用与系统口令相分离的口令文件来认证Web服务器用户,这样即使口令被泄露,并被破译,造成的安全影响也很小,不至于影响系统的正常运行。可以使用Apache附带的htpasswd命令来创建口令文件,并设置用户及其口令。
$ htpasswd -c .htpasswd user1Adding Password for user1New password:Re-type new password:
htpasswd的-c选项告诉htpasswd创建一个新口令文件为.htpasswd,如果没有这个选项,htpasswd就将用户及其口令加入已经存在的口令文件中。此后的参数就是口令文件名和需要增加或改变口令的用户名。
为了便于管理,可以进一步将这些用户分组,组文件的每一行定义了一个组及其成员的名字,然后在.htaccess 中使用AuthGroupFile指定这个目录使用的组文件的名字,例如:
group1: user1 user2 user3 user4
这条内容创建了一个口令组group1,包括user1,user2,user3,user4成员。
除了可以使用require valid-user要求输入的用户必须为口令文件中的合法用户之外,也可以设置要求只有特定的合法用户才能访问的目录,这就需要使用require user或require group指令。例如使用require user user1要求只有user1用户才能访问,使用require group g roup1就要求必须是group1组的合法成员才能访问。针对具体用户和组的访问控制就进一步增加了访问控制的灵活性。
当基于用户的认证和基于地址的认证综合使用时,可以通过使用satify参数指定不同的限制条件,如果设置 satify all,那么必须同时通过用户和地址认证才能访问网页,而设置satify any,只需要通过一个认证客户就能访问这个目录了。缺省情况下Satify参数的值为all。下面为一个综合了地址认证和用户认证的.htaccess 的例子,这个例子允许private.site的计算机可以不需认证访问这台服务器,而其他位置的用户必须是 group1组中的合法用户,或者是user1、user2、user3用户,才能访问这台服务器。
AuthUserFile /usr/local/etc/.htpasswdAuthGroupFile /usr/local/etc/.htgroupAuthName SecurityAuthAuthType Basic<Limit HEAD GET POST>order deny,allowdeny from allallow from private.siterequire group group1require user user1 user2 user3</Limit>satify any
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者