一、apache网站服务程序httpd
apache基金会
http 协议
httpd 安装的rpm软件包名
httpd 服务名称
#安装服务
[root@localhost ~]# yum install httpd -y
#清空防火墙配置并保存
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
#将httpd服务重启并加入开机启动项
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
主配置文件/etc/httpd/conf/httpd.conf
修改网站的发布目录
[root@localhost conf]# vim /etc/httpd/conf/httpd.conf
119 DocumentRoot "/home/wwwroot"
#网站默认根目录
#修改selinux安全上下文允许http访问/home/wwwroot发布目录
#先查看原始目录的权限戳得到selinux安全上下文信息
[root@localhost wwwroot]# ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
#安全上下文httpd_sys_content_t
#semanage管理selinux上下文和域,fcontext表示修改上下文内容,a表示修改,t跟具体的值,最后的目录不能带斜杠,否则无法生效,要对目录及目录下所有文件依次修改
[root@localhost wwwroot]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@localhost wwwroot]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
#让设置立即生效
[root@localhost wwwroot]# 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
虚拟主机:同时提供多个网站服务
- 基于IP
- 基于域名
- 基于端口号
基于IP的虚拟主机首先更改网卡配置文件添加多个IP后重启网卡
IPADDR0=192.168.10.10
IPADDR1=192.168.10.20
IPADDR2=192.168.10.30
[root@localhost ~]# systemctl restart network
#修改http主配置文件添加虚拟主机信息
<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 www.linuxprobe.com
<Directory "/home/wwwroot/20">
allowoverride none
require all granted
</Directory>
</VirtualHost >
<VirtualHost 192.168.10.30>
DocumentRoot "/home/wwwroot/30"
Servername www.linuxprobe.com
<Directory "/home/wwwroot/30">
allowoverride none
require all granted
</Directory>
</VirtualHost >
#selinux上下文针对各自发布目录的限制进行添加
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*
[root@localhost ~]# restorecon -Rv /home/wwwroot
基于域名的虚拟主机首先需要编辑主机的/etc/hosts文件
#hosts添加语句
192.168.10.10 www.linuxprobe.com bbs.linuxprobe.com tech.linuxprobe.com
#创建对应网站家目录及各自默认索引页index.html
[root@localhost ~]# mkdir -p /home/wwwroot/{www,bbs,tech}
[root@localhost ~]# echo "wwwwww">/home/wwwroot/www/index.html
[root@localhost ~]# echo "bbsbbs">/home/wwwroot/bbs/index.html
[root@localhost ~]# echo "techtech">/home/wwwroot/tech/index.html
#修改主配置文件添加虚拟主机
<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 >
#同样在selinux修改对应目录的上下文后试验成功
基于端口号的虚拟主机设置,涉及到selinux的域和上下文两处设置
#先创建虚拟主机对应的网站发布目录及索引文件
[root@localhost ~]# mkdir -p /home/wwwroot/{6111,6222}
[root@localhost ~]# echo "61111">/home/wwwroot/6111/index.html
[root@localhost ~]# echo "62222">/home/wwwroot/6222/index.html
#添加虚拟主机添加监听的端口号
Listen 80
Listen 6111
Listen 6222
<VirtualHost 192.168.10.10:6111>
DocumentRoot "/home/wwwroot/6111"
Servername bbs.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 >
#修改对应目录的selinux上下文
#修改selinux的域放行6111、6222端口
#先查看默认的端口号http_port_t 对应的端口号
[root@localhost ~]# 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
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 6111
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 6222
#重启httpd服务后访问正常
针对浏览器限制访问例如:只允许火狐浏览器
#在配置文件中针对某个目录添加代码
<Directory "/var/www/html/server">
SetEnvif User-Agent "Firefox" ff=1 #设置环境变量起别名ff
Order Allow,Deny #设置规则,除了允许的其他全部拒绝
allow from env=ff #定义允许的条件
</Directory>
二、安全子系统selinux
SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。RHEL 7系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
例如,您在自己的电脑上下载了一个美图软件,当您全神贯注地使用它给照片进行美颜的时候,它却在后台默默监听着浏览器中输入的密码信息,而这显然不应该是它应做的事情(哪怕是访问电脑中的图片资源,都情有可原)。SELinux安全子系统就是为了杜绝此类情况而设计的,它能够从多方面监控违法行为:对服务程序的功能进行限制(SELinux域限制可以确保服务程序做不了出格的事情);对文件资源的访问限制(SELinux安全上下文确保文件资源只能被其所属的服务程序进行访问)。
“SELinux域”和“SELinux安全上下文”称为是Linux系统中的双保险,系统内的服务程序只能规规矩矩地拿到自己所应该获取的资源,这样即便黑客入侵了系统,也无法利用系统内的服务程序进行越权操作。
[root@localhost wwwroot]# cat /etc/selinux/config
# 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
#查看selinux状态
[root@localhost wwwroot]# getenforce
Enforcing
#临时设置selinux状态重启后失效,0禁用,1启用
[root@localhost wwwroot]# setenforce 1
查看selinux域
[root@localhost conf]# getsebool -a|grep http|grep homedir
httpd_enable_homedirs --> off
设置selinux域,参数P永久生效
[root@localhost conf]# setsebool -P httpd_enable_homedirs=on
selinux的上下文就是对文件目录的权限戳进行管理