RHEL7--第十章-Apache

使用 Apache 服务部署静态网站

命令字体编号:009900

备注:所有的服务在设置完后,需把服务设置成开机自启: # systemctl  enable  服务名称,切记!!

  • 网站服务程序

概述:

web网络服务是指允许用户通过浏览器访问到互联网中各种资源的服务;

web网络服务是一种被动访问的服务程序,即只有接受到互联网中主机发出的请求才相应;

web服务器是通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求内容传送给用户;

提供web网络服务的程序:

IIS,Nginx,Apache等

IIS  

是windows中默认的web服务程序,还提供FTP,NMTP,SMTP等服务;

Nginx

轻量级网站服务软件,稳定性及丰富的功能,系统资源消耗低且并发能力强;

Apache

RHEL 5,6,7中系统默认的web服务程序;

跨平台和安全性被广泛认可且拥有快速,可靠,简单的API扩展;

支持的系统:Linux,UNIX甚至 windows系统都支持

支持基于IP,域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块,安全socket层(SSL),能实时监视服务状态与定制日志消息;

1:安装Apache:

安装apache服务;

# yum install -y httpd

启用 httpd服务,并设置为开机自启;

# systemctl  start  httpd

# systemctl  enable  httpd

2:配置服务文件参数:

httpd服务程序的主要配置文件及存放位置如下:

服务目录:  /etc/httpd

主配置文件: /etc/httpd/conf/httpd.conf,下文有举例

网站数据目录:/var/www/html

访问日志:  /var/log/httpd/access_log

错误日志:  /var/log/httpd/error_log

个人用户主页功能:  /etc/httpd/conf.d/userdir.conf,下文有举例;

1)主配置文件

存在三种类型的信息:注释行信息,全局配置,区域配置;

配置 httpd服务时常用的参数:

ServerRoot   服务目录;

ServerAdmin  管理员邮箱;

User       进行服务的用户;

Group      进行服务的用户组;

ServerName   网站服务器的域名;

DocumentRoot  第119行,定义网站数据的保存目录;下文有举例

Listen      监听的IP地址与端口号;

DirectoryIndex  默认的索引页页面;

Directory    第124行,定义目录权限;下文有举例

ErrorLog    错误日志文件;

CustomLog    访问日志文件;

Timeout     网页超时时间,默认为300秒;

备注:以下参数是 开启个人主页功能的,配置文件路径:/etc/httpd/conf.d/userdir.conf

UserDir      网站数据在用户家目录中的保存目录名称,下文有举例;

2)网站默认值:

默认网站数据目录:/var/www/html

默认的网页首页名称:index.html

修改默认首页信息:

# echo “hello,boy” > /var/www/html/index.html

打开浏览器首页显示:http://127.0.0.1

hello,boy

例1:

修改网站数据的保存路径,参数为 DocumentRoot;

A:建立网站数据的保存目录,并创建首页文件;

# mkdir  /home/wwwroot

# echo "hello boy" > /home/wwwroot/index.html

B:编辑httpd主配置文件,将第119行定义网站数据保存路径的参数 DocumentRoot修改为 /home/wwwroot;将124行定于目录权限的参数 Directory 后面的路径改为 /homt/wwwroot,完成;

# vim /etc/httpd/conf/httpd.conf

# systemctl  restart  httpd

C:测试,登录http://127.0.0.1

备注:

测试失败,原因在于 SELinux 安全子系统!

解决方法3种:

1:修改 SELinux的模式为 disable 或 permissive,重启服务器;

2:临时关闭 SELinux的 enforcing模式,重启后恢复默认值;

3:使用semanage修改新保存目录的SELinux上下文的值;

 

3:SELinux 安全子系统

  • 美国安全局在开源社区帮助下开发的强制访问控制的安全子系统;
  • 使用SELinux的目的在于让各个服务进程都受到约束,获取本应获取的资源;
  • SELinux能够对服务程序的功能进行限制,对文件资源的访问限制,SELinux安全上下文确保文件资源只被其所属的服务程序进行访问;
  • SELinux域 和 SELinux安全上下文 是linux系统的双保险;

SELinux服务的三种配置模式:

enforcing:强制启用安全策略模式,将拦截服务的不合法请求;

permissive:遇到服务越权访问时,只发出警告而不强制拦截;

disabled:对于越权的行为不警告也不拦截;

SELinux域和SELinux安全上下文

SELinux域针对:服务

SELinux安全上下文针对:文件

SELinux的安全上下文:

安全上下文是一个访问控制属性,在selinux中,类型标识符是安全上下文中决定访问的主要的部分;

在selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素控制其访问,所有文件和端口资源和进程都具备安全标签:安全上下文(security context);

安全上下文由5个元素组成:

user : role : type : sensitivity : category

user:指登录系统的用户类型,如root,system_u等;

role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r;

