学习Linux课程第十二天

已经无力吐槽了,先回顾一下所学知识

一、Apache服务部署静态网站

1、安装httpd服务

主要是配置yum仓库  vim  /etc/yum.repos.d/rhel.repo

[rhel]

name=rhel

baseurl=file:///media/cdrom

enable=1

gpgcheck=0

安装服务 yum install httpd

2、配置服务文件参数

主配置文件路径 : /etc/sshd/conf/sshd.conf

3、配置完后进行重启服务并且加入开机启动项

systemctl  restart  httpd

systemctl  enable httpd

二、SELinux 安全子系统

SELinux服务有三种配置模式,具体如下。

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

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

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

命令:  查看模式:getenforce

             设置模式:setenforce 0  关闭    setenforce 1 开启

三、SELinux安全上下文

查看数据目录上安全下文值  ls -Zd  目录

1、semanage命令

用于管理SELinux的策略   格式为“semanage [选项] [文件]”

-l参数用于查询;-a参数用于添加;-m参数用于修改;-d参数用于删除。

添加一条安全上下文  semanage  -a -t httpd_sys_content_t  目录(目录路径,目录后面不加/)

                                   semanage -a -t httpd_sys_content_t    目录/*

使安全上下文生效    restorecon  -Rv 目录/

四、个人主页功能

1、开启个人主页

第1步:在httpd服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下面的配置文件,然后在第17行的UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能;同时再把第24行的UserDir public_html参数前面的井号(#)去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)。最后,在修改完毕后记得保存。

vim /etc/httpd/conf.d/userdir.conf

第2步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。

[root@doopli home]# su - doopli
Last login: Fri May 22 13:17:37 CST 2017 on :0
[doopli@doopli ~]$ mkdir public_html
[doopli@doopli ~]$ echo "This is doopli's website" > public_html/index.html
[doopli@doopli ~]$ chmod -Rf 755 /home/doopli

第3步:重新启动httpd服务程序

第4步:开启个人用户上的httpd服务,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”

查看该服务是否开启   getsebool -a | grep http

开启服务  setsebool -P httpd_enable_homedirs=on

2、添加用户身份验证

第1步:先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。

htpasswd -c /etc/httpd/passwd doopli

第2步:编辑个人用户主页功能的配置文件。把第31~35行的参数信息修改成下列内容,其中井号(#)开头的内容为刘遄老师添加的注释信息,可将其忽略。随后保存并退出配置文件,重启httpd服务程序即可生效。然后登陆

[root@doopli ~]# vim /etc/httpd/conf.d/userdir.conf
27 #
28 # Control access to UserDir directories. The following is an example
29 # for a site where these directories are restricted to read-only.
30 #
31 <Directory "/home/*/public_html">
32 AllowOverride all
#刚刚生成出来的密码验证文件保存路径
33 authuserfile "/etc/httpd/passwd"
#当用户尝试访问个人用户网站时的提示信息
34 authname "My privately website"
35 authtype basic
#用户进行账户密码登录时需要验证的用户名称
36 require user doopli
37 </Directory>
[root@doopli ~]# systemctl restart httpd

五、虚拟主机功能

1、基于IP地址

第1步:给网卡配置三个IP地址,检查是否正常ping通;分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。

(1)vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777728"
UUID="c9bb8fc7-9b62-4227-97b4-34489bde20b2"
ONBOOT="yes"
IPADDR0=192.168.10.10
IPADDR1=192.168.10.20
IPADDR2=192.168.10.30
PREFIX0=24
GATEWAY0=192.168.10.1
HWADDR=00:0C:29:5B:BC:2A
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

(2)创建数据目录

[root@doopli ~]# mkdir -p /home/wwwroot/10
[root@doopli ~]# mkdir -p /home/wwwroot/20
[root@doopli ~]# mkdir -p /home/wwwroot/30
[root@doopli ~]# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html
[root@doopli ~]# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html
[root@doopli ~]# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html

第2步:在httpd服务的配置文件中大约113行处开始,分别追加写入三个基于IP地址的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。

