- 使用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地址访问。
第十章 使用Apache服务部署静态网站 第9天 8月4日
猜你喜欢
转载自www.cnblogs.com/Black-cat0987/p/12064626.html
今日推荐
周排行