搭建网站
网站服务:让用户能够通过浏览器访问到的服务器上的文档资源。
对比Windows 和Linux部署服务方法对比
Windows:IIS
Linux :Apache ,nginx
Apache优势:1.老牌程序,市场所认可
2.安全、稳定、效率、功能模块化
3.红帽RHCE从5到7系统一直在考。
nginx的优势:1.使用较少的资源实现很高的并发性。(比如说吃的少,干活多)
下面我们再回忆一下配置yum仓库。
三个步骤
1.挂载系统光盘
2.配置yum仓库文件
3.yum install 软件包名称
这里我们要说一下,Apache的服务名称和软件名称叫httpd而不是Apache.
我们新建一个挂载目录,然后去将系统光盘挂载到挂载目录。
别忘了写入fstab文件。vim /etc/fstab
这里就不做解释了,前面有。
然后我们在/etc/yum.repos.d目录里面创建一个文件,名称随便。再解释一下这些参数的作用。
[ ]里面是yum仓库名称,name是名称。baseurl 是挂载目录。enabled是是否启用yum仓库,1启用,0不。gpgcheck是否校验我们yun仓库,我们选择不,这样可以加快速度。
接下来我们yum install httpd下载Apache安装包进行安装。
成功之后我们重启下服务,然后并且给他加入到启动项里面。
这时候我们打开自带的火狐浏览器然后输入本机IP可以看到这个界面。
当我们看到这个页面是说明有下面两个可能性
1.网站内没有数据
2.权限不足
网站目录:/var/www/html
网站首页文件:index.html
然后我们先进入/var/www/html目录,发现文件是空的。
然后我们将lao ji zhen shuai 这句话导入到index.html文件中。然后我们去刷新一下页面。
看到了吧
下面说一下步骤:
1.安装网站服务
2.网站目录内写入首页文件(index.html)
httpd在Linux系统中的配置文件
服务目录 | /etc/httpd |
主配置文件 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
修改httpd服务的配置文件
Linux系统中的一切都是文件
配置服务就是在修改服务的配置文件
一般情况下需要重启对应的服务才能够获取最新参数(修改完配置文件后新的参数)
顺手将服务加入到开机启动项
配置文件分为主配置文件和一般配置文件。
主配置文件:保存最重要的配置参数。
找主配置文件的小技巧:他一般在/etc/服务名称/服务名称.conf
一般配置文件:保存的是其他的配置参数。
这个就是我们httpd服务的主配置文件了
打开后我的天哪353行,但是仔细一看都是注释,别怕。
配置httpd服务程序时最常用的参数以及用途描述
ServerRoot | 服务目录 |
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒 |
我们对应修改一些参数
我们修改这两个参数,我们将里面的参数由/var/www/html修改为/home/wwwroot目录
重启服务报错,是因为我打错了,而且我也没创建那个文件夹,创建之后再重启就好了。别忘了加启动项。
然后我们进入我们创建修改的目录然后刷新一下网页。
会变成这样。
这里又要说一下,出现这样的情况可能说明
1.网站内没有数据
2.权限不足
你们可能忘了,刚才我们页面可是lao ji hen shuai
然后我们往index.html里面加东西。
这时候我们刷新页面发现,居然没变,那么这时候就是我们的权限不足,这里说的权限可不是我们的rwx,而是SELinux.
这里说一下SELinux,他是安全子系统,它是由美国安全局研发出来的,其中还有Linux社区也是。
SELinux安全子系统
让服务程序规规矩矩的只去获取自己应该获取的文件。
下面我们介绍一下这个系统。
他有两个保护机制
1.SELinux域 :管理服务的功能
2.SELinux安全上下文 :管理文件,让只有某个服务程序才可以获取。
我们刚才把/var/www/html换成了/home/wwwroot,那么在我们系统中home这个目录是干嘛用的,他应该保存的是我们用户家目录的一个信息。当你访问的话上下文给我们就做了限制。
然后我们看一下这个服务是否开启了,他有3个模式,然后我们编辑一下他的配置文件
enforcing:强制启用安全策略模式,将拦截服务的不合法请求。(强制开启)
permissive:遇到服务越权访问时,只发出警告而不强制拦截。(警告不限制)
disabled:对于越权的行为不警告也不拦截。(禁止SELinux)
我们用getenforce查看我们当前SELinux状态
setenforce 设置当前的SELinux状态 setenforce 0是临时关闭 setenforce 1临时开启
我们怀疑是不是她给我们捣乱让我们查看不了网页内容,执行一下临时关闭。再刷新一下
看来是了。
安全上下文的值这么查看ls -ldZ /var/www/html 我们查看一下var目录和home目录值有什么不一样
在文件上设置的SELinux安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的。其中,用户段system_u代表系统进程的身份,角色段object_r代表文件目录的角色,类型段httpd_sys_content_t代表网站服务的系统文件。
httpd_sys-content 这个是网站的系统文件的意思
home_root_t 是用户的家目录
所以说是这个SELinux上下文他导致我们不能获取到这个文件的。
针对当前这种情况,我们只需要使用semanage命令,将当前网站目录/home/wwwroot的SELinux安全上下文修改为跟原始网站目录的一样就可以了。
那我们怎么修改这个值呢。
我们用semanage fcontext 这个命令可以修改上下文。
semanage命令用于管理SELinux的策略,格式为“semanage [选项] [文件]
SELinux服务极大地提升了Linux系统的安全性,将用户权限牢牢地锁在笼子里。semanage命令不仅能够像传统chcon命令那样—设置文件、目录的策略,还可以管理网络端口、消息接口(这些新特性将在本章后文中涵盖)。使用semanage命令时,经常用到的几个参数及其功能如下所示:
-l参数用于查询;
-a参数用于添加;
-m参数用于修改;
-d参数用于删除。
例如,可以向新的网站数据目录中新添加一条SELinux安全上下文,让这个目录以及里面的所有文件能够被httpd服务程序所访问到:
但是我们执行完之后发现还是不行,记住我们现在是SELinux是打开状态
还需要使用restorecon命令将设置好的SELinux安全上下文立即生效。在使用restorecon命令时,可以加上-Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文的修改过程。最后,再次刷新页面,就可以正常看到网页内容了
restorecon 翻译是恢复的意思,但是在这里不太准确,我们这里应该是让新设置的SELinux的值立即生效的意思。
-R是对于我们的目录来进行操作,v是显示出来一个过程,然后home目录,wwwroot子目录。
真可谓是一波三折!原本认为只要把httpd服务程序配置妥当就可以大功告成,结果却反复受到了SELinux安全上下文的限制。所以,建议大家在配置httpd服务程序时,一定要细心、耐心。一旦成功配妥httpd服务程序之后,就会发现SELinux服务并没有那么难。
SELinux域:管理服务的功能、行为
SELinux安全上下文:管理具体的文件,让指定的服务才能获取。
个人用户主页功能
如果我们想要为系统中所有的用户都开通一个网站,这时候就需要用到我们的个人用户主页功能了
该功能可以让系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。
第1步:在httpd服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下面的配置文件,然后在第17行的UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能;同时再把第24行的UserDir public_html参数前面的井号(#)去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)。最后,在修改完毕后记得保存。
个人主页功能:/etc/httpd/conf.d/userdir.conf
public_html 个人用户存放自己网站数据的所在路径
我们可以看到大约第17行他这个意思是当前禁用了这个功能的,现在我们给他开启。我们后面需要写的是待会每个家目录个人用户里面需要去存放的这么一个路径
现在我们去切换成一个普通用户
首先切换到普通用户,然后我们在用户家目录里面里面创建一个public_html子目录,然后我们进入到这个子目录,创建出一个属于自己的首页文件,然后往里面写一句话,也就是echo "linux niubi" > index.html ,然后返回到我们的家目录给public_html755权限,为了其他用户也能访问到。然后我们返回我们的root用户重启httpd服务。
重新启动httpd服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格),从理论上来讲就可以看到用户的个人网站了。不出所料的是,系统显示报错页面,这一定还是SELinux的锅。
加上~加上我们的用户名称去访问一下,这个时候发现报错了。
然后我们用排除法给他临时关闭SELinux,这是我们发现还是不行。
然后我这里怀疑是不是这个用户权限不够,这里也可以给777权限的,但是个人感觉太大了,所以给一个755就够了。然后我们再试一下。
出来了,果然,所以说这个权限真的是很重要的东西,很多问题都在这个权限上卡主。
这个原因就是我们开始设置的权限是给的public_html这个子目录,而没有给/home/linuxpro这个家目录权限。所以导致这个用户权限不够访问,所以报错。
然后我们再开启一下SELinux.
发现又把我们限制了。
因为个人用户主页功能默认是没有开启的,这个不太安全,所以不是我们SELinux所允许的。
下面我们设置一下域里面的策略,他是有两个命令。
1.getsebool -a 显示所有策略的
2.setsebool 设置域里面的信息的
我们会发现太多太乱了,下面还有好多好多,截不下了。
这时候该怎么办呢,别忘了我们以前学习的知识,管道符
这是不是就一目了然了呢。所以说基础的东西四很重要的。学会灵活应用
上图 off为禁止状态,on为允许状态。
那么用到的SELinux域安全策略应该是httpd_enable_homedirs吧?大致确定后就可以用setsebool命令来修改SELinux策略中各条规则的布尔值了。大家一定要记得在setsebool命令后面加上-P参数,让修改后的SELinux策略规则永久生效且立即生效。随后刷新网页
-P是永久生效的意思。工作中一定记得加。
然后我们再查看一下,已经修改成功,为允许状态了。我们刷新试一下。
OK,成功了。
这里再强调一下对SELinux上下文的修改命令是semanage,对SELinux域的修改命令是setsebool -P
有时,网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访客看到里面的内容,这时就可以在网站中添加口令功能了。
第1步:先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。
接下来我们编辑配置文件
还是我们的子配置文件
我们自己重新编写一下,将他的去掉。
解释一下:allowoverridw all 是否允许我们这个网站拥有一个伪形态技术,格式要求。
authuserfile /etc/httpd/passwd 刚刚生成出来的密码验证文件保存路径 就是对我们刚才生成出来的那个加密文件调取。
authname " lalala" 当用户尝试访问个人用户网站时的提示信息 (提示信息)
authtype basic 验证的方式,我们给他写成基本的验证方式。
require user laoji 用户进行账户密码登录时需要验证的用户名称
然后我们刷新一下我们的页面
虚拟网站主机功能
如果每台运行Linux系统的服务器上只能运行一个网站,那么人气低、流量小的草根站长就要被迫承担着高昂的服务器租赁费用了,这显然也会造成硬件资源的浪费。在虚拟专用服务器(Virtual Private Server,VPS)与云计算技术诞生以前,IDC服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,于是纷纷启用了虚拟主机功能。
利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。出于各种考虑的因素(主要是价格低廉),目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站。
Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,如下图所示,用户请求的资源不同,最终获取到的网页内容也各不相同。如果大家之前没有做过网站,可能不太理解其中的原理,等一会儿搭建出实验环境并看到实验效果之后,您一定就会明白了。
下面我们做这个实验
恢复虚拟机状态,重新安装Apache,避免和上面实验冲突
配置Apache的主配置文件
对了,在做实验前我们先要给虚拟机配置3个IP地址分别为192.168.10.10 / 192.168.10.20 /192.168.10.30
顺便复习一下,我们这里用到的还是编辑配置文件吧。
这个路径大家应该很熟悉了。
注意我们3个IP地址名称不一样啊,别都写成IPADDR0.
重启下网卡,别忘了修改完配置文件就要重启他对应的服务这句话。
然后我们ping一下这个3个IP,ping不通的话自己找原因。
图形界面配置命令,这里就不讲了。
这里先创建出来/home/wwwroot子目录,然后进入wwwroot子目录下再创建3个目录分别叫10 20 30 (网站数据目录)
然后我们给各自的首页文件(index.html写上内容)
现在开始编辑配置文件
这个参数有点多,但是都一样的,写完一个复制修改一下就行。
下面解释一下个别参数的意思
虚拟主机的一个标识
documentroot /home/wwwroot/30 家目录 不确定的话pwd一下
servername www.laoji 是服务端的一个地址也就是网址这时候没用,我们写的原因是不给我们报错
allowoverride none 是否支持伪形态,我们选择关闭,我们当前是不需要的。
require all granted 允许所有的访问请求
我们给他结束掉,因为我们现在也像编程一样。
开启了一个相关目录的设置,我们现在给他结束掉。
配置好这些参数后我们重启一下服务然后刷新一下网站。
因为我们目录是home/wwwroot肯定被SELinux限制了。所以我们用之前的方法给他找一下先
把httpd_sys_content_t复制下来进行设置(修改SELinux上下文)
每个都要执行一遍,很麻烦,但是没办法。
最后别忘了执行一下restorecon -Rv /home/wwwroot 让他生效。
然后刷新一下
这个是基于地址来做的实验,那么接下来我们说一下基于网址
---------------------------------------------------------------------------------------------------------
就比如我们输入网址www.baidu.com www.taobao 显示的效果是不一样的。
先还原一下服务器然后重新安装服务
基于主机域名
当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的IP地址(这里以192.168.10.10为例)就可以了。由于当前还没有介绍如何配置DNS解析服务,因此需要手工定义IP地址与域名之间的对应关系。/etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件。简单来说,只要这个文件配置正确,即使网卡参数中没有DNS信息也依然能够将域名解析为某个IP地址。
第1步:手工定义IP地址与域名之间对应关系的配置文件,保存并退出后会立即生效。可以通过分别ping这些域名来验证域名是否已经成功解析为IP地址。/etc/hosts作为域名和IP地址的解析的文件。
然后我们保存退出,立刻ping一下,看到都能ping通。
为了能够练习一下上下文,我们继续作死一下。
继续创建网站目录
这里就不多说了
设置上下文的值
先查看
然后用semanage fcontext修改。
最后再让他生效一下,大功告成
---------------------------------------------------------------------------------------------------------------------
基于端口号
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此我们不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。一般来说,使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制。
在接下来的实验中,我们不但要考虑到目录上应用的SELinux安全上下文的限制,还需要考虑SELinux域对httpd服务程序的管控。
第1步:分别在/home/wwwroot中创建用于保存不同网站数据的两个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便我们稍后能更直观地检查效果。
写入首页文件东西
重启生效
编辑配置文件
我们在大概42行左右加入两个端口6111和6222
然后继续写上我们的配置参数,因为是基于端口号的,所以要写上端口号。
重启服务之后发现报错了,这里并不是我们写错了配置,二回端口号被限制了。(SELinux)
这个命令就显示我们所有服务允许的端口号是什么。
太多太多了,所以我们继续我们的管道符
它所允许的就这些,那我们给他做一下添加。
其中-a代表添加,-t代表添加服务名称,-p代表协议 这个是默认生效,不用重启。
看到里面有了
重启服务,添加启动项。打开看一下吧
------------------------------------------------------------------------------------------------------------------
Apache的访问控制
老规矩,还原服务器重新安装Apache
Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
首先我们编辑配置文件
我们说一下这个参数的配置。
setenvif 这个是3个单词的缩写,代表set environment if 的意思,代表的就是设置环境变量如果是。。。。的时候,即如果我们浏览器标识是什么的时候。User-Agent "Firefox" ff=1就是用户是火狐浏览器的时候,ff是火狐别名。
Order allow,deny 代表我们先来进行一个允许再来进行一个拒绝,
allow from env=ff 所有没允许的请求就全部拒绝,这个就是说所有不是火狐的就全部拒绝,ff就是代表火狐的意思,上面定义好的
然后我们在/var/www/html里面创建一个子目录server,就是刚才配置文件限制的目录。在首页文件写一些内容,重启服务然后打开浏览器查看。
显示拿火狐访问,没问题,能通,然后我们拿自己电脑的其他浏览器访问,比如我这里用谷歌。
一直打转,因为我们的防火墙原因,我们打一下iptables -F清楚浏览器限制。
我们发现就好了,然后关键部分来了。
我们用火狐查看目录,没问题,显示出来了。
当我们用谷歌的时候你会发现,被拒绝了。这就是通过用户浏览器标识来做限制。