linux(redhat7)学习笔记(10)APACHE

一、网站服务程序

1.先通过虚拟机光驱指向REHL7的ISO文件

2.挂载光驱设备到目录

mkdir -p /media/cdrom

mount /dev/cdrom /media/cdrom

也可以vim /etc/fstab 将挂载内容写入

/dev/cdrom /media/cdrom iso9660 defaults 0 0

3. Vim 文本编辑器创建Yum 仓库的配置文件

vim /etc/yum.repos.d/rhel7.repo

[rhel]

name=rhel

baseurl=file:///media/cdrom

enabled=1

gpgcheck=0

 

 

#本地安装,不需要验证

gpgcheck=0

4.安装Apache 服务程序。注意,使用yum 命令进行安装时,跟在命令后面的Apache 服务的软件包名称为httpd。如果直接执行yum install apache 命令,则系统会报错。

yum install httpd

5.启用httpd 服务程序并将其加入到开机启动项中,使其能够随系统开机而运行,从而持续为用户提供Web 服务

systemctl start httpd

systemctl enable httpd

firefox

此时打开firefox输入本机IP地址可以显示默认页面(出现默认页面的原因1.没有首页面2.没有权限)

 

这表示服务已启,但新站点没有首页。

下面写一个首页,首先进入目录:

cd /var/www/html/

vim index.html

写入如下内容

my first page!

刷新原默认页面

显示上面的内容了

二、配置服务文件参数

Linux系统中的配置文件

配置文件的名称 存放位置

服务目录 /etc/httpd

主配置文件/etc/httpd/conf/httpd.conf

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

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

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

 

 

此时,网站首页默认存入于/var/www/html/,可以更换为/home/wwwroot

mkdir /home/wwwroot

echo "wwwroot index" > /home/wwwroot/index.html

前提需要修改相应的配置文件

vim /etc/httpd/conf/httpd.conf

修改

119 DocumentRoot "/home/wwwroot"

120

121 #

122 # Relax access to content within /var/www.

123 #

124 <Directory "/home/wwwroot">

 

systemctl restart httpd

 

此时刷新页面只显示默认页面,但通过访问http://127.0.0.1/index.html 页面时,竟然发现页面中显示“Forbidden,You don't have permission toaccess /index.html on this server.”。原因是SELinux。

下面对SELinux

三、SELinux设置

SELinux 域:限制了服务的功能(例如不能让美图软件抓取用户的银行卡与密码信息)

SELinux 安全上下文:文件权限的限制(例如银行卡信息上加上限制,仅限网银软件使用)

 

“SELinux 域”和“SELinux 安全上下文”称为是Linux 系统中的双保险,系统内的服务程序只能规规矩矩地拿到自己所应该获取的资源,这样即便黑客入侵了系统,也无法利用系统内的服务程序进行越权操作。

命令:

vim /etc/selinux/config

可以查看SELinux 服务有三种配置模式。

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

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

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

可以运行getenforce 命令获得当前SELinux服务的运行模式:

[root@linuxprobe ~]# getenforce

Enforcing

可以用setenforce [0|1]命令修改SELinux 当前的运行模式(0 为禁用,1 为启用)。重启会失效 。

 

无法访问home目录下的网页文件的原因是:,/home 目录是用来存放普通用户的家目录数据的,而现在,httpd

提供的网站服务却要去获取普通用户家目录中的数据了,这显然违反了SELinux 的监管原则。

 

查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的SELinux 安全上下文值

[root@linuxprobe ~]# ls -Zd /var/www/html

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

[root@linuxprobe ~]# ls -lZd /home/wwwroot

drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

 

SELinux 安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的。其中,用户段system_u 代表系统进程的身份,角色段object_r 代表文件目录的角色,类型段httpd_sys_content_t 代表网站服务的系统文件。

 

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

-l 参数用于查询;

-a 参数用于添加(改为修改);

-m 参数用于修改;

-d 参数用于删除。

 

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

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

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

 

执行上述设置之后,还无法立即访问网站,还需要使用restorecon 命令将设置好的SELinux 安全上下文立即生效

restorecon -Rv /home/wwwroot/

 

[root@linuxprobe ~]# ls -ldZ /home/wwwroot

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /home/wwwroot

 

四、个人用户主页功能

例1.

可以让操作系统系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。

操作如下:

1)因httpd 服务程序默认没有开启个人用户主页功能,所以需要编辑配置文件

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

加注释:UserDir disabled 或修改为: UserDir public_html

取消注释:  

 

2)在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。7表示本人可以写读执行,除本人外,本组或其他用户只可进行读和执行的权限。

[root@linuxprobe ~]# useradd linux

[root@linuxprobe ~]# su - linux

[linux@linuxprobe ~]$ mkdir public_html

[linux@linuxprobe ~]$ echo "This is linux's website" > public_html/index.html

[linux@linuxprobe ~]$ chmod -Rf 755 /home/linux

 

3)使用getsebool 命令查询并过滤出所有与HTTP 协议相关的安全策略。

getsebool -a | grep http

查看后确定SELinux 域安全策略应该是httpd_enable_homedirs,默认值为off:

ttpd_enable_homedirs --> off

下面使用用setsebool 命令来修改SELinux 策略,其中上-P 参数,让修改后的SELinux 策略规则永久生效且立即生效。

setsebool -P httpd_enable_homedirs=on

4)重新启动httpd 服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格)

systemctl restart httpd

然后通过浏览器访问:http://192.168.180.10/~linux/

网页显示内容:This is linux's website

同理user用户执行

[root@linuxprobe ~]# useradd user

[root@linuxprobe ~]# su - user

[user@linuxprobe ~]# mkdir public_html

[user@linuxprobe ~]# echo "This is user's website" > public_html/index.html

[user@linuxprobe ~]# chmod -Rf 755 /home/user

切回root用户,重启服务

[root@linuxprobe ~]# systemctl restart httpd

然后通过浏览器访问:http://192.168.180.10/~user/

网页显示:This is user's website

 

例2.网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访客看到里面的内容,这时就可以在网站中添加口令功能了。

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

htpasswd -c /etc/httpd/passwd linux

如此,生成了一个密码文件:

命令vim /etc/httpd/passwd查看此文件内容如下:

linux:$apr1$kg5I8vZ7$MlHmoiWn/zEmAcdUR7dC50

zhangsan:$apr1$8b.yCztD$1GEVY.CILjuk8.qqr6L171

以上为标准的密码文件

2)编辑个人用户主页功能的配置文件。把第31~35 行的参数信息修改成下列内容

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

AllowOverride all

#刚刚生成出来的密码验证文件保存路径

authuserfile "/etc/httpd/passwd"

#当用户尝试访问个人用户网站时的提示信息

authname "My privately website"

authtype basic

#用户进行账户密码登录时需要验证的用户名称

require user linux

重启httpd服务

systemctl restart httpd

 

然后重启浏览器,然后通过浏览器访问:http://192.168.180.10/~user/ 或http://192.168.180.10/~linux/ 均需要输入用户名与密码

当然可以添加别的账户和密码下面添加用户zhangsan

htpasswd  /etc/httpd/passwd zhangsan

 

编辑个人用户主页功能的配置文件。

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

增加一行

require user zhangsan

则无论登录哪一个用户的网站,都可以进行linux用户及zhangsan用户的登录操作。

此实验相当于验证了SELinux 安全上下文

五、虚拟主机

虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”,云计算之前数据中心的虚拟主机功能,有跨站攻击的危险,后来被VPS取代,再后来被云主机取代

 

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

 

1 基于IP 地址

1)修改网络配置文件 vim  /etc/sysconfig/network-scripts/ifcfg-eno16777728

HWADDR=00:0C:29:0C:AB:5D

TYPE=Ethernet

BOOTPROTO=static

NAME=eno16777728

UUID=ae916295-ff29-4c5b-8ee0-3a8808a708b8

ONBOOT=yes

IPADDR1=192.168.180.10

IPADDR2=192.168.180.20

IPADDR3=192.168.180.30

NETMASK=255.255.255.0

