一、网站服务器
1.安装httpd服务并加载
(1)挂载光盘
#mkdir -p /media/cdrom
#mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
(2)制作yum源文件
#vim /etc/yum.repos.d/rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
qpgcheck=0
(3)安装Apacke服务程序
#yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Dependencies Resolved
==============================================================
Package Arch Version Repository Size
==============================================================
Installing:
httpd x86_64 2.4.6-17.el7 rhel 1.2 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 rhel 103 k
apr-util x86_64 1.5.2-6.el7 rhel 92 k
httpd-tools x86_64 2.4.6-17.el7 rhel 77 k
mailcap noarch 2.1.41-2.el7 rhel 31 k
Transaction Summary
==============================================================
Install 1 Package (+4 Dependent packages)
Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
………………省略部分输出信息………………
Complete!
(4)启用httpd服务程序并加入到开机启动项中
#systemctl start httpd
#systemctl enabled httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
(5)测试服务是否启动
在Firefox浏览器中输入http://127.0.0.1并回车,可以看到httpd服务程序的默认页面。
#firefox
二、配置服务器参数
(1)Linux系统中的配置文件
服务目录:/etc/httpd
主配置文件:/etc/httpd/conf/httpd.conf
网站数据目录:/var/www/html
访问日志:/var/log/httpd/access_log
错误日志:/var/log/httpd/error_log
(2)配置httpd服务程序时最常用的参数以及用途描述
ServerRoot:服务目录
ServerAdmin:管理员邮箱
User:运行服务的用户
Group:运行服务的用户组
ServerName:网站服务器的域名
DocumentRoot:网站数据目录
Directory:网站数据目录的权限
Listen:监听的IP地址与端口号
DirectoryIndex:默认的索引页页面
ErrorLog:错误日志文件
CustomLog:访问日志文件
Timeout:网页超时时间,默认为300秒
在/var/www/html目录中新建index.html文件,替换掉httpd服务程序的默认页面,该操作立即生效。
#echo "Welcome To LinuxProbe.com" > /var/www/html/index.html
#firefox
(3)网站数据默认保存在/var/www/html目录中,而如果想把保存网站数据的目录修改为/home/wwwroot目录,该如何操作呢?
第1步,建立网站数据的保存目录,并创建首页文件
#mkdir /home/wwwroot
#echo "The New Web Directory" > /home/wwwroot/index.html
第2步,打开httpd服务程序的主配置文件,将119行定义网站数据保存路径的参数DocumentRoot修改为/hone/wwwroot,同时将124行定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。修改完后保存并退出。
#vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
113
114 #
115 # DocumentRoot: The directory out of which you will serve your
116 # documents. By default, all requests are taken from this directory, but
117 # symbolic links and aliases may be used to point to other locations.
118 #
119 DocumentRoot "/home/wwwroot"
120
121 #
122 # Relax access to content within /var/www.
123 #
124 <Directory "/home/wwwroot">
125 AllowOverride None
126 # Allow open access:
127 Require all granted
128 </Directory>
………………省略部分输出信息………………
第3步,重新启动httpd服务程序并验证结果
#systemctl restart httpd
#firefox
访问http://127.0.0.1时看到的是httpd服务程序的默认页面,应该看到的是index.html页面才对。尝试访问http:/127.0.0.1/index.html页面时,发现页面中显示"Forbidden,You don't have permission to access/index.html on this server."这一切正百SELinux在捣鬼。
三、SELinux安全子系统
SELinux (Security-Enhanced Linux) 是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制(MAC, Mandatory Access Control)的安全子系统。 RHEL 7 系统使用 SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
经常会把“SELinux 域”和“SELinux 安全上下文”称为是 Linux 系统中的双保险,系统内的服务程序只能规规矩矩地拿到自己所应该获取的资源,这样即便黑客入侵了系统,也无法利用系统内的服务程序进行越权操作。
SELinux 服务有三种配置模式,具体如下。
➢ enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
➢ permissive:遇到服务越权访问时,只发出警告而不强制拦截。
➢ disabled:对于越权的行为不警告也不拦截。
#vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
获取当前SELinux服务的运行模式:
#getenforce
Enforcing
修改当前SELinux的运行模式(0为禁用,1为启用),这种修改只是临时的,在系统重启后就会失效:
#setenforce 0
#getenforce
Permissive
再次刷新网而,就会看到正常的网而内容了。
我们将网站数据的默认保存目录修改为了/home/wwwroot,而这就产生
问题了。/home 目录是用来存放普通用户的家目录数据的,而现在,httpd提供的网站服务却要去获取普通用户家目录中的数据了, 这显然违反了 SELinux 的监管原则。
现在,我们把 SELinux 服务恢复到强制启用安全策略模式,然后分别查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的 SELinux 安全上下文值:
#setenforce 1
#ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
#ls -Zd /home/wwwroot
drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot
用semanage命令管理SELinux的策略,格式为"semanage [选项] [文件]"。
使用 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 参数对指定的目录进行递归操作,以及显示 SELinux 安全上下文的修改过程。最后,再次刷新页面,就可以正常看到网页内容了
#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/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
#firefox
四、个人主页功能
(1)在httpd服务程序中,默认没有开启个人主页功能。为此需要编辑下面的配置文件,把17行UserDir disable参数前面加上#号,再在把24行的UserDir public_html参数前面的#号去掉,UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录。
#vim /etc/httpd/conf.d/userdir.conf
1 #
2 # UserDir: The name of the directory that is appended onto a user's home
3 # directory if a ~user request is received.
4 #
5 # The path to the end user account 'public_html' directory must be
6 # accessible to the webserver userid. This usually means that ~userid
7 # must have permissions of 711, ~userid/public_html must have permissions
8 # of 755, and documents contained therein must be world-readable.
9 # Otherwise, the client will only receive a "403 Forbidden" message.
10 #
11 <IfModule mod_userdir.c>
12 #
13 # UserDir is disabled by default since it can confirm the presence
14 # of a username on the system (depending on home directory
15 # permissions).
16 #
17 # UserDir disabled
18
19 #
20 # To enable requests to /~user/ to serve the user's public_html
21 # directory, remove the "UserDir disabled" line above, and uncomment
22 # the following line instead:
23 #
24 UserDir public_html
25 </IfModule>
26
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 FileInfo AuthConfig Limit Indexes
33 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
34 Require method GET POST OPTIONS
35 </Directory>
(2)在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。
#su - linuxprobe
Last login: Sun Aug 4 08:52:42 CST 2019 on :0
$mkdir public_html
$echo "This is linuxprobe's website" > public_html/index.html
$chmod -Rf 755 /home/linuxprobe
(3)重新启动 httpd 服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名” (其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格) ,从理论上来讲就可以看到用户的个人网站了。但是,报错了。
$su - root
Password:
Last login: Sun Aug 4 08:53:52 CST 2019 from 192.168.1.100 on pts/0
#systemctl restart httpd
#firefox
(4)思考这次报错的原因是什么。httpd 服务程序在提供个人用户主页功能时,该用户的网站数据目录本身就应该是存放到与这位用户对应的家目录中的,所以应该不需要修改家目录的 SELinux 安全上下文。但是,前文还讲到了 Linux 域的概念。Linux 域确保服务程序不能执行违规的操作,只能本本分分地为用户提供服务。httpd 服务中突然开启的这项个人用户主页功能到底有没有被 SELinux 域默认允许呢?
接下来使用 getsebool 命令查询并过滤出所有与 HTTP 协议相关的安全策略。 其中, off 为禁止状态,on 为允许状态。
#getsebool -a | grep http
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off
named_tcp_bind_http_port --> off
prosody_bind_http_port --> off
#setsebool -P httpd_enable_homedirs=on
#firefox
(5)有时,网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访客看到里面的内容,这时就可以在网站中添加口令功能了。
第1步,先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地帐户)。
#htpasswd -c /etc/httpd/passwd admin
New password: (此处输入用于网页验证的密码,设定为admin)
Re-type new password: (再输入一遍进行确认)
Adding password for user admin
第2步,编辑个人用户主页功能的配置文件。把31~35行的参数信息修改成下列内容,其中#号开头的内容是添加的注释信息,可将其忽略。保存退出,重启http服务程序即可生效。
#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 linuxprobe
37 </Directory>
#systemctl restart httpd
此后,当用户再想访问某个用户的个人网站时,就必须要输入账户和密码才能正常访问了。 另外, 验证时使用的账户和密码是用 htpasswd 命令生成的专门用于网站登录的口令密码,而不是系统中的用户密码,请不要搞错了。
五、虚拟主机功能(最好将实验的虚拟机还原到最初,以免造成冲突)
Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技。
1.基于IP地址
我们给一块网卡配置三个IP地址,分别是:192.168.1.145,192.168.1.146,192.168.1.147
(1)重启网络服务并保证三个IP可以被ping通
#systemctl restart network
#ping 192.168.1.145
#ping 192.168.1.146
#ping 192.168.1.147
分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便直观地检查效果。
#mkdir -p /home/wwwroot/145
#mkdir -p /home/wwwroot/146
#mkdir -p /home/wwwroot/147
#echo "IP:192.168.1.145" > /home/wwwroot/145/index.html
#echo "IP:192.168.1.146" > /home/wwwroot/146/index.html
#echo "IP:192.168.1.147" > /home/wwwroot/147/index.html
(2)在httpd服务的配置文件中大约113行处开始,分别追加写入三个基于IP地址的虚拟主机网站参数,然后保存并退出。重启httpd服务,使配置生效。
#vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
113 <VirtualHost 192.168.1.145>
114 DocumentRoot /home/wwwroot/145
115 ServerName www.linuxprobe.com
116 <Directory /home/wwwroot/145 >
117 AllowOverride None
118 Require all granted
119 </Directory>
120 </VirtualHost>
121 <VirtualHost 192.168.1.146>
122 DocumentRoot /home/wwwroot/146
123 ServerName bbs.linuxprobe.com
124 <Directory /home/wwwroot/146 >
125 AllowOverride None
126 Require all granted
127 </Directory>
128 </VirtualHost>
129 <VirtualHost 192.168.1.147>
130 DocumentRoot /home/wwwroot/147
131 ServerName tech.linuxprobe.com
132 <Directory /home/wwwroot/147 >
133 AllowOverride None
134 Require all granted
135 </Directory>
136 </VirtualHost>
………………省略部分输出信息………………
# systemctl restart httpd
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
# 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/tech
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
# restorecon -Rv /home/wwwroot
2.基于主机域名
当服务器无法为每个网站都分配一个独立 IP 地址的时候,可以尝试让 Apache 自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的 IP 地址(这里以 192.168.1.145 为例)就可以了。由于当前还没有介绍如何配置 DNS 解析服务,因此需要手工定义 IP 地址与
域名之间的对应关系。/etc/hosts 是 Linux 系统中用于强制把某个主机域名解析到指定 IP 地址的配置文件。简单来说,只要这个文件配置正确,即使网卡参数中没有 DNS 信息也依然能够将域名解析为某个 IP 地址。
(1)手工定义 IP 地址与域名之间对应关系的配置文件
#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
#ping -c 4 www.linuxprobe.com
(2) 在 httpd 服务的配置文件中大约 113 行处开始, 分别追加写入三个基于主机名的虚拟主机网站参数,然后保存并退出。记得需要重启 httpd 服务,这些配置才生效。
#vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
113 <VirtualHost 192.168.1.145>
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.1.145>
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.1.145>
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>
………………省略部分输出信息………………
#systemctl restart httpd
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
# 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/tech
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
# restorecon -Rv /home/wwwroot
#firefox
3.基于端口号
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用 Apache 配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此我们不仅要考虑 httpd 服务程序的配置因素,还需要考虑到 SELinux 服务对新开设端口的监控。一般来说,使用 80、443、8080 等端口号来提供网站访问服务是比较合理的,如果使用其他端口号
则会受到 SELinux 服务的限制。
在接下来的实验中,我们不但要考虑到目录上应用的 SELinux 安全上下文的限制,还需要考虑 SELinux 域对 httpd 服务程序的管控。
(1)分别在/home/wwwroot中创建用于保存不同网站数据的两个目录
#mkdir -p /home/wwwroot/6111
#mkdir -p /home/wwwroot/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
………………省略部分输出信息………………
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服务。
#vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
113 <VirtualHost 192.168.1.145:6111>
114 DocumentRoot "/home/wwwroot/6111"
115 ServerName www.linuxprobe.com
116 <Directory "/home/wwwroot/6111">
117 AllowOverride None
118 Require all granted
119 </Directory>
120 </VirtualHost>
121 <VirtualHost 192.168.1.145:6222>
122 DocumentRoot "/home/wwwroot/6222"
123 ServerName bbs.linuxprobe.com
124 <Directory "/home/wwwroot/6222">
125 AllowOverride None
126 Require all granted
127 </Directory>
128 </VirtualHost>
………………省略部分输出信息………………
(4)设置网站数据目录存放在/home/wwwroot目录中的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
此时重启httpd服务一定报错。因为端口为被SELinux认可。
# 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 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
(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
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
# systemctl restart httpd
# firefox
# systemctl restart httpd
六、Apache的访问控制
Apache 可以基于源主机名、源 IP 地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过 Allow 指令允许某个主机访问服务器上的网站资源, 通过 Deny 指令实现禁止访问。在允许或禁止访问网站资源时,还会用到 Order 指令,这个指令用来定义 Allow或 Deny 指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
(1)先在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含Successful单词的首页文件。
# mkdir /var/www/html/server
# echo "Successful" > /var/www/html/server/index.html
(2)打开httpd服务的配置文件,在第129行后面添加下述规则来限制源主机的访问。这段规则的含义是允许使用 Firefox 浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。
# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
129 <Directory "/var/www/html/server">
130 SetEnvIf User-Agent "Firefox" ff=1
131 Order allow,deny
132 Allow from env=ff
133 </Directory>
………………省略部分输出信息………………
# systemctl restart httpd
# firefox
在浏览器中输入http://192.168.1.145/server/,将会显示Successfull。
(3)除了匹配源主机的浏览器特征之外,还可以通过匹配源主机的 IP 地址进行访问控制。例如,我们只允许 IP 地址为 192.168.1.155 的主机访问网站资源,那么就可以在 httpd 服务配置文件的第 129 行后面添加下述规则。这样在重启 httpd 服务程序后再用本机(即服务器,其 IP地址为192.168.1.145)来访问网站的首页面时就会提示访问被拒绝。
# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
129 <Directory "/var/www/html/server">
130 Order allow,deny
131 Allow from 192.168.1.155
132 Order allow,deny
133 </Directory>
………………省略部分输出信息………………
# systemctl restart httpd
# firefox
此文章参考刘遄老师所著的《linux就该这么学》,经过逐步调试,并验证后形成的。