前面系列文章講解了Linux下通過文件傳輸、文件共享、郵件系統(tǒng)來分享和獲取資源牡拇,本文講解網(wǎng)絡(luò)資源獲取和共享的另外一種形式,通過Apache服務(wù)程序來提供Web服務(wù)谣旁。
本文先講解目前主流的Web服務(wù)程序以及各自的特點(diǎn)和優(yōu)勢,然后以Apache服務(wù)為例講解Linux下Web網(wǎng)站的部署滋早,并在部署過程中穿插講解SELinux的使用榄审。最后在以示例講解Apache的虛擬主機(jī)功能及訪問控制。
一杆麸、Web服務(wù)程序分類
我們平時在互聯(lián)網(wǎng)上訪問的網(wǎng)站服務(wù)就是Web服務(wù)瘟判,比如我們常用的百度網(wǎng)站,他就是一個Web網(wǎng)站角溃。Web網(wǎng)絡(luò)服務(wù),一般是指允許用戶通過瀏覽器訪問到其中各種資源的服務(wù)篮撑。
Web網(wǎng)絡(luò)服務(wù)是一種被動訪問的服務(wù)程序减细,當(dāng)接入到互聯(lián)網(wǎng)中的用戶主機(jī)發(fā)出請求后,Web服務(wù)才會響應(yīng)并通過HTTP或HTTPS把請求的內(nèi)容回傳給用戶赢笨。示意圖如下:
目前提供Web服務(wù)的程序有:IIS未蝌、Apache、Ngnix等茧妒。
1.1 IIS
IIS(Internet Information Services):互聯(lián)網(wǎng)信息服務(wù)萧吠,是Windows系統(tǒng)中默認(rèn)的Web服務(wù)程序。它是一款帶圖形化界面的網(wǎng)站管理工具桐筏,不僅提供Web網(wǎng)站服務(wù)纸型,還可以提供FTP、SMTP等服務(wù)梅忌,功能豐富狰腌。但是由于它是用在Windows系統(tǒng)中,因此不介紹它牧氮。
1.2 Apache
Apache程序是目前市場上占有率很高的Web服務(wù)程序之一琼腔,其特點(diǎn)是跨平臺、安全性高踱葛、API擴(kuò)展簡單可靠丹莲。
Apache服務(wù)程序可以運(yùn)行在Linux光坝、UNIX、 Windows系統(tǒng)中甥材,支持基于IP盯另、域名及端口號的虛擬主機(jī)功能,支持多種認(rèn)證方式擂达,集成有代理服務(wù)器模塊土铺、安全Socket層(SSL),能夠?qū)崟r監(jiān)視服務(wù)狀態(tài)與定制日志消息板鬓,有著各類豐富的模塊支持悲敷。
由于它是RHEL5、6俭令、7中默認(rèn)的Web服務(wù)程序后德,并且作為老牌的Web服務(wù)程序,市場占用率還是很高的抄腔,因此本文主要以Apache為例進(jìn)行Web服務(wù)的演示瓢湃。
1.3 Ngnix
2004年,為俄羅斯知名門戶站點(diǎn)開發(fā)的Web服務(wù)程序Nginx橫空出世赫蛇。它作為一款輕量級的網(wǎng)站服務(wù)軟件绵患,因其穩(wěn)定性和豐富的功能而快速占領(lǐng)服務(wù)器市場。
它因系統(tǒng)資源消耗低悟耘、并發(fā)能力強(qiáng)的特點(diǎn)落蝙,在國內(nèi)受到諸如新浪、騰訊暂幼、網(wǎng)易等門戶網(wǎng)站的青睞筏勒。Ngnix作為后起之秀,截至本文寫作時為止市場占有率幾乎與Apache齊平旺嬉,以后有機(jī)會再單獨(dú)對其進(jìn)行演示和講解管行。
二、Apache安裝及操作案例
2.1 Apache安裝及配置
2.1.1 Apache安裝
Apache是RHEL7默認(rèn)的web程序邪媳,以包含在默認(rèn)的安裝鏡像中捐顷,因此可以直接掛載安裝鏡像直接安裝,也可以用遠(yuǎn)程Yum倉庫進(jìn)行安裝雨效。
需要注意的是套菜,在CentOS和RHEL上,Apache軟件包和服務(wù)稱為httpd而非apache设易。
- 安裝Apache
先檢查Apache是否安裝逗柴,如果未安裝,通過yum倉庫安裝即可
[root@apache ~]# rpm -q httpd
package httpd is not installed
[root@apache ~]# yum install httpd
Loaded plugins: fastestmirror, langpacks
...省略部分內(nèi)容
Complete!
[root@apache ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64
[root@apache ~]#
安裝完成后顿肺,httpd服務(wù)是沒有啟動的戏溺,還需要將其啟動渣蜗,并加入到開機(jī)啟動中
[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@apache ~]#
此時在虛擬機(jī)Centos內(nèi)部,打開瀏覽器旷祸,即可看到apache部署成功
如果要讓外部機(jī)器(如宿主機(jī))訪問此Web耕拷,則需要對防火墻進(jìn)行設(shè)置,當(dāng)然直接關(guān)閉防火墻也可以托享,不過這樣存在風(fēng)險骚烧。
根據(jù)前文講解的防火墻知識,打開HTTP和HTTPS的80和443端口
[root@apache ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@apache ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@apache ~]# firewall-cmd --reload
success
[root@apache ~]#
這樣宿主機(jī)上也可以直接訪問該Web闰围,如下圖
- 查看httpd版本信息:
[root@apache ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Aug 8 2019 11:41:18
[root@apache ~]#
- 查看httpd運(yùn)行狀態(tài)
[root@apache ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since Mon 2020-02-10 10:52:35 CST; 7min ago
Docs: man:httpd(8)
man:apachectl(8)
...省略部分內(nèi)容
2.1.2 Apache配置
只有掌握httpd服務(wù)相關(guān)配置文件以及各自的用途赃绊,才能更好地對其進(jìn)行配置了。
- 主要配置文件
httpd服務(wù)程序默認(rèn)主要配置文件(這些默認(rèn)配置是可以進(jìn)行修改的)如下:
用途 | 文件 |
---|---|
服務(wù)目錄 | /etc/httpd |
主配置文件 | /etc/httpd/conf/httpd.conf |
網(wǎng)站數(shù)據(jù)目錄 | /var/www/html |
訪問日志 | /var/log/httpd/access_log |
錯誤日志 | /var/log/httpd/error_log |
主配置文件為:/etc/httpd/conf/httpd.conf羡榴,在此文件中存存在三種類型的類型:注釋行信息碧查、全局配置、區(qū)域配置校仑。
從主配置文件中截取部分進(jìn)行說明如下:
全局配置參數(shù)
全局配置參數(shù)就是一種全局性的配置參數(shù)忠售,可作用于對所有的子站點(diǎn),既保證了子站點(diǎn)的正常訪問迄沫,也有效減少了頻繁寫入重復(fù)參數(shù)的工作量稻扬。
區(qū)域配置參數(shù)
區(qū)域配置參數(shù)則是單獨(dú)針對于每個獨(dú)立的子站點(diǎn)進(jìn)行設(shè)置的。
- 主要參數(shù)
httpd服務(wù)程序最常用的參數(shù)如下
參數(shù) | 用途 |
---|---|
ServerRoot | 服務(wù)目錄 |
ServerAdmin | 管理員郵箱 |
User | 運(yùn)行服務(wù)的用戶 |
Group | 運(yùn)行服務(wù)的用戶組 |
ServerName | 網(wǎng)站服務(wù)器的域名 |
DocumentRoot | 網(wǎng)站數(shù)據(jù)目錄 |
Directory | 網(wǎng)站數(shù)據(jù)目錄的權(quán)限 |
Listen | 監(jiān)聽的 IP 地址與端口號 |
DirectoryIndex | 默認(rèn)的索引頁頁面 |
ErrorLog | 錯誤日志文件 |
CustomLog | 訪問日志文件 |
Timeout | 網(wǎng)頁超時時間羊瘩,默認(rèn)為 300 秒 |
- 案例演示:修改網(wǎng)站首頁內(nèi)容
分析:既然上表中提到DocumentRoot是用于定義網(wǎng)站數(shù)據(jù)的保存路徑腐螟,那我們查看下其參數(shù)的默認(rèn)值,然后把對應(yīng)網(wǎng)頁內(nèi)容放入該目錄困后,就可以實(shí)現(xiàn)網(wǎng)頁替換。靜態(tài)網(wǎng)頁名稱一般為index.html衬廷。
打開主配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
查看到看默認(rèn)網(wǎng)站數(shù)據(jù)目錄為:/var/www/html摇予。默認(rèn)該目錄為空,向目錄中創(chuàng)建index.html文件吗跋,并通過瀏覽器進(jìn)行查看侧戴。
如果忘記VI或VIM編輯器使用方法的,請返回復(fù)習(xí)前面的文章:“l(fā)inux入門系列4--vi&vim編輯器”跌宛。
[root@apache ~]# ll /var/www/html/
total 0
[root@apache ~]# echo "hi,this is heimatengyun's blog">/var/www/html/index.html
[root@apache ~]# ll /var/www/html/
total 4
-rw-r--r--. 1 root root 31 Feb 10 11:59 index.html
[root@apache ~]#
在宿主機(jī)通過瀏覽器再次查看酗宋,即可查看剛才新加的網(wǎng)頁文件內(nèi)容
通過這樣的操作,我們應(yīng)該明白疆拘,如果你已經(jīng)做好你的網(wǎng)頁內(nèi)容蜕猫,只需要往/var/www/html/目錄存放,即可實(shí)現(xiàn)網(wǎng)站的訪問哎迄。
但實(shí)際工作中回右,有可能我們會更換網(wǎng)站目錄隆圆,把網(wǎng)站內(nèi)容存放到一個指定的目錄中,而非默認(rèn)的/var/www/html/翔烁。這該怎么做呢渺氧?這就會涉及到SELinux的問題,因此請繼續(xù)下邊的實(shí)驗(yàn)蹬屹。
2.2 SELinux相關(guān)知識
2.2.1 問題引出
假設(shè)我們把系統(tǒng)根目錄下的website目錄作為網(wǎng)站目錄侣背,我們進(jìn)行如下操作:
(1)創(chuàng)建自定義網(wǎng)站目錄和網(wǎng)頁文件
[root@apache /]# mkdir /website
[root@apache /]# cd /website/
[root@apache website]# echo "this is my custom directory">index.html
[root@apache website]# ll
total 4
-rw-r--r--. 1 root root 28 Feb 10 12:21 index.html
[root@apache website]#
(2)主配置文件中配置目錄
[root@apache website]# vim /etc/httpd/conf/httpd.conf
主要修改DocumentRoot參數(shù)指定網(wǎng)站目錄為/website,同時修改定義目錄權(quán)限的區(qū)域參數(shù)Directory。
(3)訪問驗(yàn)證
配置完成后慨默,重啟httpd服務(wù)
[root@apache website]# systemctl restart httpd
在宿主機(jī)中瀏覽器查看
見鬼贩耐,怎么顯示的還是httpd默認(rèn)的頁面呢?
一般情況只有網(wǎng)站的首頁頁面文件不存在或用戶權(quán)限不足時业筏,才顯示httpd默認(rèn)的頁面憔杨。比如后文的4.1,設(shè)置禁止的ip訪問后蒜胖,就直接跳轉(zhuǎn)到此頁面消别。
我們在加上文件名試下呢
可以看到提示權(quán)限不足,看到這里台谢,你應(yīng)該想到是SELinux在搞鬼寻狂。為了驗(yàn)證一下,讓我們把SELinux關(guān)閉后在試試看
[root@apache website]# getenforce
Enforcing
[root@apache website]# setenforce 0
[root@apache website]# getenforce
Permissive
[root@apache website]#
再次在宿主機(jī)瀏覽器訪問
發(fā)現(xiàn)可以訪問了朋沮,那說明果然是SELinux在搞鬼蛇券。但生產(chǎn)環(huán)境不建議直接關(guān)閉SELinux,接下來我們就來看看SELinux相關(guān)的知識樊拓,掌握之后我們在來開啟SELinux并進(jìn)行設(shè)置纠亚,使其在SELinux開啟的情況下依然可以訪問我們Web網(wǎng)站。
2.2.2 SELinux相關(guān)知識
在前面的文件傳輸筋夏、文件共享蒂胞、郵件系統(tǒng)的文章中或多或少都講解了SELinux相關(guān)的知識,本文再次集中總結(jié)一下条篷。
2.2.2.1 SELinux概述
SELinux(Security-Enhanced Linux)是美國國家安全局在Linux開源社區(qū)的幫助下開發(fā)的 一個強(qiáng)制訪問控制(MAC骗随,Mandatory Access Control)的安全子系統(tǒng)。
RHEL7系統(tǒng)使用SELinux技術(shù)的目的是為了讓各個服務(wù)進(jìn)程都受到約束赴叹,使其僅獲取到本應(yīng)獲取的資源鸿染。它的重要性不言而喻,舉個例子乞巧,比如你從網(wǎng)上下載了一個軟件用于編輯文檔涨椒,但是這個軟件“不老實(shí)”,當(dāng)你正在努力碼字的同時,它卻悄悄監(jiān)視你在各個網(wǎng)站登錄時輸入的密碼丢烘,然后悄悄上傳到黑客指定的地址柱宦。SELinux就是為了防止這種情況的發(fā)生而開發(fā)的,從而更好的保護(hù)你的電腦播瞳。
SELinux具體從兩個方面進(jìn)行限制:SELinux域和上下文掸刊。
SELinux域?qū)Ψ?wù)程序的功能進(jìn)行限制,可以確保服務(wù)程序做不了出格的事情赢乓。
SELinux上下文對文件資源的訪問限制忧侧,確保文件資源 只能被其所屬的服務(wù)程序進(jìn)行訪問。
開啟SELinux后牌芋,這樣就等于開啟了系統(tǒng)雙保險蚓炬,系統(tǒng)內(nèi)的服務(wù)程序只能規(guī)規(guī)矩矩地拿到自己所應(yīng)該獲取的資源,這樣即便黑客入侵了系 統(tǒng)躺屁,也無法利用系統(tǒng)內(nèi)的服務(wù)程序進(jìn)行越權(quán)操作肯夏。
SELinux配置有三種模式,如下:
參數(shù)值 | 作用 |
---|---|
enforcing | 強(qiáng)制啟用安全策略模式犀暑,將攔截服務(wù)的不合法請求 |
permissive | 遇到服務(wù)越權(quán)訪問時驯击,只發(fā)出警告而不強(qiáng)制攔截 |
disabled | 對于越權(quán)的行為不警告也不攔截 |
正如2.2.1中,通過setenforce 0命令將SELinux關(guān)閉后耐亏,我們的Web就可以訪問了徊都,就是這個道理。
SELinux配置文件對應(yīng)為:/etc/selinux/config 广辰。
[root@apache website]# cat /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
[root@apache website]#
該文件中的值定義的是SELinux默認(rèn)的運(yùn)行狀態(tài)暇矫,也就是系統(tǒng)重啟后的狀態(tài),因此修改它不會立即生效择吊。
2.2.2 SELinux相關(guān)命令
- getenforce命令
用于查看SELinux的運(yùn)行模式
[root@apache website]# getenforce
Enforcing
[root@apache website]#
- setenforece命令
setenforce 0或1李根,用于禁用(0)或啟用(1)SELinux,注意這個命令的修改只是臨時的几睛,系統(tǒng)重啟后就會失效房轿。
[root@apache website]# getenforce
Enforcing
[root@apache website]# setenforce 0
[root@apache website]# getenforce
Permissive
[root@apache website]
因此,如果原來系統(tǒng)的SELinux是關(guān)閉的枉长,如果要開啟它,需要在配置文件中將進(jìn)行設(shè)置SELINUX=enforcing琼讽,并同時要通過setenforce 1進(jìn)行設(shè)置必峰。這樣即使系統(tǒng)重啟,依然生效钻蹬。
- semanage命令
用于設(shè)置SELinux上下文的值吼蚁,管理SELinux的策略。
語法格式:semanage [選項(xiàng)] [文件]”
參數(shù)
參數(shù) | 作用 |
---|---|
-l | 查詢 |
-a | 添加 |
-m | 修改 |
-d | 刪除 |
具體使用細(xì)節(jié)可以通過幫助命令man semanage進(jìn)行查看。
- getseboll命令
該命令用于查看SELinux域相關(guān)的安全策略肝匆。
語法格式:getsebool -a(其中-a參數(shù)表示查看所有域相關(guān)的安全策略)
[root@apache ~]# getsebool
usage: getsebool -a or getsebool boolean...
[root@apache ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
...省略部分內(nèi)容
其中粒蜈,on表示允許狀態(tài),off表示禁止?fàn)顟B(tài)旗国。
- setsebool命令
該命令用于修改SELinux域相關(guān)的策略規(guī)則枯怖。
語法格式:setsebool -P 規(guī)則項(xiàng)=on或off (其中-P參數(shù)表示立即讓修改永久生效)
[root@apache ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> off
[root@apache ~]# setsebool -P xdm_write_home=on
[root@apache ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> on
[root@apache ~]# setsebool -P xdm_write_home=off
[root@apache ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> off
[root@apache ~]# getsebool xdm_write_home
xdm_write_home --> off
以上實(shí)驗(yàn),我們先查看grep xdm_write_home狀態(tài)能曾,然后將其改為on度硝,查看修改是否生效,然后再將其改回原值寿冕。查看某一項(xiàng)的值可以通過正則匹配蕊程,也可以直接通過該具體項(xiàng)獲取。
有了以上這些儲備知識驼唱,我們再繼續(xù)完成開啟SELinux的情況下讓我們自定義目錄的網(wǎng)站也能訪問藻茂。
2.3 Apache案例1:修改網(wǎng)站目錄
通過上邊的講解,我們大概已經(jīng)知道了前面的問題就是SELinux上下文引起玫恳,因此我們通過以下命令來查看下默認(rèn)的/var/www/html和我們自定義的/website他們的SELinux上下文的值究竟有什么不同
[root@apache website]# ll -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@apache website]#
我們通過ll命令的-Z參數(shù)進(jìn)行查看辨赐,很明顯就看到了不同。(-Z參數(shù)專門用于查看SELinux域相關(guān)設(shè)置)
可以看到在文件上設(shè)置的SELinux安全上下文是由用戶段纽窟、角色段以及類型段等多個信息項(xiàng)共同組成的肖油。以上示例中,用戶段system_u代表系統(tǒng)進(jìn)程的身份臂港,角色段object_r代表文件目錄的角色森枪, 類型段httpd_sys_content_t代表網(wǎng)站服務(wù)的系統(tǒng)文件。
搞清楚區(qū)別后审孽,我們直接用前邊講解的semanage命令添加SELinux安全上下文即可县袱,使其目錄及里邊的所有文件能夠被httpd服務(wù)程序訪問到
[root@apache website]# ll -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@apache website]# semanage fcontext -a -t httpd_sys_content_t /website
[root@apache website]# semanage fcontext -a -t httpd_sys_content_t /website/*
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@apache website]# restorecon -Rv /website/
restorecon reset /website context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /website/index.html context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@apache website]#
需要注意的是,設(shè)置上下文值后并非立即生效佑力,還需要執(zhí)行restorecon才會生效式散,過程如上,請自行體驗(yàn)打颤。
經(jīng)過這樣設(shè)置后暴拄,就可以正常訪問了。
本案例演示了SELinux上下文對資源的限制導(dǎo)致的web不能訪問编饺,以及設(shè)置上下文值乖篷。
2.4 Apache案例2:用戶個人主頁功能
上一個案例演示了SELinux上下文的設(shè)置,本案例再通過Apache的個人用戶主頁功能來演示SELinux域的設(shè)置透且。
假設(shè)有這樣有一個需求:需要為Linux每一位系統(tǒng)用戶建立一個獨(dú)立的網(wǎng)站撕蔼。我們該怎么做呢?
方法有很多,httpd服務(wù)程序提供的個人用戶主頁功能完全可以實(shí)現(xiàn)這個需求鲸沮。它可以讓系統(tǒng)內(nèi)所有的用戶在自己的家目錄中管理個人的網(wǎng)站琳骡,而且訪問起來也非常容易。
步驟如下:
2.4.1 開啟個人主頁功能
個人用戶主頁功能配置文件為:/etc/httpd/conf.d/userdir.conf 讼溺。主要修改2處:注釋掉UserDir disabled使其開啟個人主頁功能楣号,同時設(shè)置個人網(wǎng)站目錄,取消UserDir public_html 前的注釋即可肾胯。
[root@apache website]# vim /etc/httpd/conf.d/userdir.conf
2.4.2 創(chuàng)建網(wǎng)站目錄及文件
在用戶家目錄中建立用于保存網(wǎng)站數(shù)據(jù)的目錄及首頁面文件竖席。
[root@apache website]# useradd heima
[root@apache website]# echo "123456" | passwd --stdin heima
Changing password for user heima.
passwd: all authentication tokens updated successfully.
[root@apache website]# su - heima
[heima@apache ~]$ ls
[heima@apache ~]$ pwd
/home/heima
[heima@apache ~]$ mkdir public_html
[heima@apache ~]$ echo "this is heima's website">public_html/index.html
[heima@apache ~]$ ll public_html/
total 4
-rwxrwxr-x. 1 heima heima 24 Feb 10 16:11 index.html
[heima@apache ~]$ chmod -Rf 775 /home/heima/
另外,還需要把家目錄的權(quán)限修改為755敬肚,保證其他人也有權(quán)限讀取里面的內(nèi)容毕荐。
2.4.3 設(shè)置SELinux安全域策略
文章最開始已經(jīng)設(shè)置了防火墻,此時我們大致一想艳馒,應(yīng)該是可以訪問個人網(wǎng)頁了吧憎亚。我們先切換到root用戶,重啟httpd服務(wù)弄慰,然后進(jìn)行訪問第美,結(jié)果很不幸,這次又提示權(quán)限不足陆爽。
[root@apache ~]# systemctl restart httpd
訪問地址為ip/~用戶名什往,其中的波浪號是必需的,而且網(wǎng)址慌闭、波浪號别威、用戶名之間沒有空格。
我們回想一下驴剔,這個現(xiàn)象和案例1遇到的癥狀有幾分相似省古,當(dāng)時是因?yàn)槲覀冃陆艘粋€目錄/website,而沒有設(shè)置SELinux上下文所導(dǎo)致丧失。那這次是不是也是因?yàn)镾ELinux的上下文導(dǎo)致呢豺妓?
很顯然不是,httpd服務(wù)程序在提供個人用戶主頁功能時布讹,該用戶的網(wǎng)站數(shù)據(jù)目錄本身就應(yīng)該是存放到與這位用戶對應(yīng)的家目錄中的琳拭,所以應(yīng)該不需要修改家目錄的 SELinux 安全上下文,如果你實(shí)在不放心描验,也可以執(zhí)行如下命令驗(yàn)證:
[heima@apache ~]$ ll -Z /home/heima/
drwxrwxr-x. heima heima unconfined_u:object_r:httpd_user_content_t:s0 public_html
[heima@apache ~]$
對吧白嘁,很明顯不是SELinux上下文導(dǎo)致,因?yàn)閔ttpd默認(rèn)就給用戶目錄添加了上下文值挠乳。
那是什么原因呢权薯,我們還是按照之前的方法來排查,先把SELinux關(guān)閉睡扬,然后在此訪問盟蚣。結(jié)果可以正常訪問了,那說明就是SELinux的問題卖怜,再回想我們前面提到的SELinux通過上下文和域這兩個方面進(jìn)行限制和保護(hù)屎开。既然上下文沒問題,因此自然而然马靠,我們應(yīng)該知道這就是SELinux域?qū)е碌摹?/p>
Linux 域確保服務(wù)程序不能執(zhí)行違規(guī)的操作奄抽,只能本本分分地為用戶提供服務(wù)。httpd 服務(wù)中突然開啟的這項(xiàng)個人用 戶主頁功能到底有沒有被SELinux域默認(rèn)允許呢甩鳄?
給個人主頁相關(guān)的域規(guī)則項(xiàng)為:httpd_enable_homedirs逞度,如果不知道記住即可。我們看下他的狀態(tài)確實(shí)為off妙啃,因此將其改為on就可以了档泽,切換到root用戶進(jìn)行操作
[root@apache ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@apache ~]# setsebool httpd_enable_homedirs=on
[root@apache ~]#
此時,我們再次訪問揖赴,即可正常訪問了馆匿。
2.4.4 設(shè)置需要用戶密碼才能登陸
有時候我們不希望別人直接就可以訪問個人網(wǎng)站,需要通過身份認(rèn)證才能進(jìn)行查看燥滑,這就需要在網(wǎng)站中添加口令功能來實(shí)現(xiàn)渐北。
(1)生成密碼數(shù)據(jù)庫
[root@apache ~]# htpasswd -c /etc/httpd/passed heima
New password:
Re-type new password:
Adding password for user heima
[root@apache ~]#
注意,文件名任意取铭拧,在下一步中保持一致即可赃蛛,-c參數(shù)表示第一次生成。設(shè)置密碼為888888羽历,以區(qū)別之前heima用戶登錄系統(tǒng)的密碼123456焊虏,這樣做的目的是為了區(qū)分說明不此處設(shè)置的密碼不是用戶登錄系統(tǒng)的密碼。
(2)修改配置文件
[root@apache ~]# vim /etc/httpd/conf.d/userdir.conf
<Directory "/home/*/public_html">
# AllowOverride FileInfo AuthConfig Limit Indexes
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# Require method GET POST OPTIONS
AllowOverride all
authuserfile "/etc/htppd/passed"
authname "heima website"
authtype basic
require user heima
Require method GET POST OPTIONS
</Directory>
將文末的內(nèi)容注釋并按如下進(jìn)行修改即可
修改完成后秕磷,重啟httpd
[root@apache ~]# systemctl restart httpd
再次訪問诵闭,就要求輸入密碼了。
此時輸入用戶名heima澎嚣,以及剛才創(chuàng)建的888888密碼(注意不是heima登錄系統(tǒng)的密碼)即可登錄網(wǎng)站疏尿。
這個案例演示了SELinux域?qū)M(jìn)程的控制,以及如何對其進(jìn)行設(shè)置易桃。
通過案例1和案例2褥琐,不僅完整演示了Apache常用操作,還特別演示了生產(chǎn)級別的SELinux域和上下文的設(shè)置晤郑。
下一篇文章繼續(xù)演示Apache的虛擬主機(jī)功能和訪問控制的實(shí)現(xiàn)方法敌呈。