在linux/CentOS使用Apache服務部署靜態網站(包括SELinux策略)

網站服務程序
1970年,作爲互聯網前身的ARPANET(阿帕網)已初具雛形,並開始向非軍用部門開放,許多大學和商業部門開始接入。雖然彼時阿帕網的規模(只有4臺主機聯網運行)還不如現在的局域網成熟,但是它依然爲網絡技術的進步打下了紮實的基礎。

想必我們大多數人都是通過訪問網站而開始接觸互聯網的吧。我們平時訪問的網站服務就是Web網絡服務,一般是指允許用戶通過瀏覽器訪問到互聯網中各種資源的服務。如圖所示,Web網絡服務是一種被動訪問的服務程序,即只有接收到互聯網中其他主機發出的請求後纔會響應,最終用於提供服務程序的Web服務器會通過HTTP(超文本傳輸協議)或HTTPS(安全超文本傳輸協議)把請求的內容傳送給用戶。

目前能夠提供Web網絡服務的程序有IIS、Nginx和Apache等。其中,IIS(Internet Information Services,互聯網信息服務)是Windows系統中默認的Web服務程序,這是一款圖形化的網站管理工具,不僅可以提供Web網站服務,還可以提供FTP、NMTP、SMTP等服務。但是,IIS只能在Windows系統中使用.

在這裏插入圖片描述

2004年10月4日,爲俄羅斯知名門戶站點而開發的Web服務程序Nginx橫空出世。Nginx程序作爲一款輕量級的網站服務軟件,因其穩定性和豐富的功能而快速佔領服務器市場,但Nginx最被認可的還當是系統資源消耗低且併發能力強,因此得到了國內諸如新浪、網易、騰訊等門戶站的青睞。本書將在第20章講解Nginx服務程序。

Apache程序是目前擁有很高市場佔有率的Web服務程序之一,其跨平臺和安全性廣泛被認可且擁有快速、可靠、簡單的API擴展。圖所示爲Apache服務基金會的著名Logo,它的名字取自美國印第安人的土著語,寓意着擁有高超的作戰策略和無窮的耐性。Apache服務程序可以運行在Linux系統、UNIX系統甚至是Windows系統中,支持基於IP、域名及端口號的虛擬主機功能,支持多種認證方式,集成有代理服務器模塊、安全Socket層(SSL),能夠實時監視服務狀態與定製日誌消息,並有着各類豐富的模塊支持。

在這裏插入圖片描述
但是Apache程序作爲老牌的Web服務程序,一方面在Web服務器軟件市場具有相當高的佔有率。
下面準備部署Apache服務
安裝Apache
yum install -y httpd
在這裏插入圖片描述

啓動並設置開機自啓在這裏插入圖片描述
在這裏插入圖片描述
設置防火牆
在這裏插入圖片描述
已成功啓動並訪問在這裏插入圖片描述

配置服務文件參數
需要提醒大家的是,前文介紹的httpd服務程序的安裝和運行,僅僅是httpd服務程序的一些皮毛,我們依然有很長的道路要走。在Linux系統中配置服務,其實就是修改服務的配置文件,因此,還需要知道這些配置文件的所在位置以及用途,httpd服務程序的主要配置文件及存放位置。

                         Linux系統中的配置文件

服務目錄 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
網站數據目錄 /var/www/html
訪問日誌 /var/log/httpd/access_log
錯誤日誌 /var/log/httpd/error_log
大家在首次打開httpd服務程序的主配置文件,可能會嚇一跳—竟然有353行!這得至少需要一週的時間才能看完吧?!但是在這個配置文件中,所有以井號(#)開始的行都是註釋行,其目的是對httpd服務程序的功能或某一行參數進行介紹,我們不需要逐行研究這些內容。

在httpd服務程序的主配置文件中,存在三種類型的信息:註釋行信息、全局配置、區域配置,如圖所示。
在這裏插入圖片描述
全局配置參數就是一種全局性的配置參數,可作用於對所有的子站點,既保證了子站點的正常訪問,也有效減少了頻繁寫入重複參數的工作量。區域配置參數則是單獨針對於每個獨立的子站點進行設置的。就像在大學食堂裏面打飯,食堂負責打飯的阿姨先給每位同學來一碗標準大小的白飯(全局配置),然後再根據每位同學的具體要求盛放他們想吃的菜(區域配置)。在httpd服務程序主配置文件中,最爲常用的參數如表

配置httpd服務程序時最常用的參數以及用途描述

ServerRoot 服務目錄
ServerAdmin 管理員郵箱
User 運行服務的用戶
Group 運行服務的用戶組
ServerName 網站服務器的域名
DocumentRoot 網站數據目錄
Listen 監聽的IP地址與端口號
DirectoryIndex 默認的索引頁頁面
ErrorLog 錯誤日誌文件
CustomLog 訪問日誌文件
Timeout 網頁超時時間,默認爲300秒

DocumentRoot參數用於定義網站數據的保存路徑,其參數的默認值是把網站數據存放到/var/www/html目錄中;而當前網站普遍的首頁面名稱是index.html,因此可以向/var/www/html目錄中寫入一個文件,替換掉httpd服務程序的默認首頁面,該操作會立即生效。

在執行上述操作之後,再在瀏覽器中刷新httpd服務程序,可以看到該程序的首頁面內容已經發生了改變,如圖所示。
在這裏插入圖片描述
在這裏插入圖片描述

在默認情況下,網站數據是保存在/var/www/html目錄中,而如果想把保存網站數據的目錄修改爲/web目錄,該怎麼操作呢?

第1步:建立網站數據的保存目錄,並創建首頁文件。

mkdir /web
echo “The New Web Directory” > /web/index.html
在這裏插入圖片描述
第2步:打開httpd服務程序的主配置文件,將約第119行用於定義網站數據保存路徑的參數DocumentRoot修改爲/web,同時還需要將約第124行用於定義目錄權限的參數Directory後面的路徑也修改爲/web。配置文件修改完畢後即可保存並退出。在這裏插入圖片描述
在這裏插入圖片描述
重啓服務
在這裏插入圖片描述
第3步:重新啓動httpd服務程序並驗證效果,瀏覽器刷新頁面後的內容如圖10-6所示。奇怪!爲什麼看到了httpd服務程序的默認首頁面?按理來說,只有在網站的首頁面文件不存在或者用戶權限不足時,才顯示httpd服務程序的默認首頁面。我們在嘗試訪問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域限制可以確保服務程序做不了出格的事情);對文件資源的訪問限制(SELinux安全上下文確保文件資源只能被其所屬的服務程序進行訪問)。

