本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节。
了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令和setsebool命令配置SELinux安全上下文和服务监管策略。
学习Apache网站服务程序的基本部署、个人用户主页功能以及基于IP地址、主机名(域名)、端口号的虚拟主机功能。
本章目录结构
10.1 网站服务程序
Web网络服务也叫WWW(World Wide Web),一般是指能够让用户通过浏览器访问到互联网中文档等资源的服务。 目前提供WEB网络服务的程序有Apache、Nginx或IIS等等,Web网站服务是被动程序,即只有接收到互联网中其他计算机发出的请求后才会响应,然后Web服务器才会使用HTTP(超文本传输协议)或HTTPS(超文本安全传输协议)将指定文件传送到客户机的浏览器上。
![页面请求过程](https://i-blog.csdnimg.cn/blog_migrate/316ec35dbec3f8b4e3a84497340b665b.png)
现在既然知道了Web网站服务的原理,那么都有那些程序可以提供Web服务那?又各自有何优势?来一起分析下吧: Windows系统中默认Web服务程序是IIS(Internet Information Services),这是一款图形化的网站管理工具,IIS程序不光能提供Web网站服务,还能够提供FTP、NMTP、SMTP等服务功能,但只能在Windows系统中使用。
nginx——最初于2004年10月4日为俄罗斯知名门户站点而开发的,作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖,但最最最被认可的是低系统资源、占用内存少且并发能力强,目前国内如新浪、网易、腾讯等门户站均使用。
![apache](https://i-blog.csdnimg.cn/blog_migrate/d01a3bcac7317c60c8c0698907a60f70.png)
支持基于IP或域名的虚拟主机
支持多种方式的HTTP认证
集成代理服务器模块
安全Socket层(SSL)
能够实时见识服务状态与定制日志
多种模块的支持
Tomcat——属于轻量级的Web服务软件,一般用于开发和调试JSP代码,通常认为Tomcat是Apache的扩展程序。
10.2 安装Apache服务程序
![确认光盘已被选中](https://i-blog.csdnimg.cn/blog_migrate/5bcebb3125c7f05349d6836104dbd0b0.png)
[root@linuxprobe ~]# mkdir -p /media/cdrom [root@linuxprobe ~]# mount /dev/cdrom /media/cdrom mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxprobe ~]# vim /etc/yum.repos.d/rhel7.repo [rhel7] name=rhel7 baseurl=file:///media/cdrom enabled=1 gpgcheck=0
需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的。
[root@linuxprobe ~]# yum install httpd Loaded plugins: langpacks, product-id, subscription-manager ………………省略部分安装过程信息……………… Installing: httpd x86_64 2.4.6-17.el7 rhel7 1.2 M Installing for dependencies: apr x86_64 1.4.8-3.el7 rhel7 103 k apr-util x86_64 1.5.2-6.el7 rhel7 92 k httpd-tools x86_64 2.4.6-17.el7 rhel7 77 k mailcap noarch 2.1.41-2.el7 rhel7 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!
第5步:运行Apache服务程序并设置为开机启动:
启动Apache服务程序:
[root@linuxprobe ~]# systemctl start httpd
设置为开机自启动:
[root@linuxprobe ~]# systemctl enable httpd
打开浏览器后键入http://127.0.0.1,能看到默认页面了吗:
[root@linuxprobe ~]# firefox
10.3 配置服务文件参数
服务目录 | /etc/httpd |
配置文件 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
打开Apache服务程序的配置文件:
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
ServerRoot | 服务目录 |
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒. |
Include | 需要加载的其他文件 |
![httpd配置文件分析](https://i-blog.csdnimg.cn/blog_migrate/d6be01c8c8038ba299b28fb0ac912758.png)
使用echo命令将指定的字符写入到网站数据目录中的index.html文件中:
[root@linuxprobe ~]# echo "Welcome To LinuxProbe.Com" > /var/www/html/index.html
再次打开浏览器,键入http://127.0.0.1,好棒,成功了!
[root@linuxprobe ~]# firefox
![验证apache服务实验效果](https://i-blog.csdnimg.cn/blog_migrate/d968527f7c3784eb53b0abd965b0b651.png)
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
建立网站数据目录:
[root@linuxprobe ~]# mkdir /home/wwwroot
创建首页文件:
[root@linuxprobe ~]# echo "The New Web Directory" > /home/wwwroot/index.html
重新启动Apache服务:
[root@linuxprobe ~]# systemctl restart httpd
再来打开浏览器看下效果吧,依然是键入http://127.0.0.1:
[root@linuxprobe ~]# firefox
好奇怪!!为什么会是默认页面?只有首页页面不存在或有问题才会显示Apache服务程序的默认页面啊。
那么进一步来访问"http://127.0.0.1/index.html",怎么样?惊讶到了吗?访问页面的行为是被禁止的。
Forbidden
You don't have permission to access /index.html on this server.
我们的操作与刚刚的前面的实验一样啊,但这次的访问行为会被禁止呢?这就要先了解下SElinux啦。
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
10.4 强制访问控制安全子系统
SELinux全称为Security-Enhanced Linux是美国国家安全局在Linux社区帮助下开发的一个强制访问控制的安全子系统,SELinux属于MAC强制访问控制(Mandatory Access Control)——即让系统中的各个服务进程都受到约束,即仅能访问到所需要的文件。
以本人的亲身经历不得不说国内很多运维人员对SELinux的理解不深,导致该功能在很多服务器中直接被禁用。
模式一: enforcing - 安全策略强制启用模式,将会拦截服务的不合法请求。
模式二: permissive - 遇到服务越权访问只会发出警告而不强制拦截。
模式三: disabled - 对于越权的行为不警告,也不拦截。
有时关闭SELinux后确实能够减少报错几率,但这极其的不推荐并且本书实验环境均为开启状态,确保您的SELinux服务是默认启用的:
第1步:切换到SELinux服务的配置文件目录"/etc/selinux"。
第2步:编辑config文件将模式改为强制启用,记得保存哦!
如果发现SELINUX=permissive或disabled那就赶紧改过来吧:
[root@linuxprobe ~]# cd /etc/selinux [root@linuxprobe selinux]# vim config SELINUX=enforcing
此时可以来查询下当前的SELinux服务状态:
[root@linuxprobe ~]# getenforce Enforcing
10.5 允许SELinux策略
哦~~原来如此,为了确认是这个讨厌的SELinux服务在捣鬼,我们来先关闭它试试吧:
[root@linuxprobe ~]# setenforce 0
检查状态,现在已经是“禁止模式”了:
[root@linuxprobe ~]# getenforce Permissive
打开浏览器再键入http://127.0.0.1,果然成功了!
[root@linuxprobe wwwroot]#firefox
果然是因为没有配置好SELinux服务,再次开启它吧:
[root@linuxprobe ~]# setenforce 1
刚刚浏览器里报错说“禁止,你没有访问index.html文件的权限”,那怎么开启SELinux的允许策略呢?
SELinux安全策略包括域和安全上下文:
SELinux域:对进程资源进行限制(查看方式:ps -Z)
SELinux安全上下文:对系统资源进行限制(查看方式:ls -Z)
使用"ls -Z"命令检查下新旧网站数据目录的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 -Zd /home/wwwroot drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot
SELinux安全上下文是由冒号间隔的四个字段组成的,以原始网站数据目录的安全上下文为例分析下吧:
用户段:root表示root账户身份,user_u表示普通用户身份,system_u表示系统进程身份。
角色段:object_r是文件目录角色,system_r是一般进程角色。
类型段:进程和文件都有一个类型用于限制存取权限。
解决办法就是将当前网站目录"/home/wwwroot"的安全上下文修改成system_u:object_r:httpd_sys_content_t:s0就可以啦~
semanage命令用于查询与修改SELinux的安全上下文,格式为:“semanage [选项] [文件]”。
参数 | 作用 |
-l | 查询 |
-a | 增加 |
-m | 修改 |
-d | 删除 |
restorecon命令用于恢复SELinux文件安全上下文,格式为:“restorecon [选项] [文件]”。
-i | 忽略不存在的文件 |
-e | 排除目录 |
-R | 递归处理(针对目录使用) |
-v | 显示详细的过程 |
-F | 强制恢复 |
修改网站数据目录的安全上下文:
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
修改网站数据的安全上下文(*代表所有文件或目录):
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
这样操作后查看到SELinux安全上下文依然没有改变,不要着急,再执行下restorecon命令即可:
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
再来刷新浏览器后看到正常页面:
[root@linuxprobe ~]# firefox
真可谓是一波三折,原本以为将Apache服务配置妥当就大功告成,结果却受到了SELinux安全上下文的限制,看来真是要细心才行。
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。
10.6 个人用户主页功能
Apache服务程序中有个默认未开启的个人用户主页功能,能够为所有系统内的用户生成个人网站,确实很实用哦~
第1步:开启个人用户主页功能:
[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf
将第17行的UserDir disabled前加一个#,代表该行被注释掉,不再起作用。
将第23行的UserDir public_html前的#号去除,表示该行被启用。
注意:UserDir参数表示的是需要在用户家目录中创建的网站数据目录的名称(即public_html)
重启Apache服务程序:
[root@linuxprobe ~]# systemctl restart httpd
第2步:创建个人用户网站数据。
切换至普通会员linuxprobe的家目录:
[root@linuxprobe home]# su - linuxprobe Last login: Fri May 22 13:17:37 CST 2015 on :0
创建网站数据目录public_html:
[linuxprobe@linuxprobe ~]$ mkdir public_html
写入首页文件内容:
[linuxprobe@linuxprobe ~]$ echo "This is linuxprobe's website" > public_html/index.html
给予网站目录755的访问权限:
[linuxprobe@linuxprobe ~]$ chmod -Rf 755 ./
我们打开浏览器,访问地址为"http://127.0.0.1/~用户名",不出意外果然是报错页面,肯定是SELinux服务在捣蛋。
第3步:设置SELinux允许策略。
这次报错并不是因为用户家的网站数据目录SELinux安全上下文没有设置了,而是因为SELinux默认就不允许Apache服务个人用户主页这项功能。
getsebool命令用于查询所有SELinux规则的布尔值,格式为:“getsebool -a”。
SELinux策略布尔值:只有0/1两种情况,0或off为禁止,1或on为允许。
setsebool命令用于修改SElinux策略内各项规则的布尔值,格式为:“setsebool [选项] 布尔值=[0|1]”。
参数 | 作用 |
-P | 永久生效 |
查看并搜索所有与家目录有关的SELinux策略:
[root@linuxprobe ~]# getsebool -a | grep home ftp_home_dir --> off git_cgi_enable_homedirs --> off git_system_enable_homedirs --> off httpd_enable_homedirs --> off mock_enable_homedirs --> off mpd_enable_homedirs --> off openvpn_enable_homedirs --> on samba_create_home_dirs --> off samba_enable_home_dirs --> off sftpd_enable_homedirs --> off sftpd_write_ssh_home --> off spamd_enable_home_dirs --> on ssh_chroot_rw_homedirs --> off tftp_home_dir --> off use_ecryptfs_home_dirs --> off use_fusefs_home_dirs --> off use_nfs_home_dirs --> off use_samba_home_dirs --> off xdm_write_home --> off
将个人用户网站功能策略设置为允许:
[root@linuxprobe ~]# setsebool -P httpd_enable_homedirs=on
刷新浏览器访问linuxprobe用户的个人网站,果然成功了:
第4步:增加密码安全验证。
有时候并不希望所有人都可以留意访问到自己的个人网站,那就可以使用Apache密码口令验证功能增加一道安全防护吧。
使用htpasswd命令生成密码数据库(-c参数用于第一次生成):
[root@linuxprobe ~]# htpasswd -c /etc/httpd/passwd linuxprobe New password: Re-type new password: Adding password for user linuxprobe
编辑配置文件开启密码验证(具体参数见下图):
[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。
请一定要注意要重启服务才生效的,执行命令"systemctl restart httpd",再来看下网站吧:
如果口令输入错误会直接禁止访问:
Unauthorized
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.
这里的User Name是linuxprobe,密码并非该用户的系统密码,而是htpasswd命令创建的网站密码,不要搞混哦~
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
10.7 虚拟网站主机功能
Apache的虚拟主机功能 (Virtual Host) 是可以让一台服务器基于IP、主机名或端口号实现提供多个网站服务的技术。
虚拟主机功能的操作步骤都很简单,但可能比较难理解其中的原理,一旦搭建出实验环境,你就一定会明白了。[附件]
10.7.1 基于IP地址
这种情况很常见:一台服务器拥有多个IP地址,当用户访问不同IP地址时显示不同的网站页面。
第1步:使用nmtui命令为网卡添加多个IP地址(192.168.10.10/20/30):
重新启动网卡设备后使用ping命令检查是否配置正确(这项很重要,一定要测试好再进行下一步!)。
第2步:分别创建网站数据目录。
在/home/wwwroot目录下分别创建三个网站数据目录:
[root@linuxprobe ~]# mkdir -p /home/wwwroot/10 [root@linuxprobe ~]# mkdir -p /home/wwwroot/20 [root@linuxprobe ~]# mkdir -p /home/wwwroot/30
分别在这三个网站数据目录中写入主页文件,内容为该网站的IP地址:
[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
第3步:在配置文件中描述基于IP地址的虚拟主机。
<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 bbs.linuxprobe.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost><VirtualHost 192.168.10.30>
DocumentRoot /home/wwwroot/30
ServerName tech.linuxprobe.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。
第4步:修改网站数据目录的SELinux安全上下文。
需要分别修改网站数据目录以及网页文件的SELinux安全上下文:
[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/*
立即恢复SELinux安全上下文:
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot
第5步:分别访问192.168.10.10/20/30验证结果:
请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。
10.7.2 基于主机名
当服务器无法为每个网站都分配到独立IP地址时,可以试试让Apache服务程序自动识别来源主机名或域名然后跳转到指定的网站。
第1步:配置网卡IP地址与hosts文件。
hosts文件作用是定义IP地址与主机名的映射关系,即强制将某个主机名地址解析到指定的IP地址。
[root@linuxprobe ~]# vim /etc/hosts //每行只能写一条,格式为IP地址+空格+主机名(域名)。 192.168.10.10 www.linuxprobe.com 192.168.10.10 bbs.linuxprobe.com 192.168.10.10 tech.linuxprobe.com
第2步:分别创建网站数据目录:
[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
第3步:在配置文件中描述基于主机名称的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定义虚拟主机信息:
<VirtualHost 192.168.10.10> DocumentRoot "/home/wwwroot/www" ServerName "www.linuxprobe.com" <Directory "/home/wwwroot/www"> AllowOverride None Require all granted </directory> </VirtualHost> <VirtualHost 192.168.10.10> DocumentRoot "/home/wwwroot/bbs" ServerName "bbs.linuxprobe.com" <Directory "/home/wwwroot/bbs"> AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.10.10> DocumentRoot "/home/wwwroot/tech" ServerName "tech.linuxprobe.com" <Directory "/home/wwwroot/tech"> AllowOverride None Require all granted </directory> </VirtualHost>
读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable httpd“。
第4步:修改网站数据目录的SELinux安全上下文:
[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/*
让新的SELinux安全上下文立即生效:
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
第5步:分别访问网站验证结果
请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。
10.7.2 基于端口号
我们可以让服务器开启多个服务端口后,然后让用户能够通过访问服务器的指定端口来找到想要的网站。
第1步:配置服务器的IP地址:
第2步:分别创建网站数据目录。
分别创建端口为6111,6222的网站数据目录:
[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
第3步:在配置文件中描述基于端口号的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),找到约在42行的Listen 80,并在下面追加:
Listen 6111
Listen 6222
然后在主配置文件的末尾按下面格式定义虚拟主机信息:
<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>
读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:"systemctl enable httpd"。
什么!竟然报错了:
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
这是因为SELinux服务检测到6111与6222端口原本并不属于Apache服务端口,但现在却被以Apache的名义监听了,便直接拒绝掉了。
第4步:修改网站数据目录的SELinux安全上下文并允许端口监听。
修改网站数据目录的安全上下文:
[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot [root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111 [root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111/* [root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222 [root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222/*
让新的SElinux安全上下文立即生效:
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
使用semanage命令搜索在SELinux系统中有关http服务的端口号:
[root@linuxprobe ~]# 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
默认包括80,81,443,488,8008,8009,8443,9000却没有咱们定义的端口号,那么添加进去就可以了:
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111 [root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
再来看下SELinux的端口规则(已经添加成功了):
[root@linuxprobe ~]# 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
再次尝试启动Apache网站服务程序就没有问题了:
[root@linuxprobe ~]# systemctl restart httpd
第5步:分别访问网站验证结果:
请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。
10.8 Apache的访问控制
我们还可以基于主机名、IP地址以及客户端特征做Apache网页资源的访问控制,常用的指令有:
Order(排序),Allow(允许),Deny(拒绝),Satisfy(满足)。
其中Order指令用于定义Allow或Deny起作用的顺序,分别实现了允许或者拒绝某个主机访问服务器网页资源。
匹配原则为:按顺序匹配规则并执行,若未匹配成功则执行后面的执行。
比如说"Order Allow,Deny"则代表着先将客户端与允许规则进行对比,若匹配成功则允许访问,反之则直接拒绝。
创建网站数据目录和首页文件:
[root@localhost ~]# mkdir /var/www/html/server [root@localhost ~]# echo "Successful" > /var/www/html/server/index.html
根据浏览器的变量特征,只允许IE浏览器访问本网站数据。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf //在大约129行的地方添加参数. <Directory "/var/www/html/server"> SetEnvIf User-Agent “Internet Explorer” ie=1 Order allow,deny Allow from env=ie
保存配置文件后记得重启服务(systemctl restart httpd),然后用Firefox浏览器尝试访问网站页面:
那么如果希望仅允许火狐浏览器访问本页面,请将配置文件修改为:
<Directory "/var/www/html/server">
SetEnvIf User-Agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</Directory>
根据来访源地址,仅限192.168.10.10的主机访问本网站。
此时我们就需要两台主机来完成实验了,请配置主机IP地址后能够互相通信。
主机名称 | 操作系统 | IP地址 |
本地主机 | 红帽RHEL7操作系统 | 192.168.10.10 |
远程主机 | 红帽RHEL7操作系统 | 192.168.10.20 |
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
//在大约129行的地方添加参数.
<Directory "/var/www/html/server">
SetEnvIf User-Agent “Internet Explorer” ie=1
Order allow,deny
Allow from env=ie
</Directory>
保存配置文件后记得重启服务(systemctl restart httpd),然后用Firefox浏览器尝试访问网站页面:
然后再使用远程主机(192.168.10.20)尝试访问页面,顺利的成功了: