Web網絡服務,通常是指容許用戶經過瀏覽器訪問到互聯網中各類資源的服務。Apache程序是目前擁有很高市場佔有率的Web服務程序之一,其跨平臺和安全性普遍被承認且擁有快速、可靠、簡單的API擴展。Apache也是RHEL 五、六、7系統中默認的Web服務程序。html
第一步:把光盤設備中的系統鏡像掛載到 /media/cdrom 目錄。linux
第二步:使用 Vim 編輯器建立 Yum 倉庫的配置文件。數據庫
第三步:安裝 Apache 服務程序。使用yum命令進行安裝時,跟在命令後面的Apache服務的軟件包名稱爲httpd。若是直接執行yum install apache命令,則系統會報錯。apache
第四步:啓動 httpd 服務程序並將其加入到開機啓動項中,使其可以跟隨系統開機而運行,從而持續爲用戶提供 Web 服務。瀏覽器
在瀏覽器(這裏是Firefox)輸入 http://127.0.0.1 回車,就能夠看到用於提供 Web 服務的 httpd 服務程序的默認頁面了。安全
httpd 服務程序的主要配置文件及存放位置:服務器
在httpd服務程序的主配置文件中,存在三種類型的信息:註釋行信息、全局配置、區域配置。網絡
全局配置參數就是一種全局性的配置參數,可做用於對全部的子站點,既保證了子站點的正常訪問,也有效減小了頻繁寫入重複參數的工做量。區域配置參數則是單獨針對於每一個獨立的子站點進行設置的。在httpd服務程序主配置文件中,最爲經常使用的參數以下表:編輯器
DocumentRoot參數用於定義網站數據的保存路徑,其參數的默認值是把網站數據存放到/var/www/html目錄中;而當前網站廣泛的首頁面名稱是index.html,所以能夠向/var/www/html目錄中寫入一個文件,替換掉httpd服務程序的默認首頁面,該操做會當即生效。測試
默認狀況下,網站數據是保存在/var/www/html目錄中,若是想把保存網站數據的目錄修改成/home/wwwroot目錄,該怎麼操做呢?
第一步:創建網站數據的保存目錄,並建立首頁文件。
第二步:打開 httpd 的主配置文件,將約第119行用於定義網站數據保存路徑的參數DocumentRoot修改成/home/wwwroot,同時還須要將約第124行用於定義目錄權限的參數Directory後面的路徑也修改成/home/wwwroot。配置文件修改完畢後便可保存並退出。
第三步:重啓 httpd 服務驗證效果,發現看到了 httpd 服務程序的默認首頁面。按理來講,只有在網站的首頁面文件不存在或者用戶權限不足時,才顯示httpd服務程序的默認首頁面。咱們在嘗試訪問http://127.0.0.1/index.html頁面時,居然發現頁面中顯示「Forbidden,You don't have permission to access /index.html on this server.」。而這一切正是SELinux在搗鬼。
SELinux(Security-Enhanced Linux)是美國國家安全局在Linux開源社區的幫助下開發的一個強制訪問控制(MAC,Mandatory Access Control)的安全子系統。RHEL 7系統使用SELinux技術的目的是爲了讓各個服務進程都受到約束,使其僅獲取到本應獲取的資源。
例如,您在本身的電腦上下載了一個美圖軟件,當您全神貫注地使用它給照片進行美顏的時候,它卻在後臺默默監聽着瀏覽器中輸入的密碼信息,而這顯然不該該是它應作的事情。SELinux安全子系統就是爲了杜絕此類狀況而設計的,它可以從多方面監控違法行爲:對服務程序的功能進行限制(SELinux域限制能夠確保服務程序作不了出格的事情);對文件資源的訪問限制(SELinux安全上下文確保文件資源只能被其所屬的服務程序進行訪問)。
SELinux服務有三種配置模式:
我這裏默認就是 enforcing的(可查看該服務的主配置文件 /etc/selinux/config)。
把SELinux當前的運行模式修改成禁用(經過命令 setenforce [0|1],0表明禁用、1表明啓用),該修改在重啓系統後失效,能夠經過 getenforce 命令查看 SELinux服務的運行狀態。
而後就能夠看到正常的網頁內容了。
httpd服務程序的功能是容許用戶訪問網站內容,所以SELinux確定會默認放行用戶對網站的請求操做。可是,咱們將網站數據的默認保存目錄修改成了/home/wwwroot,而這就產生問題了。/home目錄是用來存放普通用戶的家目錄數據的,而如今,httpd提供的網站服務卻要去獲取普通用戶家目錄中的數據了,這顯然違反了SELinux的監管原則。
把SELinux服務恢復到強制啓用安全策略模式,而後分別查看原始網站數據的保存目錄與當前網站數據的保存目錄是否擁有不一樣的SELinux安全上下文值:
用戶段system_u表明系統進程的身份,角色段object_r表明文件目錄的角色,類型段httpd_sys_content_t表明網站服務的系統文件。
針對當前這種狀況,咱們只須要使用semanage命令,將當前網站目錄/home/wwwroot的SELinux安全上下文修改成跟原始網站目錄的同樣就能夠了。
semanage命令用於管理SELinux的策略,格式爲「semanage [選項] [文件]」。經常使用參數及做用: -l 查詢、-a 添加、-m 修改、-d 刪除
向新的網站數據目錄中新添加一條SELinux安全上下文,讓這個目錄以及裏面的全部文件可以被httpd服務程序所訪問到:
設置後,還需使用 restorecon 命令使設置當即生效,-Rv參數對指定的目錄進行遞歸操做,以及顯示SELinux安全上下文的修改過程。最後,再次刷新頁面,就能夠正常看到網頁內容了。
httpd服務程序提供的我的用戶主頁功能可讓系統內全部的用戶在本身的家目錄中管理我的的網站,並且訪問起來也很是容易。
第一步:在httpd服務程序中,默認沒有開啓我的用戶主頁功能。需編輯配置文件 /etc/httpd/conf.d/userdir.conf,在17行前的UserDir disabled參數前面加上井號(#),表示讓httpd服務程序開啓我的用戶主頁功能;同時再把第24行的UserDir public_html參數前面的井號(#)去掉(UserDir參數表示網站數據在用戶家目錄中的保存目錄名稱,即public_html目錄)。
第二步:在用戶家目錄中創建用於保存網站數據的目錄及首頁面文件。還需把家目錄的權限修改成 755,保證其餘人也有權限讀取裏面的內容。
第三步:重啓 httpd 服務程序,在瀏覽器的地址欄中輸入網址,其格式爲「網址/~用戶名」,系統顯示報錯頁面,仍是SELinux的問題。
第四步:思考報錯緣由。httpd服務程序在提供我的用戶主頁功能時,該用戶的網站數據目錄自己就應該是存放到與這位用戶對應的家目錄中的,因此應該不須要修改家目錄的SELinux安全上下文。Linux域確保服務程序不能執行違規的操做,只能本本分分地爲用戶提供服務。httpd服務中忽然開啓的這項我的用戶主頁功能到底有沒有被SELinux域默認容許呢?
使用 getsebool 目錄查詢並過濾全部與 HTTP 協議相關的安全策略,off 爲禁止狀態,on爲容許。
經過名字大體猜想出相關的策略用途。httpd服務的我的用戶主頁功能的SELinux域安全策略應該是httpd_enable_homedirs。而後經過setsebool命令來修改SELinux策略中各條規則的布爾值。-P 參數表示使修改當即生效且永久生效。
有時,網站的擁有者並不但願直接將網頁內容顯示出來,只想讓經過身份驗證的用戶訪客看到裏面的內容,這時就能夠在網站中添加口令功能了。
第一步:先使用htpasswd命令生成密碼數據庫。-c參數表示第一次生成;後面再分別添加密碼數據庫的存放文件,以及驗證要用到的用戶名稱(該用戶沒必要是系統中已有的本地帳戶)。
第二步:編輯我的用戶主頁功能的配置文件。把從31行開始的內容修改以下。重啓httpd服務。
當用戶再想訪問某個用戶的我的網站時,就必需要輸入帳戶和密碼才能正常訪問了。
若是每臺運行Linux系統的服務器上只能運行一個網站,那麼人氣低、流量小的草根站長就要被迫承擔着高昂的服務器租賃費用了,這顯然也會形成硬件資源的浪費。Apache的虛擬主機功能是服務器基於用戶請求的不一樣IP地址、主機域名或端口號,實現提供多個網站同時爲外部提供訪問服務的技術。
若是一臺服務器有多個IP地址,並且每一個IP地址與服務器上部署的每一個網站一一對應,這樣當用戶請求訪問不一樣的IP地址時,會訪問到不一樣網站的頁面資源。並且,每一個網站都有一個獨立的IP地址,對搜索引擎優化也大有裨益。所以以這種方式提供虛擬網站主機功能最多見。
當前實驗經過nmtui命令配置的 IP 以下:
配置完並重啓網卡(systemctl restart network)服務後檢查網絡的連通性:
第一步:分別在/home/wwwroot中建立用於保存不一樣網站數據的3個目錄,並向其中分別寫入網站的首頁文件。每一個首頁文件中應有明確區分不一樣網站內容的信息,方便稍後能更直觀地檢查效果。
第二步:在httpd服務的配置文件中大約113行處開始,分別追加寫入三個基於IP地址的虛擬主機網站參數,重啓 httpd 服務。
第三步:此時訪問網站,則會看到httpd服務程序的默認首頁面。還是 SELinux 的問題。因爲當前的/home/wwwroot目錄及裏面的網站數據目錄的SELinux安全上下文與網站服務不吻合,所以httpd服務程序沒法獲取到這些網站數據目錄。須要手動把新的網站數據目錄的SELinux安全上下文設置正確,並使用restorecon命令讓新設置的SELinux安全上下文當即生效,這樣就能夠看到網站的訪問效果了。
當服務器沒法爲每一個網站都分配一個獨立IP地址的時候,能夠嘗試讓Apache自動識別用戶請求的域名,從而根據不一樣的域名請求來傳輸不一樣的內容。/etc/hosts是Linux系統中用於強制把某個主機域名解析到指定IP地址的配置文件。簡單來講,只要這個文件配置正確,即便網卡參數中沒有DNS信息也依然可以將域名解析爲某個IP地址。
第一步:手工定義IP地址與域名之間對應關係的配置文件,保存並退出後會當即生效。能夠經過分別ping這些域名來驗證域名是否已經成功解析爲IP地址。
第二步:分別在/home/wwwroot中建立用於保存不一樣網站數據的三個目錄,並向其中分別寫入網站的首頁文件。每一個首頁文件中應有明確區分不一樣網站內容的信息,方便稍後能更直觀地檢查效果。
第三步:在httpd服務的配置文件中大約113行處開始,分別追加寫入三個基於主機名的虛擬主機網站參數。重啓httpd服務。
第四步:當前的網站數據目錄仍是在/home/wwwroot目錄中,所以仍是必需要正確設置網站數據目錄文件的SELinux安全上下文,使其與網站服務功能相吻合。而後用restorecon命令讓新配置的SELinux安全上下文當即生效。
基於端口號的虛擬主機功能可讓用戶經過指定的端口號來訪問服務器上的網站資源。在使用Apache配置虛擬網站主機功能時,不只要考慮httpd服務程序的配置因素,還須要考慮到SELinux服務對新開設端口的監控。通常來講,使用80、44三、8080等端口號來提供網站訪問服務是比較合理的,若是使用其餘端口號則會受到SELinux服務的限制。
第一步:分別在/home/wwwroot中建立用於保存不一樣網站數據的兩個目錄,並向其中分別寫入網站的首頁文件。每一個首頁文件中應有明確區分不一樣網站內容的信息,方便稍後能更直觀地檢查效果。
第二步:在httpd服務配置文件的第43行和第44行分別添加用於監聽6111和6222端口的參數。
第三步:在httpd服務的配置文件中大約113行處開始,分別追加寫入兩個基於端口號的虛擬主機網站參數。重啓 httpd 服務。
第四步:設置網站數據目錄文件的SELinux安全上下文。用restorecon命令讓新配置的SELinux安全上下文當即生效。
設置完後測試鏈接,出現報錯信息。這是由於SELinux服務檢測到6111和6222端口本來不屬於Apache服務應該須要的資源,但如今卻以httpd服務程序的名義監聽使用了,因此SELinux會拒絕使用Apache服務使用這兩個端口。使用semanage命令查詢並過濾出全部與HTTP協議相關且SELinux服務容許的端口列表:
第五步:手動添加6111和6222端口號到SELinux容許的與http協議相關的端口號中。該操做當即生效且永久有效。
重啓httpd服務再次測試,能夠看到正確結果。
Apache能夠基於源主機名、源IP地址或源主機上的瀏覽器特徵等信息對網站上的資源進行訪問控制。它經過Allow指令容許某個主機訪問服務器上的網站資源,經過Deny指令實現禁止訪問。在容許或禁止訪問網站資源時,還會用到Order指令,這個指令用來定義Allow或Deny指令起做用的順序,其匹配原則是按照順序進行匹配,若匹配成功則執行後面的默認指令。好比「Order Allow, Deny」表示先將源主機與容許規則進行匹配,若匹配成功則容許訪問請求,反之則拒絕訪問請求。
第一步:先在服務器上的網站數據目錄中新建一個子目錄,並在這個子目錄中建立一個包含Successful單詞的首頁文件。
第二步:打開httpd服務的配置文件,在第129行後面添加下述規則來限制源主機的訪問。這段規則的含義是容許使用Firefox瀏覽器的主機訪問服務器上的首頁文件,除此以外的全部請求都將被拒絕。
除了匹配源主機的瀏覽器特徵以外,還能夠經過匹配源主機的IP地址進行訪問控制。例如,咱們只容許IP地址爲192.168.10.20的主機訪問網站資源,那麼就能夠在httpd服務配置文件的第129行後面添加下述規則。這樣在重啓httpd服務程序後再用本機(即服務器,其IP地址爲192.168.10.10)來訪問網站的首頁面時就會提示訪問被拒絕了。