type:指定数据类型

sensitivity:限制访问的需要;分0-15级,s0最低,target策略默认为s0;

查看文件的安全上下文详细信息:

# ls  -Zd  /etc

SELinux服务的相关命令:

1:修改SELinux三种模式;

# vi  /ect/selinux/config

 

2:获取当前 SELinux的运行模式信息;

# getenforce

enforcing

3:临时启用或关闭 enforcing模式;

# setenforce [0|1]

Permissive

0为禁用个,1为启用;

备注:

上面 例1 测试的失败,由于修改了网站数据保存路径,导致违反了SELinux的监管原则;默认保存路径与新的保存路径的 SELinux安全上下文值不同;

查看两个路径 SELinux安全上下文值:

# ls  -Zd  /var/www/html

# ls  -Zd  /home/wwwroot

4:semanage

用于管理SELinux的策略,修改文件或目录的安全上下文,格式:semanage [选项] [文件];

参数:

-l:   用于查询;

-a:  用于添加;

-m:   用于修改;

-d:  用于删除;

备注:如果没有找到 semanage命令;

1:# yum provides  /usr/sbin/semanage  查找命令所依赖的安装包;

2:# yum install -y  policycoreutils-python  安装 semanage的安装包,小版本号不需要写;

5:restorencon

使使用 semanage执行过的安全上下文立即生效;

参数:

-R:对指定的目录进行递归操作;

-v:显示安全上下文的修改过程;

例1:

向新的网站数据目录中添加一条SELinux安全上下文,让这个目录以及里面的所有文件能被 httpd服务程序访问到;

# semanage  fcontext -a -t httpd_sys_content_t  /home/wwwroot

/home/wwwroot,最后root后面不能加根号,否则selinux修改不生效;

# semanage  fcontext -a -t httpd_sys_content_t  /home/wwwroot/*

以上命令运行后,还未生效,需要执行 restorencon命令;

# restorecon  -Rv  /home/wwwroot/

 

4:个人用户主页功能

httpd服务程序提供个人用户主页功能,让系统内所有的用户在自己的家目录中管理个人的网站;

例1:基本个人用户主页配置步骤

1:开启主页功能,默认是没有开启个人用户主页功能;

配置文件路径;

# vi  /etc/httpd/conf.d/userdir.conf

把 17行的 UserDir disabled,注释掉,即添加 #,表示httpd开启个人用户主页功能;

把 24行的 UserDir public_html 的注释符#,去掉;public_html 是用户家目录中的网站数据的保存目录;

2:在 用户 centos家目录中建立网站数据保存目录 public_html;及首页面文件 index.html;并修改目录权限,保证其他人也能访问;

切换用户 centos

# su  -  centos

创建个人网站数据保存目录 public_html;

# mkdir  /home/centos/public_html

创建首页文件及输入内容 test-page;

# echo "test-page"  >  public_html/index.html

递归修改家目录 centos的权限;

# chmod -Rf  755  /home/centos

3:重启 httpd服务,浏览器地址输入格式:网址/~用户名,没有空格;

# systemctl  restart  httpd

127.0.0.1/~centos

test-page

4:如果现实报错页面,查看是否是 SELinux 的问题哦;

查看并过滤与HTTP协议相关的安全策略,off 为禁止状态;

#getsebool  -a  | grep http

5:修改SELinux域安全策略规则;

# setsebool  -P  httpd_enable_homedirs=on

 

例2:只有身份验证的用户才能访问网址内容,添加网址口令功能;

1:htpasswd 作用是 生成密码数据库;

格式:htpasswd [参数] [文件] [用户名];

# htpasswd -c /etc/httpd/passwd  centos

输入网页验证密码;

解析:

-c:  表示第一次生成;

/etc/httpd/passwd:密码数据库的存放文件;

centos:需要验证的用户名称(该用户不必是系统已有的本地账户);

2:编辑个人用户主页功能配置文件;添加32-36行内容

# vi  /etc/httpd/conf.d/userdir.conf

 解析:

Allowoverride all:隐藏所有内容;

authuserfile "/etc/httpd/passwd":密码数据库的保存文件;

authname:用户登录个人网页是的提示信息;

Require user centos:登录时需要验证的用户名;

3:重启 httpd服务,即可实现效果;

# systemctl  restart  httpd

 

5:虚拟网站主机功能

功能好处:把一台处于运行状态的物理服务器分割成多个"虚拟的服务器"。

不足:无法实现所有硬件资源的分割,只能限制硬盘的使用空间大小;

Apache的虚拟主机功能:

是基于用户请求的不同IP地址,主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术;

1)基于IP地址

测试条件:一台服务器一个网口配置多个IP地址,每个IP地址对应服务器上部署的每个网站,访问不同IP时,会访问对应的网站。每个网站一个独立的IP,对搜索引擎优化有好处;