GATEWAY=192.168.180.1

DNS1=192.168.180.1

保存后重启网络

systemctl restart network

2.在/home/wwwroot 中创建3个目录d10、d20、d30、

[root@linuxprobe wwwroot]# mkdir d10 d20 d30

3)每个目录内写入不同内容的index.html

echo "<h1>IP10</h1>" > d10/index.html

echo "<h1>IP20</h1>" > d20/index.html

echo "<h1>IP30</h1>" > d30/index.html

此时不做任何修改是可以通过地址http://192.168.180.10/d10/、http://192.168.180.10/d20/、http://192.168.180.10/d30/访问的不同的页面,当然也可以通过192.168.180.20和192.168.180.30访问以上不同的页面,但这不是本练习的最终目的

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

vim /etc/httpd/conf/httpd.conf

<VirtualHost 192.168.180.10>

DocumentRoot /home/wwwroot/d10

ServerName www.111.com

<Directory /home/wwwroot/d10 >

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

<VirtualHost 192.168.180.20>

DocumentRoot /home/wwwroot/d20

ServerName www.222.com

<Directory /home/wwwroot/d20 >

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

<VirtualHost 192.168.180.30>

DocumentRoot /home/wwwroot/d30

ServerName www.333.com

<Directory /home/wwwroot/d30 >

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

 

systemctl restart httpd

此时访问网站,则会看到httpd 服务程序的默认首页面,需要进行SELinux设置

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

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

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

 

执行上述设置之后,还无法立即访问网站,还需要使用restorecon 命令将设置好的SELinux 安全上下文立即生效

restorecon -Rv /home/wwwroot/

 

2 基于主机域名

恢复虚拟机,练习基于主机域名的网站访问。

使用同一台服务器的多个网站可以不为每个网站分配独立的IP地址,可以尝试让Apache 自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。

 

首先挂载光盘,安装APACHE

[root@linuxprobe ~]# mkdir -p /media/cdrom

[root@linuxprobe ~]# mount /dev/cdrom /media/cdrom

mount: no medium found on /dev/sr0

[root@linuxprobe ~]# mount /dev/cdrom /media/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

[root@linuxprobe ~]# vim /etc/fstab

写入内容:

/dev/cdrom /media/cdrom iso9660 defaults 0 0

Vim 文本编辑器创建Yum 仓库的配置文件

vim /etc/yum.repos.d/rhel7.repo

[rhel]

name=rhel

baseurl=file:///media/cdrom

enabled=1

gpgcheck=0

 

 [root@linuxprobe ~]# yum install httpd

[root@linuxprobe ~]# systemctl start httpd

[root@linuxprobe ~]# systemctl enable httpd

 

实验使用要手工定义IP 地址与域名之间的对应关系。/etc/hosts 此文件是Linux 系统中用于强制把某个主机域名解析到指定IP 地址的配

置文件。简单来说,只要这个文件配置正确,即使网卡参数中没有DNS 信息也依然能够将域名解析为某个IP 地址。

1.修改文件

vim /etc/hosts

增加

192.168.180.10 www.al.com bbs.al.com www.bd.com www.tx.com

vim /var/www/html/index.html

写入内容

it is my first page!

然后通过firefox浏览器访问192.168.180.10www.al.combbs.al.com均显示

it is my first page!

下面练习更为复杂的内容,将网站内容放于/home/wwwroot

第 2 步:分别在/home/wwwroot 中创建用于保存不同网站数据的2个目录www和bbs

[root@linuxprobe d10]# mkdir /home/wwwroot/

[root@linuxprobe d10]# cd /home/wwwroot/

 [root@linuxprobe wwwroot]# mkdir www bbs

echo " www"> /home/wwwroot/www/index.html

echo "bbs "> /home/wwwroot/bbs/index.html

 

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

