授权服务器怎么启用

授权服务器怎么启用,第1张

ApacheHttpd服务器之认证与授权

大概有一个月没有继续写关于技术的文章了。在这一个月的时间里,除了过年休息两天,我一直在开发自己的个人网站,这是一个可以帮助PHPer和他从事运维的兄弟们方便搭建LAMP配置环境的功能性网站。后面我会详细介绍。从今天开始,我会继续写一些关于Httpd服务器的配置文章。在本文中,我们主要讨论Httpd服务器的认证和授权。

认证,我的理解是用户通过一个证书进入服务器的过程,授权是用户是否有权访问服务器中的一个资源。认证负责整体,授权负责部分。

Httpd提供浏览器认证功能,即用户在浏览器中输入自己想要进入的网站后,浏览器会d出一个认证框,要求用户输入用户名和密码。当用户输入正确的用户名和密码后,就可以进入网站获取资源。该功能可以从应用逻辑中分离出来实现认证功能,无需应用层编写专门的认证程序。如果懒得写专门的认证码,想实现认证功能,可以用这个函数偷个懒==

Httpd提供的授权功能可以在认证的基础上继续保护服务器资源,它可以根据IP、子网、指定用户或环境变量判断用户是否拥有对某个目录的读取权限。当然,授权和认证没有必然联系。即使没有身份验证,也可以单独设置授权。让我们来看看Httpd的认证和授权是如何配置的。

首先说一下认证。Httpd的认证有两种:明文认证和摘要认证。明文认证是将用户名和密码明文发送给服务器,服务器收到后会在认证文件或数据库中进行比对,从而判断是否成功。因为是明文发送,所以在非SSL链接的情况下存在一定的风险。摘要认证是对用户输入的密码进行哈希处理后发送给服务器,在一定程度上提高了用户密码的安全性。但是抽象认证并不是每个浏览器都支持的,所以在使用抽象算法时需要在多个浏览器中进行测试。

Httpd为特定的认证过程提供文本和数据库。也就是说,我们可以将合法的用户名和密码存储在文本文件或数据库中。这里我们分别介绍这些证书的配置方法。

方案1:明文认证+文本认证

首先,我们需要创建我们的“密码本”,它是由htpasswd脚本创建的。它与httpd命令一起位于Httpd安装目录/bin目录中。创建者。/htpasswd-c“密码本路径”和“用户名”方法。如果我想将密码本创建为/usr/local/httpd/users/auth_basic,并将用户名设置为王维,那么命令格式如下:。/htpasswd-c/usr/local/httpd/users/u_basic王伟。此时,会d出一个命令提示符,要求您输入密码。只需设置你想要的密码。

如果我们想在服务器文档的根目录中设置身份验证,我们将按如下方式进行配置:


loadmoduleunixd_modulemodules/mod_unixd.so
loadmodulealias_modules/mod_alias.so
loadmodulemime_modulemodules/mod_mime.so
loadmodulecgid_modulemodules/mod_cgid.so
loadmoduleauthz_core_modulemodules/mod_authz_core.so
loadmoduleauthn_core_modulemodules/mod_authn_core.so
loadmodule

#mod_unixd.somod_mime.so是Httpd的核心模块,必须加载。认证模块以mod_authz和mod_authn为前缀。

#使用文本认证,我们只需要做一般的编译工作,但是如果使用数据库认证,

#你需要重新编译apr-util,它会生成一个名为apr_DBD_MySQL.so.
Listen80
ServerNamelocalhost
documentroot"/usr/local/httpd/htdocs"
<;目录“/usr/local/httpd/htdocs”>;#要在文档的根目录中设置身份验证,请在根目录容器中设置身份验证
AuthNameauth#身份验证名称,可以是任何英文字符,名称
AuthTypeBasic#将身份验证类型设置为基本身份验证
AuthBasicProviderfile#设置为文本身份验证
将显示在浏览器中d出的身份验证框中。userfile/usr/local/httpd/users/u_basic#密码簿的位置
要求有效-user#指定只有正确的用户才能进入该目录


我的服务器地址是192.168.1.11。配置完成后,在浏览器中输入http://192.168.1.11/index.html后会d出认证框:

这不是很简单吗?输入刚刚设置的用户名和密码,就进入页面了。


方案二:明文认证+SDBM认证

SDBM是Linux提供的一个文件数据库。如果不想安装MySQL,需要更多用户部署。那么使用SDBM是一个不错的选择。SDBM的密码本不能由htpasswd脚本生成,Httpd还提供了名为htdbm的密码本生成器。您可以在htpasswd兄弟目录中找到它。使用。/htdbm-c"密码本路径"和"用户名"方法创建。如果我想将密码本创建为/usr/local/httpd/users/auth_sdbm,并将用户名设置为王维,那么命令格式如下:。/htdBM-c/usr/local/httpd/users/auth_sdbm王伟。此时,会d出一个命令提示符,要求您输入密码。只需设置你想要的密码。

