一、apache網(wǎng)站服務(wù)程序httpd
apache基金會
http 協(xié)議
httpd 安裝的rpm軟件包名
httpd 服務(wù)名稱
#安裝服務(wù)
[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服務(wù)重啟并加入開機啟動項
[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
修改網(wǎng)站的發(fā)布目錄
[root@localhost conf]# vim /etc/httpd/conf/httpd.conf
119 DocumentRoot "/home/wwwroot"
#網(wǎng)站默認根目錄
#修改selinux安全上下文允許http訪問/home/wwwroot發(fā)布目錄
#先查看原始目錄的權(quán)限戳得到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表示修改上下文內(nèi)容,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/*
#讓設(shè)置立即生效
[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
虛擬主機:同時提供多個網(wǎng)站服務(wù)
- 基于IP
- 基于域名
- 基于端口號
基于IP的虛擬主機首先更改網(wǎng)卡配置文件添加多個IP后重啟網(wǎng)卡
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上下文針對各自發(fā)布目錄的限制進行添加
[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
#創(chuàng)建對應(yīng)網(wǎng)站家目錄及各自默認索引頁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修改對應(yīng)目錄的上下文后試驗成功
基于端口號的虛擬主機設(shè)置,涉及到selinux的域和上下文兩處設(shè)置
#先創(chuàng)建虛擬主機對應(yīng)的網(wǎng)站發(fā)布目錄及索引文件
[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
#添加虛擬主機添加監(jiān)聽的端口號
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 >
#修改對應(yīng)目錄的selinux上下文
#修改selinux的域放行6111、6222端口
#先查看默認的端口號http_port_t 對應(yīng)的端口號
[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服務(wù)后訪問正常
針對瀏覽器限制訪問例如:只允許火狐瀏覽器
#在配置文件中針對某個目錄添加代碼
<Directory "/var/www/html/server">
SetEnvif User-Agent "Firefox" ff=1 #設(shè)置環(huán)境變量起別名ff
Order Allow,Deny #設(shè)置規(guī)則,除了允許的其他全部拒絕
allow from env=ff #定義允許的條件
</Directory>
二、安全子系統(tǒng)selinux
SELinux(Security-Enhanced Linux)是美國國家安全局在Linux開源社區(qū)的幫助下開發(fā)的一個強制訪問控制(MAC,Mandatory Access Control)的安全子系統(tǒng)。RHEL 7系統(tǒng)使用SELinux技術(shù)的目的是為了讓各個服務(wù)進程都受到約束,使其僅獲取到本應(yīng)獲取的資源。
例如,您在自己的電腦上下載了一個美圖軟件,當您全神貫注地使用它給照片進行美顏的時候,它卻在后臺默默監(jiān)聽著瀏覽器中輸入的密碼信息,而這顯然不應(yīng)該是它應(yīng)做的事情(哪怕是訪問電腦中的圖片資源,都情有可原)。SELinux安全子系統(tǒng)就是為了杜絕此類情況而設(shè)計的,它能夠從多方面監(jiān)控違法行為:對服務(wù)程序的功能進行限制(SELinux域限制可以確保服務(wù)程序做不了出格的事情);對文件資源的訪問限制(SELinux安全上下文確保文件資源只能被其所屬的服務(wù)程序進行訪問)。
“SELinux域”和“SELinux安全上下文”稱為是Linux系統(tǒng)中的雙保險,系統(tǒng)內(nèi)的服務(wù)程序只能規(guī)規(guī)矩矩地拿到自己所應(yīng)該獲取的資源,這樣即便黑客入侵了系統(tǒng),也無法利用系統(tǒng)內(nèi)的服務(wù)程序進行越權(quán)操作。
[root@localhost wwwroot]# cat /etc/selinux/config
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced. #強制狀態(tài),管理服務(wù)程序
# permissive - SELinux prints warnings instead of enforcing. #警告模式只會將信息寫入日志
# disabled - No SELinux policy is loaded. #關(guān)閉狀態(tài)
SELINUX=enforcing
#查看selinux狀態(tài)
[root@localhost wwwroot]# getenforce
Enforcing
#臨時設(shè)置selinux狀態(tài)重啟后失效,0禁用,1啟用
[root@localhost wwwroot]# setenforce 1
查看selinux域
[root@localhost conf]# getsebool -a|grep http|grep homedir
httpd_enable_homedirs --> off
設(shè)置selinux域,參數(shù)P永久生效
[root@localhost conf]# setsebool -P httpd_enable_homedirs=on
selinux的上下文就是對文件目錄的權(quán)限戳進行管理