第十章 使用Apache服务部署静态网站 第9天 8月4日

  • 使用apache部署静态网站
  • httpd是一种被动的服务。只有接收到请求后才会相应。
    • 通过http和https协议把请求的数据传输给用户
    • 而http和https是基于TCP的
  • IIS internet information service 是windows默认的web程序。
    • 只能在windows中使用。
  • Nginx,为俄罗斯知名站点开发
    • 轻量级,稳定性和丰富的功能。
  • Apache 其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展
    • 多操作系统支持:windows,Linux,Unix
  • 如何使用httpd服务
    • 首先挂在光盘镜像。使用yum仓库安装。
      • 如何配置yum仓库
    • httpd才是apache服务的软件包。
    • 安装httpd服务
      • yum install httpd
    • 将httpd服务加入到开机启动项中。使其能随系统开机运行。
      • systemctl start httpd 启动httpd服务
      • systemctl enable httpd 开机启动httpd
        • Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
        • 是增加一个链接进入开机启动项。
      • 打卡firefox。访问127.0.0.1。
  • 配置服务文件参数。linux一切皆文件,
    • 修改httpd的服务配置文件
    • 知晓这些配置文件的位置和用途。
      • 服务目录 /etc/httpd
      • 主配置文件 /etc/httpd/conf/httpd.conf
      • 网站数据目录 /var/www/html
      • 访问日志 /var/log/httpd/access_log 
      • 错误日志 /var/log/httpd/error_log
    • 主配置文件存在三种信息
      • 注释行信息
      • 全局配置
        • 一种全局性的配置参数,可作用于对所有的子站点,既保证了子站点的正常访问,也有效减少了频繁写入重复参数的工作量。
      • 区域配置
        • 针对每个独立的子站点进行单独设置
          • 类似<DIrectory> <DIrectory>这种标签围起来的参数。
      • 主配置文件常用参数
        • ServerRoot 服务目录
        • ServerAdmin 管理员邮箱
        • User 运行服务的用户
        • Group 运行服务的用户组
        • ServerName 网站服务器的域名
        • DocumentRoot 网站数据目录
        • Directory 网站数据目录的权限
        • Listen 监听的 IP地址与端口号 DirectoryIndex 默认的索引页页面
        • ErrorLog 错误日志文件
        • CustomLog 访问日志文件
        • Timeout 网页超时时间,默认为 300秒
  • 首先尝试替换掉网站数据存放位置所在的首页。可以成功替换
    • echo "Welcome To LinuxProbe.Com" >> /var/www/html/index.html
    • 由于首页目录存储在/var/www/html/indedx.html中,尝试输入可见的代码,刷新首页,即可显示
    • 修改首页目录的路径。以及定义目录全县的参数Directory的路径。
      • vim /etc/httpd/conf/httpd.conf
        • 修改 119行路径为 /home./wwwroot
        • 修改 124行路径为 /home/wwwroot
        • 重启httpd后发现新首页无法被载入,实际载入的是老首页
          • systemctl restart httpd
      • SELinux在阻止用户登录。
    • SELinux
      • Security-Enhanced Linux
        • 是一个强制访问控制的安全子系统。
  • MAC mandatory Access Control
    • 能够让各个服务进程受到约束,使其仅获得本应该获取的资源。
      • SELinux域限制能够确保服务程序做不了出格的事情,对服务程序的功能进行限制。
        • 作用在服务程序上。是否能否访问由这个服务程序对应在SELinux中的访问路径决定。
      • SELinux的安全上下文确保文件资源只能被其所属的服务程序进行访问。
        • 安全上下文控制的是文件和目录。也就是说,作为安全上下文生效的配置文件是作用在目录和文件上的,一个服务是否被允许访问这个文件由这个上下文配置文件check。
    • 具有三种配置模式
      • enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
      • permissive:遇到服务越权访问时,只发出警告而不强制拦截。
      • disabled:对于越权的行为不警告也不拦截。
    • 开启SELinux
      • vim /etc/selinux/config
      • 修改SELINUX=enforcing
      • 在系统内设置的SELinux状态实际上是系统重启后的状态。所以如果需要主配置文件生效需要重启。
    • getenforce获得当前SELinux的服务运行模式。
      • SELinux修改运行模式后不会立即启用,需要重起。
      • setenforce [0|1]命令修改 SELinux当前的运行模式( 0为禁用, ,1为启用)。注意,这种修改只是临时的,在系统重启后就会失效。
        • setsenforce 0
          • 在输入如上命令后, firefox能够成功访问到/home/wwwroot中的首页文件。
        • getenforce
    • 考虑一个服务无法在修改配置后被访问,从SELinux的角度来思考。
      • 从之前的例子来看,网站目录被存放到HOME目录,不符合SELinux的监管要求。
      • ls -Zd显示 SELinux的上下文关系。查看两个目录的安全上下文值是否不同
        • 由用户段,角色段,类型段等多个信息项共同组成。
        • 例如drwxrxr x. root root system _u:object_r: httpd_sys_content_t :s0 /var/www/html
          • 用户段 system _u 代表系统进程的身份。
          • 角色段 object_r 代表文件目录的角色。
          • 类型段 httpd_sys_content_t 代表网站服务的系统文件。
    • chcon change file SELinux security context 设置文件、目录策略。
      • Change the SELinux security context of each FILE to CONTEXT.
    • semanage命令用于管理SELinux的策略。
      • semanage is used to configure certain elements of SELinux policy with-out requiring modification to or recompilation from policy source.
      • 格式为 semanage [选项] [文件]
      • 设置文件、目录策略,并且管理网络端口,消息接口。
      • semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
      • semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/* 这两条命令的前后顺序好像不能颠倒,以后再探究。
        • 用来修改服务的上下文。
    • restorecon 修改的上下文不会立即生效,需要使用restorecon 命令
      • -Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文过程
      • restorecon -Rv /home/wwwroot
  • 如何在apache中开启个人主页?个人主页的作用是创建一个类似个人的Blog
    • 在 /etc/httpd/conf.d/userdir.conf中修改UserDir目录参数,使apache支持个人主页。
      • 注释掉UserDir disabled
      • 去掉注释UserDir public_html
    • 修改目录权限为755,使其他人也可访问。
      • mkdir public_html
      • echo "This is linuxprobe website" >> index.html
      • linuxprobe@linuxprobe ~]$ chmod -Rf 755 /home/linuxprobe 修改目录权限
    • 重新启动httpd服务程序,在浏览器的地址栏中输入网址。
    • 为什么SELinux仍旧不允许访问个人主页?
      • Linux域概念,确保服务程序不能执行违规的操作。
      • 使用getsebool命令查看并过滤出所有与http协议相关的安全策略。
        • getsebool -a | grep http
      • 使用setsebool命令修改参数。
        • setsebool -P httpd_enable_homedirs=on
          • -P参数代表立即且永久生效
    • 不希望用户可以直接显示,要求使用密码验证。
      • 使用htpasswd命令生成密码数据库。
        • htpasswd -c /etc/httpd/passwd linuxprobe
          • -c 表示第一次生成
          • 密码存放位置
          • 要接受验证的用户名
      • 编辑个人主页功能的配置文件
        • vim /etc/httpd/conf.d/userdir.conf
          • AllowOverride all
          • authuserfile "/etc/httpd/passwd"
          • authname "My privately website"
          • authtype basic
          • require user linuxprobe
        • 重启服务 systemctl restart httpd
  • 虚拟主机功能
    • 虚拟主机?就是一个服务器可以开通多个网站,运行在一个环境上。无法实现硬件资源隔离
    • apache如何实现虚拟主机?基于用户不同的IP地址,主机域名和端口号,实现提供多个网站同时为外部提供访问服务的技术。
      • 如图,使用nmtui 命令配置三个IP地址
        • 检查三个IP地址的连通性
        • 发现可能没有连同,需要在nmtui中激活链接
      • 往/home/wwwroot 中创建用于保存不同网站数据的三个目录。并向其中写入能代表三个网站不同的首页数据。
        • [root@linuxprobe ~]# mkdir -p /home/wwwroot/10
        • [root@linuxprobe ~]# mkdir -p /home/wwwroot/20
        • [root@linuxprobe ~]# mkdir -p /home/wwwroot/30
        • [root@linuxprobe ~]# echo "IP:192.168.10.10" >> /home/wwwroot/10/index.html
        • [root@linuxprobe ~]# echo "IP:192.168.10.20" >> /home/wwwroot/20/index.html
        • [root@linuxprobe ~]# echo "IP:192.168.10.30" >> /home/wwwroot/30/index.html
      • 修改httpd 的主配置文件 vim /etc/httpd/conf/httpd.conf
        • 加入如下内容,使用v 做进入可视模式,光标选择范围,y yank 提起)复制,p put )粘贴

          <VirtualHost 192.168.10.10>

          DocumentRoot /home/wwwroot/10

          ServerName www.linuxprobe.com

          <Directory /home/wwwroot/10>

          AllowOverride None

          Require all granted

          </Directory>

          </VirtualHost>

          <VirtualHost 192.168.10.20>

          DocumentRoot /home/wwwroot/20

          ServerName tech.linuxprobe.com

          <Directory /home/wwwroot/20>

          AllowOverride None

          Require all granted

          </Directory>

          </VirtualHost>

          <VirtualHost 192.168.10.30>

          DocumentRoot /home/wwwroot/30

          ServerName bbs.linuxprobe.com

          <Directory /home/wwwroot/30>

          AllowOverride None

          Require all granted

          </Directory>

          </VirtualHost>

      • 为啥我没设置安全上下文就生效了?
        • ls -Zd 发现安全上下文正常。
        • 额外情况 :此时仍然无法访问,需要重新设置安全上下文。
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*
          • [root@linuxprobe ~]# restorecon -Rv /home/wwwroot
    • 基于主机域名来分配。
      • 无法为每个网站分配独立的IP地址,可以尝试根据域名来自自动识别用户请求的域名,从而根据不同的名来传输不同的内容。
      • /etc/hosts是 Linux系统中用于强制把某个主机域名解析到指定 IP地址的配置文件。
        • /etc/hosts是什么?
          • [root@linuxprobe ~]# vim /etc/hosts
            • 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
            • ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
            • 192.168.10.10 www.linuxprobe.com bbs.linuxprobe.com tech.linuxprobe.com
          • [root@linuxprobe ~]# ping -c 4 www.linuxprobe.com
      • 在/home/wwwroot中创建保存不同网站数据的三个目录。
        • [root@linuxprobe ~]# mkdir -p /home/wwwroot/www
        • [root@linuxprobe ~]# mkdir -p /home/wwwroot/bbs
        • [root@linuxprobe ~]# mkdir -p /home/wwwroot/tech
        • [root@linuxprobe ~]# echo "WWW.linuxprobe.com" > /home/wwwroot/www/index.html
        • [root@linuxprobe ~]# echo "BBS.linuxprobe.com" > /home/wwwroot/bbs/index.html
        • [root@linuxprobe ~]# echo "TECH.linuxprobe.com" > /home/wwwroot/tech/index.html
      • 在vim /etc/httpd/conf/httpd.conf中追加写入三个给予主机名的虚拟主机网站参数。
        • 113 <VirtualHost 192.168.10.10>
        • 114 DocumentRoot "/home/wwwroot/www"
        • 115 ServerName "www.linuxprobe.com"
        • 116 <Directory "/home/wwwroot/www">
        • 117 AllowOverride None
        • 118 Require all granted
        • 119 </directory>
        • 120 </VirtualHost>
        • 121 <VirtualHost 192.168.10.10>
        • 122 DocumentRoot "/home/wwwroot/bbs"
        • 123 ServerName "bbs.linuxprobe.com"
        • 124 <Directory "/home/wwwroot/bbs">
        • 125 AllowOverride None
        • 126 Require all granted
        • 127 </Directory>
        • 128 </VirtualHost>
        • 129 <VirtualHost 192.168.10.10>
        • 130 DocumentRoot "/home/wwwroot/tech"
        • 131 ServerName "tech.linuxprobe.com"
        • 132 <Directory "/home/wwwroot/tech">
        • 133 AllowOverride None
        • 134 Require all granted
        • 135 </directory>
        • 136 </VirtualHost>
      • 设置安全上下文。
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech
        • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
        • [root@linuxprobe ~]# restorecon -Rv /home/wwwroot
    • 基于端口号的不同。
      • 用户通过指定端口号就可以访问服务器上的网站资源。
      • 此配置很复杂,要考虑Httpd和SELinux双重因素,并且考虑上下文和域。
        • 在目录创建保存不同网站数据的两个目录,并分别写入首页文件

          [root@linuxprobe ~]# mkdir -p /home/wwwroot/6111

          [root@linuxprobe ~]# mkdir -p /home/wwwroot/6222

          [root@linuxprobe ~]# echo "port:6111" > /home/wwwroot/6111/index.html

          [root@linuxprobe ~]# echo "port:6222" > /home/wwwroot/6222/index.html

        • 在配置文件修改基于端口的ip地址
          • vim /etc/httpd/conf/httpd.conf

            Listen 6111

            Listen 6222

        • 追加两个基于虚拟主机网站的参数,vim /etc/httpd/conf/httpd.conf

          <VirtualHost 192.168.10.10:6111>

          DocumentRoot "/home/wwwroot/6111"

          ServerName www.linuxprobe.com

          <Directory "/home/wwwroot/6111">

          AllowOverride None

          Require all granted

          </Directory>

          </VirtualHost>

          <VirtualHost 192.168.10.10:6222>

          DocumentRoot "/home/wwwroot/6222"

          ServerName bbs.linuxprobe.com

          <Directory "/home/wwwroot/6222">

          AllowOverride None

          Require all granted

          </Directory>

          </VirtualHost>

        • 修改安全上下文
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
          • [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
          • [root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
        • 报错无法访问,原因:域对端口的影响。
          • 使用semanage 命令查询所有与http 协议相关的端口
            • semanage port -l | grep http

              http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000

              pegasus_http_port_t tcp 5988

              pegasus_https_port_t tcp 5989

        • 列出selinux中域对其的影响并修改。
          • [root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111
          • [root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
          • [root@linuxprobe ~]# semanage port -l| grep http
  • Apache的访问控制
    • Apache 可以基于源主机名、源IP 地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow 指令允许某个主机访问服务器上的网站资源,通过Deny 指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order 指令,这个指令用来定义Allow或Deny 指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如"Order Allow, Deny"表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
    • 能够允许哪些浏览器访问
    • 能够允许哪些ip地址访问。

猜你喜欢

转载自www.cnblogs.com/Black-cat0987/p/12064626.html