如果想达到方案1的目的,使用SDBM认证,只需要改变目录容器下的配置即可:

<目录“/usr/local/httpd/htdocs”>;
authnameauth
authtypebasic
authbasic提供程序dbm#使用dbm进行身份验证
authdbmuserfile/usr/local/httpd/users/auth_sdbm#密码簿位置
要求有效的用户
。/Directory>;


还是那句话,如果要使用数据库认证,必须通过apr编译apr_DBD_mysql.so动态链接库,放在linux可以自动搜索的lib目录下。


方案三:明文认证+MySQL认证

要使用MySQL身份验证,您必须首先安装MySQL服务器。那么如何设置MySQL的“密码本”呢?那就是建立数据库和表格。以下是基本步骤。首先,创建一个名为auth的数据库,并在auth数据库中设置一个名为users的表。users中有三个字段,一个id是自增号,另一个user列用来存储用户名。密码栏用于存储密码。然后将您想要设置的用户名和密码存储在表中。密码必须通过crypt函数加密,可以通过htpasswd脚本获取。例如,通过/usr/local/httpd/bin/htpasswd-c/usr/local/httpd/users/auth_mysqlwangwei创建一个用户名为王维的密码本。输入密码123456后,生成一个名为auth_mysql的文件。查看auth_mysql后发现里面有一条记录为王维:$apr1$FX0wpmp$Zr4ot39ef0qk1tdovmnjr0。然后王伟:加密的密码在后面,字符串可以存放在密码栏。


Httpd配置文件中的配置如下:


#首先加载方案1中的LoadModule指令。

DBDrivermysql#DB驱动是mysql
DBDparams"host=192.168.1.11port=3306dbname=authuser=rootpass=123456"#连接字符串,了解MySQL的人应该都知道
DBdmin1
DBDkeep2
dbdmax10
dbdextime60
listen80
servernamelocalhost目录“/usr/local/httpd/htdocs”>;
authnameauth
authtypebasic
authbasic提供程序dbd设置使用DBD身份验证
authdbduserpwquery"select`passwordfromuserswhere`user`=%s"#设置查询SQL
requirevalid-user
/Directory>;



方案4:抽象认证+文本认证

抽象认证的配置和基本认证几乎一样,只有两个区别:一是抽象认证需要htdigest创建密码本,二是抽象认证需要认证域。Htdigest脚本与htpasswd脚本位于同一目录级别。创建方法如下:。/htdigest-c"密码本路径""域名""用户名"。比如。/htdigest-c/usr/local/httpd/users/auth_digestauthwangwei。域名必须与配置中AuthName指令设置的一致。并且认证域是URI。根据方案1的目的,我们将其设置为/。

配置方法如下:

<目录“/usr/local/httpd/htdocs”>;
authnameauth
authtypedigest#被设置为摘要式身份验证
authdigestproviderfile
authdigestdomain/#摘要式身份验证域是/
authuserfile/usr/local/httpd/users/auth_digest
/Directory>;


Httpd的授权

除了使用用户名和密码进行浏览器认证,我们还可以通过IP和子网进一步限制用户的访问。这需要Httpd的授权。为了说明用户,我们设计了以下场景。

1.对用户进行IP限制,允许192.168.1.0网段的用户访问,但不允许192.168.1.254网段的用户访问。该方案如下:


loadmoduleunixd_modulemodules/Mod_unixd.so
loadmodulealias_modules/Mod_alias.so
loadmodulemime_modules/Mod_mime.so
loadmodulecgid_modulesmodules/Mod_cgid.so
loadmoduleauthz_core_modulemodules/Mod_authz_core.so
loadmoduleauthz_host_modulemodules/Mod_authz_host.so/目录“/usr/local/httpd/htdocs”>;
允许从192.168.1.0
拒绝从192.168.1.254
顺序允许,拒绝#要验证顺序,首先允许,然后拒绝。
<;/Directory>;


场景2,基于身份验证的授权需要浏览器验证和IP限制。该方案如下:


<目录“/usr/local/httpd/htdocs”>;

192.168.1.0中的允许
192.168.1.254中的拒绝
订单允许,拒绝
AuthNameauth
AuthTypeDigest
AuthDigestProviderfile
AuthDigestDomain/
AuthUserFile/usr/local/httpd/users/auth_Digest
要求有效的用户

满足所有#认证和授权必须满足这两个条件才能通过

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/783671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存