首页 > 代码库 > 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用户权限设置与认证