首页 > 代码库 > Apache-2.2用户权限设置与认证

Apache-2.2用户权限设置与认证

背景介绍

有时我们使用Apache搭建出来的web站点仅给内部某些主机访问,或者访问时需要通过身份验证后才可以显示,如监控主机的web页面等,此时就需要控制访问者的权限和进行身份验证了,本章就以此来进行介绍

一、用户权限设置

在/etc/httpd/conf/httpd.conf配置文件中,DocumentRoot是指明web站点的根目录所在的路径(默认DocumentRoot "/var/www/html"),而其下的Directory容器中的部分<Directory "/var/www/html">则是对问目录用户权限的设置。如果我们要修改web站点的根目录位置,在httpd-2.2版本中,只需要修改DocumentRoot后的路径即可,不必给每一个web站点的根目录设置权限,而在httpd-2.4以后,每一个web站点的根目录都需要设置权限(即每一个DocumentRoot下面都需要有对应的<Directory "/path/to/">设置),此处就以DocumentRoot "/var/www/html"为例说明

使用yum -y install httpd 后,并在默认的DocumentRoot下面添加一些文件,在httpd的配置文/etc/httpd/conf/httpd.conf文件中,可以看到默认的用户权限为

<Directory "/var/www/html">

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

避免Apache默认欢迎首页的干扰,删除/etc/httpd/conf.d/welcome.conf,使用浏览器登录本机,可以看到此时会将/var/www/html/目录内的内容以列表的形式显示技术分享

此处需要解释下<Directory "/var/www/html">容器内的常用选项

1.options:定义资源展示方式,后跟空白字符分隔的参数,建议设置为None

(1)Indexes:当网页不存在时目录中的文件已索引方式显示

(2)FollowSymLinks:允许跟踪网站资源下的符号链接对应的原文件

(3)None:所有都不启用

(4)All:所有的都启用

(5)ExecCGI:允许使用mod_cgi模块执行CGI脚本

(6)Includes:允许使用mod_include模块实现服务器端包含(SSI)

(7)ncludesNOEXEC:允许包含但不允许执行脚本

(8)MultiViews:允许使用mod_negotiation实现内容协商

(9)SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件

将Options 后面的参数改为None后再次刷新浏览器,可以看到不在以索引显示了技术分享

2.AllowOverride:表示当前容器的认证授权如Order allow deny等是否被覆盖,None表示不覆盖,如果在www/htdocs目录下有一个/www/htdocs/fin子目录,在<Directory "/var/www/html/fin">中AllowOverride AuthConfig则表明该容器要实现认证配置技术分享

3.Order allow|deny:设置允许、拒绝对象次序,需要注意的是allow、deny有先后顺序,如果是Order Allow,Deny 则默认是拒绝;如果是Order Deny, Allow默认是允许,Allow from all 是允许所有人访问。允许、拒绝的对象可以是IP/NETMASK,也可以是FQDN

首先创建一个index.html主页,可以看到访问正常(主页必须命名为index.html

的原因是在/etc/httpd/conf/httpd.conf由配置文件中DirectoryIndex决定)技术分享

而后修改Director容器中的Order选项,拒绝我的本地计算机IP地址访问技术分享

此时再刷新页面则无法正常显示技术分享

二、路径别名

如果一个图片在浏览器显示的资源位置为:www.contoso.com/images/picture,按照常规路径,picture文件应该是在/var/www/html/images目录下,有时候我们也可以将images目录放在别的地方,使用别名的方式重定向,在主配置文件/etc/httpd/conf/httpd.conf中,使用Alias /images/ "/data/images/"设置重定向,需要注意的是如果fakename与realname结尾要么都带/,要么都不带技术分享

三、用户认证

用于认证的模块必须是存在于主配置文件并加载的模块,并使用mkdir -p创建/etc/httpd/conf/.htpasswd隐藏文件存放认证账户和密码技术分享

然后再到主配置文件的<Directory "/var/www/html/fin">容器中添加如下内容:

<Directory "/var/www/html/fin">

Options None

AllowOverride AuthConfig

AuthType basic #基于basic的明文认证方式,也可以是digest认证,认证信息存放于文件系统、数据库、Ldap中

AuthName "Private web" #安全区域的提示名称信息

AuthBasicProvider file #存放认证的方式,默认是系统文件格式,可以不写

AuthUserFile "/etc/httpd/conf/.htpasswd"   #基于用户密码认证文件存放位置,文件中存放的用户可以访问该站点

Require valid-user #所有存在于AuthUserFile中的用户都可以访问该站点,或者使用Require user $username  指定AuthUserFile中的那些用户可以访问,多个用户名空格隔开

</Directory>

此时再刷新页面,就会出现输入账号密码的弹窗技术分享


使用命令创建tom、jerry、andy用户,信息存放在.htpasswd文件中,重读配置文件

 htpasswd -c -m /etc/httpd/conf/.htpasswd tom

 htpasswd -c -m /etc/httpd/conf/.htpasswd jerry

 htpasswd -c -m /etc/httpd/conf/.htpasswd andy

-c :首次创建用户密码文件的时候需要指定-c,仅第一次需要,以后就不需要指定了

-d :使用CRYPT加密算法对用户密码文件加密

-m :强制指定使用md5加密算法对密码进行密码文件加密

-p :不加密用户密码文件

-s :强制使用SHA加密啊算法对用户密码文件进行加密

-D :删除指定用户

创建/var/www/html/fin目录,再在其中创建一个index.html文件,此时刷新浏览器

会看到在<Directory "/var/www/html/fin">容器中定义的AuthName在此处显示(谷歌浏览器不会显示)

技术分享

输入用htpasswd创建的账号和密码后,网页就正常打开了

技术分享

四、Http服务器常见响应报文代码含义

1XX:信息性状态码

100:Continue

2XX:成功状态码

200:OK

201:Created OK

3XX:重定向状态码

301:Moved Permanebtly 永久重定向,在响应报文中使用首部“Location:URL”指定资源现在所在的位置

302:Found 临时重定向,在响应报文中使用首部“Location:URL”指定临时资源位置

304:Not Modified,条件式请求中使用

4XX:客户端的错误

403:Forbidden,请求被服务器拒绝

404:Not Found,服务器无法找到请求的URL

405:Method Not Allowed,不允许使用此方法请求响应的URL

5XX:服务器类的错误

500:Internal Server Error,服务器内部错误

502:Bad Gateway:代理服务器从上游收到一条伪响应

503:Service Unavailable,服务器此时无法提供服务,但将来可能可用





本文出自 “兔样兔森破” 博客,请务必保留此出处http://arkling.blog.51cto.com/2844506/1864759

Apache-2.2用户权限设置与认证