例:

A:在单个网口上配置三个IP地址;

使用 nmtui 界面配置;或者 vim

# vi /etc/sysconfig/network-scritp/ifcfg-eno16777736

配置网卡时,注意数字,如:IPADDR2,NETMASK2

B:在 /home/wwwroot目录中分别建立保存3个IP不同网站数据的目录,并写入对应的首页文件和输入首页内容;

# mkdir  -p /home/wwwroot/10

# mkdir  -p /home/wwwroot/20

# mkdir  -p /home/wwwroot/30

# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html

# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html

# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html

C:在httpd主配置文件中,113行开始,分别写入3个基于IP地址的虚拟主机网站参数,重启httpd服务;

# vi /etc/httpd/conf/httpd.conf

D:由于SELinux的安全上下文的关系,需要对目录及文件进行设置;

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

/home/wwwroot,最后root后面不能加根号,否则selinux修改不生效;

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*

20,30,做同样的操作;

使配置的SELinux安全上下文生效;

# restorecon -Rv /home/wwwroot

E:测试结果,输入不用IP,出现对应的网站;

2)基于主机域名

当服务器没有足够的独立IP地址分配给每个网站时,让Apache自动识别用户请求的域名,根据不同域名请求来传输不同的内容;

只需保证服务器上有一个可用IP地址即可;

当不配置 DNS解析服务器时,需要手动定义IP地址与域名之间的关系,配置文件路径:/etc/hosts

例:

A:手动定义解析 IP与域名之间的对应关系,保存退出后立即生效;

# vi  /etc/hosts

192.168.10.10 同时对应3个域名;

B:分别建立/home/wwwroot下保存3个不同网站数据的目录,并写入首页内容;

C:在 httpd主配置文件中 113行开始,分别追加三个基于主机名的虚拟主机网站参数;

重启 httpd服务:

# syttemctl  restart  httpd

D:由于SELinux的安全上下文的关系,需要对目录及文件进行设置;

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/a

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/a/*

b,c 跟上面的 a 同于命令执行;

使配置的SELinux安全上下文生效;

# restorecon -Rv /home/wwwroot

E:测试结果,输入域名看结果;

3)基于端口

通过指定的端口号来访问服务器上的不同资源;

基于端口号的配置方式最复杂,需要考虑httpd服务的配置因素,还需考虑selinux服务对开设新端口的监控;selinux一般认为合理的端口:80,443,8080;

例:

A:分别建立/home/wwwroot下保存2个不同网站数据的目录,并写入首页内容;

B:在httpd的主配置文件中,第43,44行分别添加用于监听6111,6222端口的参数;

# vi /etc/httpd/conf/httpd.conf

 

 

C:重启 httpd服务,报错;由于selinux问题;

SELinux服务检测到6111和6222端口原本不属于Apache服务应该需要的资源,但现在却以httpd服务程序的名义监听使用了,所以SELinux会拒绝使用Apache服务使用这两个端口;

使用 semanage 命令查询并过滤出所有与http相关且SElinux服务允许的端口;

# semanage  port -l | grep http

以上命令发现6111 6222 默认不被包含,手动添加进列表,并立即永久生效;

# semanage prot -a -t http_port_t -p tcp 6111

# semanage prot -a -t http_port_t -p tcp 6222

再次查看SELinux默认监听端口列表;

# semanage  port -l | grep http

# systemctl  restart  httpd

 

D:由于SELinux的安全上下文的关系,需要对目录及文件进行设置;

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*

6222同上面操作执行;

使配置的SELinux安全上下文生效;

# restorecon -Rv /home/wwwroot

E:测试结果,IP地址后面跟端口号;

 

6:Apache的访问控制

Apache可以基于源主机名,源IP地址和源主机上的浏览器特征等信息对网站上的资源进行访问控制;

通过Allow,Deny指令允许或禁止某个主机访问服务器的网站资源;

Order指令用来定义Allow或Deny指定起作用的顺序的,匹配原则按照顺序与允许匹配,成功允许请求,反之拒绝请求;

例1:匹配浏览器进行访问控制;

A:先在服务器默认的网站数据目录中新建一个子目录,并建立首页文件内容;

# mkdir /var/www/html/server

# echo "xxxxxxxx" > /var/www/html/server/index.html

B:编辑 httpd主配置文件,在 129行添加访问规则;规则含义:只允许使用firefox浏览器的主机访问服务器上的首页文件,其他请求都拒绝;

# vi /etc/httpd/conf/httpd.conf

例2:匹配源主机的IP地址来进行访问控制;

A:与例1中的步骤 A相同;

B:编辑 httpd主配置文件,129行添加只允许指定的IP地址访问网站资源;

# vi /etc/httpd/conf/httpd.conf

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2019-04-02 00:25  风中的疯子  阅读(454)  评论(0)    收藏  举报

导航