“SELinux域”和“SELinux安全上下文”稱爲是Linux系統中的雙保險,系統內的服務程序只能規規矩矩地拿到自己所應該獲取的資源,這樣即便黑客入侵了系統,也無法利用系統內的服務程序進行越權操作。但是,非常可惜的是,SELinux服務比較複雜,配置難度也很大,加之很多運維人員對這項技術理解不深,從而導致很多服務器在部署好Linux系統後直接將SELinux禁用了;這絕對不是明智的選擇。

SELinux服務有三種配置模式,具體如下。

enforcing:強制啓用安全策略模式,將攔截服務的不合法請求。

permissive:遇到服務越權訪問時,只發出警告而不強制攔截。

disabled:對於越權的行爲不警告也不攔截。

所有實驗都是在強制啓用安全策略模式下進行的,雖然在禁用SELinux服務後確實能夠減少報錯機率,但這在生產環境中相當不推薦。建議大家檢查一下自己的系統,查看SELinux服務主配置文件中定義的默認狀態。如果是permissive或disabled,建議趕緊修改爲enforcing。

SELinux服務的主配置文件中,定義的是SELinux的默認運行狀態,可以將其理解爲系統重啓後的狀態,因此它不會在更改後立即生效。可以使用getenforce命令獲得當前SELinux服務的運行模式:
在這裏插入圖片描述
爲了確認圖10-6所示的結果確實是因爲SELinux而導致的,可以用setenforce [0|1]命令修改SELinux當前的運行模式(0爲禁用,1爲啓用)。注意,這種修改只是臨時的,在系統重啓後就會失效:
在這裏插入圖片描述
再次刷新網頁,就會看到正常的網頁內容了, 可見,問題確實是出在了SELinux服務上面。
在這裏插入圖片描述
在這裏插入圖片描述
httpd服務程序的功能是允許用戶訪問網站內容,因此SELinux肯定會默認放行用戶對網站的請求操作。但是,我們將網站數據的默認保存目錄修改爲了/web。
現在,我們把SELinux服務恢復到強制啓用安全策略模式,然後分別查看原始網站數據的保存目錄與當前網站數據的保存目錄是否擁有不同的SELinux安全上下文值:
在這裏插入圖片描述
在文件上設置的SELinux安全上下文是由用戶段、角色段以及類型段等多個信息項共同組成的。其中,用戶段system_u代表系統進程的身份,角色段object_r代表文件目錄的角色,類型段httpd_sys_content_t代表網站服務的系統文件。
針對當前這種情況,我們只需要使用semanage命令,將當前網站目錄/web的SELinux安全上下文修改爲跟原始網站目錄的一樣就可以了。

semanage命令

semanage命令用於管理SELinux的策略,格式爲“semanage [選項] [文件]”。

SELinux服務極大地提升了Linux系統的安全性,將用戶權限牢牢地鎖在籠子裏。semanage命令不僅能夠像傳統chcon命令那樣—設置文件、目錄的策略,還可以管理網絡端口、消息接口(這些新特性將在本章後文中涵蓋)。使用semanage命令時,經常用到的幾個參數及其功能如下所示:

-l參數用於查詢;

-a參數用於添加;

-m參數用於修改;

-d參數用於刪除。

例如,可以向新的網站數據目錄中新添加一條SELinux安全上下文,讓這個目錄以及裏面的所有文件能夠被httpd服務程序所訪問到:

