目录
1 CentOS系统中Apache的安装
本节只介绍CentOS系统中如何安装及启动Apache服务。而对于kali系统,apache在kali虚拟机中已自带,需要使用命令启动Apache2服务,并查看其状态,具体可参考《 《Kali Linux系统利用Apache发布网站并设置访问限制》》。
1.1 安装前检查
(1)使用root用户登陆系统,并打开终端。
(2)查询系统是否已安装过Apache。因为在Linux系统中,不同方式安装的软件其查询命令不一致,建议使用以下命名查询系统中是否已安装过Apache,在该系统中名称是httpd。查询结果如图所示,均查不到内容。
rpm -qa | grep httpd
yum list installed | grep httpd
1.2 配置IP地址
本实验采用yum方式安装软件,而yum方式安装软件需要联网下载安装包,所以需要保证电脑能够上网。因此需要首先配好IP并将CentOS虚拟机桥接到真实网络中。配置IP的具体步骤如下,具体过程还可以参考《 Linux系统网络信息查看与配置(包括CentOS和Kali)》。
(1)将CentOS虚拟机的网络桥接到真实网络,如下。
(2)查看真实机网络信息。已知真实机IP地址为192.168.1.2,网关为192.168.1.1,DNS地址为192.168.1.1。
(3)查看相关配置文件, cd /etc/sysconfig/network-scripts/
,该目录下有两个文件存放对应网卡的网络配置信息。
(4)配置网卡ens33。使用VIM编辑器打开ifcfg-ens33文件和进行配置,命令为 vim /etc/sysconfig/network-scripts/ifcfg-ens33
。打开配置文件后,按ins进入插入模式,可以输入命令。在该文件中的配置如下。vim编辑器的具体操作可参考《Linux系统vim编辑器简单应用》。之后按ESC键退出编辑模式,然后输入命令:wq保存并退出该网络配置文件.
(4)重新启动network服务使文件生效,输入命令/etc/init.d/network restart
或者service network restart
启动network服务管理该文件。然后输入ip addr查看IP地址是否配置完成,发现已配置完成。
(5)此时配置完毕,检验一下是否可以上外网,输入命令ping www.baidu.com,Linux的ping命令不同于Windows默认发4次包,Linux的ping命令会一直发,我们可以按Ctrl+C中止命令,如下图:
1.3 安装及检查
本实验apache的安装采用yum方式安装,具体步骤如下:
(1)输入yum install httpd* -y
用这个命令来安装apache。其中,输入-y之后不用一直回复。
(2)需要一小会的等待……提示安装完完毕。
(3)输入命令systemctl start httpd.service
启动Apache,并输入命令systemctl status httpd.service
查看启动后的状态。看到已成功启动。
(4)通过查看端口验证。输入命令ss -antpl | grep 80查看是否已开启80端口,发现已正常开启。其中ss表示查询已开启端口号、a表示所有、n表示不用尝试解析服务名称、t表示TCP协议、p表示process进程、l表示监听状态、grep 80表示按80过滤。(也可以采用netstat -antpl | grep 80
命令)。
(5)打开浏览器,输入IP地址访问网站,成功访问说明apache已安装完成。
2 主页建立与编辑
(1)新建主页及编辑。默认主页目录为/var/www/html,进入到主页所在目录/var/www/html下,输入命令vim /var/www/html/index.html
新建主页并编辑。按ins键插入模式下输入以下命令,按Esc键回到命令模式,按:进入末行模式,输入wq保存并退出。
(2)打开win7虚拟机,将win7与CentOS虚拟机桥接到同一个网络且为win7配置IP地址(192.168.1.9),保证win7与CentOS虚拟机能互相ping通。
(3)CentOS虚拟机需要关闭防火墙和关闭selinux防火墙。输入命令systemctl stop firewalld.service
关闭防火墙,之后输入命令firewall-cmd --state
查看防火墙状态,此时可以看到防火墙已关闭。使用命令setenforce 0
关闭selinux防火墙。另外,若想关闭防火墙开机自启动,可以使用命令systemctl disable firewalld.service
。
(4)用win7虚拟机去访问CentOS虚拟机网页。在浏览器输入IP地址进行访问,可以看到访问成功。
3 Apache主配置文件分析
在CentOS系统中,Apache主配置文件的路径为/etc/httpd/conf/httpd.conf,使用命令 vim /etc/httpd/conf/httpd.conf
打开Apache主配置文件。文件较长,在末行模式下输入 :set nu 显示行号,方便查看或编辑。注意,在Kali系统中,Apache主配置文件的路径为/etc/apache2/apache2.conf 。该主配置文件主要规定了以下内容:
(1)配置文件规定了服务的根目录,也就是软件装在哪,其他子目录均在此根目录下展开。
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path. If you point
# ServerRoot at a non-local disk, be sure to specify a local disk on the
# Mutex directive, if file-based mutexes are used. If you wish to share the
# same ServerRoot for multiple httpd daemons, you will need to change at
# least PidFile.
#
ServerRoot "/etc/httpd"
(2)配置文件规定了服务端口号为80.
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
(3)配置文件说明了加载的功能模块
# To be able to use the functionality of a module which was built as a DSO y ou
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf
(4)配置文件说明了服务使用的用户身份。
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache
Group apache
(5)配置文件说明了网站主页存放的目录,同时也有对目录中各种功能使用说明。
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
(6)配置文件对网站的访问权限进行了说明。
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
(7)配置文件对主页下文件的功能进行了规定,如是否共享、访问权限等。(什么叫做文件共享呢?假如/var/www/html目录下还有其他目录(文件也可以)为share,访问者通过输入http://192.168.1.8/share,则可以下载share下的文件,达到文件共享的目的)若需要关闭文件共享功能,则按下图所示删除indexes后保存即可,注意,要想编辑后的文件生效,需要重启Apache服务(输入命令systemctl restart httpd.service
重启)
# Further relax access to the default document root:
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
4 访问控制设定
4.1 客户机地址限制
在一台centos7上搭建apache网站后,一般都是允许所有人访问的,如下图所示,在主配置文件中规定了允许所有人访问。那么可能会有一些特殊情况,需要对访问网站的人进行限制,出于这种情况,apache可以通过Require配置项,来对客户端进行一些访问限制,可以基于IP地址、网段、主机名或域名。使用名称“all”时表示任意地址。
4.1.1 客户机地址限制原理
对客户机地址限制的常用格式有下面几种:
- Require all granted:表示允许所有主机访问(也是默认的);
- Require all denied:表示拒绝所有主机访问;
- Require local:表示仅允许本地主机访问;
- Require [not] host <主机名或域名列表>:表示仅允许或拒绝指定主机或域名访问;
- Require [not] ip <地址或网段列表>:表示仅允许或拒绝指定IP地址或网段访问;
定义限制策略时,多个不带not的require配置语句之间是或的关系,就是满足任意一条require配置语句就可以访问;若即有不带not的require配置语句,又出现了带not的require配置语句,则语句之间是与的关系,即同时满足所有require配置语句才可访问。注意,只要更改了服务的配置文件,必须重启Apache服务才可生效,重启服务的命令为systemctl restart httpd.service
。
4.1.2 客户机地址限制示例1
要求:仅允许ip地址为192.168.1.10的主机能够访问网页目录下的内容,
具体步骤:
(1)使用命令 vim /etc/httpd/conf/httpd.conf
打开Apache主配置文件。
(2)进入网站主配置文件httpd.conf后,在末行模式下输入:/Directory,按n查找到相应的位置,并在输入模式下按如下修改配置文件,最后保存并退出。其中vim编辑器的具体操作可参考《【Linux系统】第7节 Linux系统vim编辑器简单应用》
<Directory "/var/www/html">
................ #省略部分内容
Require ip 192.168.1.10 #仅允许192.168.1.10的主机访问网站服务
</Directory>
(3)输入命令systemctl restart httpd.service
重启apache服务。
(4)用上述的win7虚拟机浏览器去访问CentOS虚拟机网页(此时win7的IP地址为192.168.1.9).,可以看到,没有看到真正的主页,访问失败。
(5)将win7虚拟机的IP地址修改为192.16.1.10,再去访问CentOS虚拟机网页,访问成功。
4.1.3 客户机地址限制示例2
要求:192.168.1.0网段的主机不能访问网站,但是别的网段的主机都可访问。
具体步骤:
(1)使用命令 vim /etc/httpd/conf/httpd.conf
打开Apache主配置文件。
(2)进入网站主配置文件httpd.conf后,在末行模式下输入:/Directory,按n查找到相应的位置,并在输入模式下按如下修改配置文件,最后保存并退出。注意,在下面的配置中,只要访问规则中出现了not语句,那么必须把规则放在 <RequireAll> </RequireAll>
标签中。
<Directory "/var/www/html">
................ #省略部分内容
<RequireAll>
Require all granted #允许所有主机访问
Require not ip 192.168.1.0/24 #但192.168.1.0网段不可访问
</RequireAll>
</Directory>
(3)输入命令systemctl restart httpd.service
重启apache服务。
(4)win7虚拟机浏览器去访问CentOS虚拟机网页(此时win7的IP地址为192.168.1.10).,可以看到,没有看到真正的主页,访问失败。
(4)若win7虚拟机浏览器一定要访问CentOS虚拟机index.html主页,可以在浏览器中输入http://192.168.1.8/index.html
。可以看到,网站拒绝显示此网页。
4.2 用户授权限制
基于用户的访问控制包含认证和授权两个过程,httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证的话需要在编译http之前添加“–enable-auth-digest”选项,但并不是所有的浏览器都支持摘要认证,所以不推荐使用;而基本认证是httpd服务的基本功能,不需要预先配置特别的选项。以下介绍基本认证方式,具体步骤如下:
(1)创建用户和设置密码的数据文件,代码如下:
htpasswd -c /etc/httpd/conf/httpuser tom #使用htpasswd工具创建用户,-c表示创建,/etc/httpd/conf/httpuser为所创建的用户的存放路径及文件名,tom为创建的用户名。
New password: #输入密码
Re-type new password: #确认密码
Adding password for user webadmin #提示添加成功
(2)查看该用户文件的权限及用户信息。
(3)另外建议将该文件的所属者改为apache,且只有apache用户可读。
(4)添加用户授权配置。输入命令vim /etc/httpd/conf/httpd.conf
编辑网站主配置文件,网站主配置文件中添加用户授权配置代码如下,修改完后并保存退出。需要注意的是,用户访问授权与客户机地址访问控制同时设置时,设置的主机访问控制优先生效。所以在进行用户授权限制时,需要删除掉其中的require语句。要不然,用户访问授权不会生效。
<Directory "/var/www/html">
authtype basic #设置认证类型,basic表示基本认证,即弹框的类型
authname "please input username and password" #定义弹框后的提示信息,不能写中文
authuserfile /etc/httpd/conf/httpuser #设置用于保存用户账号、密码的认证文件路径
require valid-user #要求只有认证文件中的有效用户才可访问。
# 其中valid-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名,如tom。
(5)输入命令systemctl restart httpd.service
重启apache服务。
(6)用win7虚拟机浏览器去访问CentOS虚拟机网页(此时win7的IP地址为192.168.1.10)。此时弹框,需要输入用户和密码。
(7)输入正确的用户和密码后可以访问。
5 归纳
(1)掌握CentOS Linux系统下部署apache网站的方法。
(2)熟悉CentOS Linux系统下apache网站的主配置文件。
(3)掌握CentOS Linux系统下apache网站访问控制的配置,包括客户机地址地址限制和用户授权限制。
参考文章
[1] 《Kali Linux系统利用Apache发布网站并设置访问限制》
[2]《基于Cent OS7搭建apache网站后的访问控制配置详解》
[3] 视频传送门