[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf

在约113行处写入如下内容

<VirtualHost 192.168.180.10>

DocumentRoot /home/wwwroot/www

ServerName www.bd.com

<Directory /home/wwwroot/www >

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

<VirtualHost 192.168.180.10>

DocumentRoot /home/wwwroot/bbs

ServerName www.tx.com

<Directory /home/wwwroot/bbs >

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

 

DocumentRoot "/home/wwwroot/"

<Directory "/home/wwwroot">

 

systemctl restart httpd

 

第 4 步:因为当前的网站数据目录还是在/home/wwwroot 目录中,因此还是必须要正确设置网站数据目录文件的SELinux 安全上下文,使其与网站服务功能相吻合。

[root@linuxprobe wwwroot]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

[root@linuxprobe wwwroot]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www

[root@linuxprobe wwwroot]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs

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

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

 

 

最后用restorecon 命令让新配置的SELinux 安全上下文立即生效,这样就可以立即访问到虚拟主机网站了,

restorecon -Rv /home/wwwroot

restorecon -Rv /home/wwwroot/www

restorecon -Rv /home/wwwroot/bbs

此时通过http://www.tx.com/,http://www.bd.com/均可访问到相应的页面

 

3 基于端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。

不仅

要考虑httpd 服务程序的配置因素,还需要考虑到SELinux 服务对新开设端口的监控。一般来说,使用80、443、8080 等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux 服务的限制。

 

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

[root@linuxprobe ~]# cd /home/wwwroot/

[root@linuxprobe wwwroot]# mkdir 6111 6222

echo "port:6111" > /home/wwwroot/6111/index.html

echo "port:6222" > /home/wwwroot/6222/index.html

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

vim /etc/httpd/conf/httpd.conf

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

114 <VirtualHost 192.168.180.10:6111>

115 DocumentRoot /home/wwwroot/www

116 ServerName www.bd.com

117 <Directory /home/wwwroot/www >

118 AllowOverride None

119 Require all granted

120 </Directory>

121 </VirtualHost>

122 <VirtualHost 192.168.180.10:6222>

123 DocumentRoot /home/wwwroot/bbs

124 ServerName www.tx.com

125 <Directory /home/wwwroot/bbs >

126 AllowOverride None

127 Require all granted

128 </Directory>

129 </VirtualHost>

重启httpd服务

systemctl restart httpd

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

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

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

restorecon -Rv /home/wwwroot/

 

以使用semanage 命令查询并过滤出所有与HTTP 协议相关且SELinux 服务允许的端口列表。

semanage port -l | grep http

 

第 5 步:SELinux 允许的与HTTP 协议相关的端口号中默认没有包含6111 和6222,因此需要将这两个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。

semanage port -a -t http_port_t -p tcp 6111

semanage port -a -t http_port_t -p tcp 6222

semanage port -l| grep http

发现6111,6222已经添加进去了

 

此时通过浏览器访问

http://192.168.180.10:6111

http://192.168.180.10:6222

 

六、Apache 的访问控制

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

Allow 指令允许某个主机访问服务器上的网站资源,通过Deny 指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order 指令.比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访

问请求,反之则拒绝访问请求。

 

下面进行实验练习:

准备:挂载光盘,安装APACHE(内容略,见前文)

 

第 1 步:先在服务器上的网站数据目录/var/www/html/中新建一个子目录,并在这个子目录中创建一个包含Successful 单词的首页文件。

cd /var/www/html

mkdir server

echo "Successful" > /var/www/html/server/index.html

虚拟机中访问地址:http://192.168.180.10/server/可以看到上述生成的页面内容,显示文字“Successful”

 

通过外面的主机访问时无法访问,原因是REDHAT7中默认80端口被过滤了,需要打开,操作步骤如下:

firewall-cmd --zone=public --add-port=80/tcp --permanent

重启firewall服务:

firewall-cmd --reload

此时外面的主机便可以访问虚拟机中的网页了。

 

第 2 步:打开httpd 服务的配置文件,在第129 行后面添加下述规则来限制源主机的访问。

这段规则的含义是允许使用Firefox 浏览器的主机访问服务器上的首页文件,除此之外的所有

请求都将被拒绝。

<Directory "/var/www/html/server">

SetEnvIf User-Agent "Firefox" ff=1

Order allow,deny

Allow from env=ff

</Directory>

 

然后重启服务

systemctl restart httpd

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值