semanage fcontext -a -t httpd_sys_content_t /web
semanage fcontext -a -t httpd_sys_content_t /web/*
提示報錯
解決辦法
安裝 與semanage相關命令的包在這裏插入圖片描述
在這裏插入圖片描述

注意,執行上述設置之後,還無法立即訪問網站,還需要使用restorecon命令將設置好的SELinux安全上下文立即生效。在使用restorecon命令時,可以加上-Rv參數對指定的目錄進行遞歸操作,以及顯示SELinux安全上下文的修改過程。最後,再次刷新頁面,就可以正常看到網頁內容了,結果如圖10-8所示。

restorecon -Rv /web
在這裏插入圖片描述
在這裏插入圖片描述
真可謂是一波三折!原本認爲只要把httpd服務程序配置妥當就可以大功告成,結果卻反覆受到了SELinux安全上下文的限制。所以,建議大家在配置httpd服務程序時,一定要細心、耐心。一旦成功配妥httpd服務程序之後,就會發現SELinux服務並沒有那麼難。

個人用戶主頁功能

如果想在系統中爲每位用戶建立一個獨立的網站,通常的方法是基於虛擬網站主機功能來部署多個網站。但這個工作會讓管理員苦不堪言(尤其是用戶數量很龐大時),而且在用戶自行管理網站時,還會碰到各種權限限制,需要爲此做很多額外的工作。其實,httpd服務程序提供的個人用戶主頁功能完全可以勝任這個工作。該功能可以讓系統內所有的用戶在自己的家目錄中管理個人的網站,而且訪問起來也非常容易。

第1步:在httpd服務程序中,默認沒有開啓個人用戶主頁功能。爲此,我們需要編輯下面的配置文件,然後在第17行的UserDir disabled參數前面加上井號(#),表示讓httpd服務程序開啓個人用戶主頁功能;同時再把第24行的UserDir public_html參數前面的井號(#)去掉(UserDir參數表示網站數據在用戶家目錄中的保存目錄名稱,即public_html目錄)。最後,在修改完畢後記得保存。
在這裏插入圖片描述

在這裏插入圖片描述
第2步:在用戶家目錄中建立用於保存網站數據的目錄及首頁面文件。另外,還需要把家目錄的權限修改爲755,保證其他人也有權限讀取裏面的內容。
在這裏插入圖片描述
第3步:重新啓動httpd服務程序,在瀏覽器的地址欄中輸入網址,其格式爲“網址/~用戶名”(其中的波浪號是必需的,而且網址、波浪號、用戶名之間沒有空格),從理論上來講就可以看到用戶的個人網站了。不出所料的是,系統顯示報錯頁面 。這一定還是SELinux惹的禍。
在這裏插入圖片描述
在這裏插入圖片描述
第4步:思考這次報錯的原因是什麼。httpd服務程序在提供個人用戶主頁功能時,該用戶的網站數據目錄本身就應該是存放到與這位用戶對應的家目錄中的,所以應該不需要修改家目錄的SELinux安全上下文。但是,前文還講到了SELinux域的概念。SELinux域確保服務程序不能執行違規的操作,只能本本分分地爲用戶提供服務。httpd服務中突然開啓的這項個人用戶主頁功能到底有沒有被SELinux域默認允許呢?

接下來使用getsebool命令查詢並過濾出所有與HTTP協議相關的安全策略。其中,off爲禁止狀態,on爲允許狀態。
在這裏插入圖片描述
面對如此多的SELinux域安全策略規則,實在沒有必要逐個理解它們,我們只要能通過名字大致猜測出相關的策略用途就足夠了。比如,想要開啓httpd服務的個人用戶主頁功能,那麼用到的SELinux域安全策略應該是httpd_enable_homedirs吧?大致確定後就可以用setsebool命令來修改SELinux策略中各條規則的布爾值了。大家一定要記得在setsebool命令後面加上-P參數,讓修改後的SELinux策略規則永久生效且立即生效。隨後刷新網頁
在這裏插入圖片描述

在這裏插入圖片描述

有時,網站的擁有者並不希望直接將網頁內容顯示出來,只想讓通過身份驗證的用戶訪客看到裏面的內容,這時就可以在網站中添加口令功能了。

第1步:先使用htpasswd命令生成密碼數據庫。-c參數表示第一次生成;後面再分別添加密碼數據庫的存放文件,以及驗證要用到的用戶名稱(該用戶不必是系統中已有的本地賬戶)。

在這裏插入圖片描述
第2步:編輯個人用戶主頁功能的配置文件。把第31~35行的參數信息修改成下列內容,其中井號(#)開頭的內容爲添加的註釋信息,可將其忽略。隨後保存並退出配置文件,重啓httpd服務程序即可生效。
在這裏插入圖片描述
此後,當用戶再想訪問某個用戶的個人網站時,就必須要輸入賬戶和密碼才能正常訪問了。另外,驗證時使用的賬戶和密碼是用htpasswd命令生成的專門用於網站登錄的口令密碼,而不是系統中的用戶密碼,請不要搞錯了。登錄界面如圖10-11所示。
頁面登不上
需要防火牆放行https

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

發佈了49 篇原創文章 · 獲贊 4 · 訪問量 2645
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章