[root@doopli ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
113 <VirtualHost 192.168.10.10>
114 DocumentRoot /home/wwwroot/10
115 ServerName www.doopli.com
116 <Directory /home/wwwroot/10 >
117 AllowOverride None
118 Require all granted
119 </Directory>
120 </VirtualHost>
121 <VirtualHost 192.168.10.20>
122 DocumentRoot /home/wwwroot/20
123 ServerName bbs.doopli.com
124 <Directory /home/wwwroot/20 >
125 AllowOverride None
126 Require all granted
127 </Directory>
128 </VirtualHost>
129 <VirtualHost 192.168.10.30>
130 DocumentRoot /home/wwwroot/30
131 ServerName tech.doopli.com
132 <Directory /home/wwwroot/30 >
133 AllowOverride None
134 Require all granted
135 </Directory>
136 </VirtualHost>

第3步:此时访问网站,则会看到httpd服务程序的默认首页面。大家现在应该立刻就反应过来—这是SELinux在捣鬼。由于当前的/home/wwwroot目录及里面的网站数据目录的SELinux安全上下文与网站服务不吻合,因此httpd服务程序无法获取到这些网站数据目录。我们需要手动把新的网站数据目录的SELinux安全上下文设置正确(见前文的实验),并使用restorecon命令让新设置的SELinux安全上下文立即生效,这样就可以立即看到网站的访问效果了,

[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*
[root@doopli ~]# restorecon -Rv /home/wwwroot
restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/10 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/10/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/20 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/20/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/30 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/30/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t

2、基于主机域名

第1步:手工定义IP地址与域名之间对应关系的配置文件,保存并退出后会立即生效。可以通过分别ping这些域名来验证域名是否已经成功解析为IP地址。

[root@doopli ~]# 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.doopli.com bbs.doopli.com tech.doopli.com

第2步:分别在/home/wwwroot中创建用于保存不同网站数据的三个目录,并向其中分别写入网站的首页文件。

[root@doopli ~]# mkdir -p /home/wwwroot/www
[root@doopli ~]# mkdir -p /home/wwwroot/bbs
[root@doopli ~]# mkdir -p /home/wwwroot/tech
[root@doopli ~]# echo "WWW.doopli.com" > /home/wwwroot/www/index.html
[root@doopli ~]# echo "BBS.doopli.com" > /home/wwwroot/bbs/index.html
[root@doopli ~]# echo "TECH.doopli.com" > /home/wwwroot/tech/index.html

第3步:在httpd服务的配置文件中大约113行处开始,分别追加写入三个基于主机名的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。

[root@doopli ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
113 <VirtualHost 192.168.10.10>
114 DocumentRoot "/home/wwwroot/www"
115 ServerName "www.doopli.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.doopli.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.doopli.com"
132 <Directory "/home/wwwroot/tech">
133 AllowOverride None
134 Require all granted
135 </directory>
136 </VirtualHost>

第4步:因为当前的网站数据目录还是在/home/wwwroot目录中,因此还是必须要正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合。最后记得用restorecon命令让新配置的SELinux安全上下文立即生效,这样就可以立即访问到虚拟主机网站了,

[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
[root@doopli ~]# restorecon -Rv /home/wwwroot
reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/www context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/www/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/bbs context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/bbs/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/tech context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/tech/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

3、基于端口号

第1步:分别在/home/wwwroot中创建用于保存不同网站数据的两个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便我们稍后能更直观地检查效果。

[root@doopli ~]# mkdir -p /home/wwwroot/6111
[root@doopli ~]# mkdir -p /home/wwwroot/6222
[root@doopli ~]# echo "port:6111" > /home/wwwroot/6111/index.html
[root@doopli ~]# echo "port:6222" > /home/wwwroot/6222/index.html

第2步:在httpd服务配置文件的第43行和第44行分别添加用于监听6111和6222端口的参数。

[root@doopli ~]# vim /etc/httpd/conf/httpd.conf 
………………省略部分输出信息……………… 
 33 #
 34 # Listen: Allows you to bind Apache to specific IP addresses and/or
 35 # ports, instead of the default. See also the <VirtualHost>
 36 # directive.
 37 #
 38 # Change this to Listen on specific IP addresses as shown below to 
 39 # prevent Apache from glomming onto all bound IP addresses.
 40 #
 41 #Listen 12.34.56.78:80
 42 Listen 80
 43 Listen 6111
 44 Listen 6222

第3步:在httpd服务的配置文件中大约113行处开始,分别追加写入两个基于端口号的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。

[root@doopli ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息……………… 
113 <VirtualHost 192.168.10.10:6111>
114 DocumentRoot "/home/wwwroot/6111"
115 ServerName www.doopli.com
116 <Directory "/home/wwwroot/6111">
117 AllowOverride None
118 Require all granted
119 </Directory> 
120 </VirtualHost>
121 <VirtualHost 192.168.10.10:6222>
122 DocumentRoot "/home/wwwroot/6222"
123 ServerName bbs.doopli.com
124 <Directory "/home/wwwroot/6222">
125 AllowOverride None
126 Require all granted
127 </Directory>
128 </VirtualHost>

第4步:因为我们把网站数据目录存放在/home/wwwroot目录中,因此还是必须要正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合。最后记得用restorecon命令让新配置的SELinux安全上下文立即生效。

[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
[root@doopli ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
[root@doopli ~]# restorecon -Rv /home/wwwroot/
restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/6111 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/6111/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/6222 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/6222/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@doopli ~]# systemctl restart httpd
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

第5步:SELinux允许的与HTTP协议相关的端口号中默认没有包含6111和6222,因此需要将这两个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。设置好后再重启httpd服务程序,然后就可以看到网页内容了,

[root@doopli ~]# semanage port -a -t http_port_t -p tcp 6111
[root@doopli ~]# semanage port -a -t http_port_t -p tcp 6222
[root@doopli ~]# semanage port -l| grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp  6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@doopli ~]# systemctl restart httpd

 

posted @ 2018-12-02 22:30  doopli  阅读(325)  评论(0编辑  收藏  举报