linux入門系列18--Web服務之Apache服務1
阿新 • • 發佈:2020-03-23
前面系列文章講解了Linux下通過檔案傳輸、檔案共享、郵件系統來分享和獲取資源,本文講解網路資源獲取和共享的另外一種形式,通過Apache服務程式來提供Web服務。
本文先講解目前主流的Web服務程式以及各自的特點和優勢,然後以Apache服務為例講解Linux下Web網站的部署,並在部署過程中穿插講解SELinux的使用。最後在以示例講解Apache的虛擬主機功能及訪問控制。
### 一、Web服務程式分類
我們平時在網際網路上訪問的網站服務就是Web服務,比如我們常用的百度網站,他就是一個Web網站。Web網路服務,一般是指允許使用者通過瀏覽器訪問到其中各種資源的服務。
Web網路服務是一種被動訪問的服務程式,當接入到網際網路中的使用者主機發出請求後,Web服務才會響應並通過HTTP或HTTPS把請求的內容回傳給使用者。示意圖如下:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090712968.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
目前提供Web服務的程式有:IIS、Apache、Ngnix等。
#### 1.1 IIS
IIS(Internet Information Services):網際網路資訊服務,是Windows系統中預設的Web服務程式。它是一款帶圖形化介面的網站管理工具,不僅提供Web網站服務,還可以提供FTP、SMTP等服務,功能豐富。但是由於它是用在Windows系統中,因此不介紹它。
#### 1.2 Apache
Apache程式是目前市場上佔有率很高的Web服務程式之一,其特點是跨平臺、安全性高、API擴充套件簡單可靠。
Apache服務程式可以執行在Linux、UNIX、 Windows系統中,支援基於IP、域名及埠號的虛擬主機功能,支援多種認證方式,整合有代理伺服器模組、安全Socket層(SSL),能夠實時監視服務狀態與定製日誌訊息,有著各類豐富的模組支援。
由於它是RHEL5、6、7中預設的Web服務程式,並且作為老牌的Web服務程式,市場佔用率還是很高的,因此本文主要以Apache為例進行Web服務的演示。
#### 1.3 Ngnix
2004年,為俄羅斯知名門戶站點開發的Web服務程式Nginx橫空出世。它作為一款輕量級的網站服務軟體,因其穩定性和豐富的功能而快速佔領伺服器市場。
它因系統資源消耗低、併發能力強的特點,在國內受到諸如新浪、騰訊、網易等入口網站的青睞。Ngnix作為後起之秀,截至本文寫作時為止市場佔有率幾乎與Apache齊平,以後有機會再單獨對其進行演示和講解。
### 二、Apache安裝及操作案例
#### 2.1 Apache安裝及配置
##### 2.1.1 Apache安裝
Apache是RHEL7預設的web程式,以包含在預設的安裝映象中,因此可以直接掛載安裝映象直接安裝,也可以用遠端Yum倉庫進行安裝。
> 需要注意的是,在CentOS和RHEL上,Apache軟體包和服務稱為httpd而非apache。
* 安裝Apache
先檢查Apache是否安裝,如果未安裝,通過yum倉庫安裝即可
~~~
[root@apache ~]# rpm -q httpd
package httpd is not installed
[root@apache ~]# yum install httpd
Loaded plugins: fastestmirror, langpacks
...省略部分內容
Complete!
[root@apache ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64
[root@apache ~]#
~~~
安裝完成後,httpd服務是沒有啟動的,還需要將其啟動,並加入到開機啟動中
~~~
[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 ~]#
~~~
此時在虛擬機器Centos內部,開啟瀏覽器,即可看到apache部署成功
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090733716.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
如果要讓外部機器(如宿主機)訪問此Web,則需要對防火牆進行設定,當然直接關閉防火牆也可以,不過這樣存在風險。
根據前文講解的防火牆知識,開啟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 ~]#
~~~
這樣宿主機上也可以直接訪問該Web,如下圖
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090742889.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
* 檢視httpd版本資訊:
~~~
[root@apache ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Aug 8 2019 11:41:18
[root@apache ~]#
~~~
* 檢視httpd執行狀態
~~~
[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)
...省略部分內容
~~~
##### 2.1.2 Apache配置
只有掌握httpd服務相關配置檔案以及各自的用途,才能更好地對其進行配置了。
* 主要配置檔案
httpd服務程式預設主要配置檔案(這些預設配置是可以進行修改的)如下:
| 用途 | 檔案 |
| :----------- | :------------------------- |
| 服務目錄 | /etc/httpd |
| 主配置檔案 | /etc/httpd/conf/httpd.conf |
| 網站資料目錄 | /var/www/html |
| 訪問日誌 | /var/log/httpd/access_log |
| 錯誤日誌 | /var/log/httpd/error_log |
主配置檔案為:/etc/httpd/conf/httpd.conf,在此檔案中存存在三種類型的型別:註釋行資訊、全域性配置、區域配置。
從主配置檔案中擷取部分進行說明如下:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090759134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
***全域性配置引數***
全域性配置引數就是一種全域性性的配置引數,可作用於對所有的子站點,既保證了子站點的正常訪問,也有效減少了頻繁寫入重複引數的工作量。
***區域配置引數***
區域配置引數則是單獨針對於每個獨立的子站點進行設定的。
* 主要引數
httpd服務程式最常用的引數如下
| 引數 | 用途 |
| :------------- | :-------------------------- |
| ServerRoot | 服務目錄 |
| ServerAdmin | 管理員郵箱 |
| User | 執行服務的使用者 |
| Group | 執行服務的使用者組 |
| ServerName | 網站伺服器的域名 |
| DocumentRoot | 網站資料目錄 |
| Directory | 網站資料目錄的許可權 |
| Listen | 監聽的 IP 地址與埠號 |
| DirectoryIndex | 預設的索引頁頁面 |
| ErrorLog | 錯誤日誌檔案 |
| CustomLog | 訪問日誌檔案 |
| Timeout | 網頁超時時間,預設為 300 秒 |
* 案例演示:修改網站首頁內容
分析:既然上表中提到DocumentRoot是用於定義網站資料的儲存路徑,那我們檢視下其引數的預設值,然後把對應網頁內容放入該目錄,就可以實現網頁替換。靜態網頁名稱一般為index.html。
開啟主配置檔案
~~~
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
~~~
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090824126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
檢視到看預設網站資料目錄為:/var/www/html。預設該目錄為空,向目錄中建立index.html檔案,並通過瀏覽器進行檢視。
> 如果忘記VI或VIM編輯器使用方法的,請返回複習前面的文章:“linux入門系列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 ~]#
~~~
在宿主機通過瀏覽器再次檢視,即可檢視剛才新加的網頁檔案內容
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090833229.png)
***通過這樣的操作,我們應該明白,如果你已經做好你的網頁內容,只需要往/var/www/html/目錄存放,即可實現網站的訪問。***
但實際工作中,有可能我們會更換網站目錄,把網站內容存放到一個指定的目錄中,而非預設的/var/www/html/。這該怎麼做呢?這就會涉及到SELinux的問題,因此請繼續下邊的實驗。
#### 2.2 SELinux相關知識
##### 2.2.1 問題引出
假設我們把系統根目錄下的website目錄作為網站目錄,我們進行如下操作:
(1)建立自定義網站目錄和網頁檔案
~~~
[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
~~~
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090846993.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
主要修改DocumentRoot引數指定網站目錄為/website,同時修改定義目錄許可權的區域引數Directory。
(3)訪問驗證
配置完成後,重啟httpd服務
~~~
[root@apache website]# systemctl restart httpd
~~~
在宿主機中瀏覽器檢視
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090856898.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
見鬼,怎麼顯示的還是httpd預設的頁面呢?
> 一般情況只有網站的首頁頁面檔案不存在或使用者許可權不足時,才顯示httpd預設的頁面。比如後文的4.1,設定禁止的ip訪問後,就直接跳轉到此頁面。
我們在加上檔名試下呢
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020032309091026.png)
可以看到提示許可權不足,看到這裡,你應該想到是SELinux在搞鬼。為了驗證一下,讓我們把SELinux關閉後在試試看
~~~
[root@apache website]# getenforce
Enforcing
[root@apache website]# setenforce 0
[root@apache website]# getenforce
Permissive
[root@apache website]#
~~~
再次在宿主機瀏覽器訪問
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090929424.png)
發現可以訪問了,那說明果然是SELinux在搞鬼。但生產環境不建議直接關閉SELinux,接下來我們就來看看SELinux相關的知識,掌握之後我們在來開啟SELinux並進行設定,使其在SELinux開啟的情況下依然可以訪問我們Web網站。
##### 2.2.2 SELinux相關知識
在前面的檔案傳輸、檔案共享、郵件系統的文章中或多或少都講解了SELinux相關的知識,本文再次集中總結一下。
###### 2.2.2.1 SELinux概述
SELinux(Security-Enhanced Linux)是美國國家安全域性在Linux開源社群的幫助下開發的 一個強制訪問控制(MAC,Mandatory Access Control)的安全子系統。
***RHEL7系統使用SELinux技術的目的是為了讓各個服務程序都受到約束,使其僅獲取到本應獲取的資源。***它的重要性不言而喻,舉個例子,比如你從網上下載了一個軟體用於編輯文件,但是這個軟體“不老實”,當你正在努力碼字的同時,它卻悄悄監視你在各個網站登入時輸入的密碼,然後悄悄上傳到黑客指定的地址。SELinux就是為了防止這種情況的發生而開發的,從而更好的保護你的電腦。
SELinux具體從兩個方面進行限制:***SELinux域和上下文***。
***SELinux域對服務程式的功能進行限制***,可以確保服務程式做不了出格的事情。
***SELinux上下文對檔案資源的訪問限制***,確保檔案資源 只能被其所屬的服務程式進行訪問。
開啟SELinux後,這樣就等於開啟了系統雙保險,系統內的服務程式只能規規矩矩地拿到自己所應該獲取的資源,這樣即便黑客入侵了系 統,也無法利用系統內的服務程式進行越權操作。
SELinux配置有三種模式,如下:
| 引數值 | 作用 |
| :--------- | :------------------------------------------- |
| enforcing | 強制啟用安全策略模式,將攔截服務的不合法請求 |
| permissive | 遇到服務越權訪問時,只發出警告而不強制攔截 |
| disabled | 對於越權的行為不警告也不攔截 |
正如2.2.1中,通過setenforce 0命令將SELinux關閉後,我們的Web就可以訪問了,就是這個道理。
SELinux配置檔案對應為:/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預設的執行狀態,也就是系統重啟後的狀態,因此修改它不會立即生效***。
###### 2.2.2 SELinux相關命令
* getenforce命令
用於檢視SELinux的執行模式
~~~
[root@apache website]# getenforce
Enforcing
[root@apache website]#
~~~
* setenforece命令
setenforce 0或1,用於禁用(0)或啟用(1)SELinux,***注意這個命令的修改只是臨時的,系統重啟後就會失效***。
~~~
[root@apache website]# getenforce
Enforcing
[root@apache website]# setenforce 0
[root@apache website]# getenforce
Permissive
[root@apache website]
~~~
因此,如果原來系統的SELinux是關閉的,如果要開啟它,需要在配置檔案中將進行設定SELINUX=enforcing,並同時要通過setenforce 1進行設定。這樣即使系統重啟,依然生效。
* semanage命令
用於設定SELinux上下文的值,管理SELinux的策略。
語法格式:semanage [選項] [檔案]”
引數
| 引數 | 作用 |
| :--- | :--- |
| -l | 查詢 |
| -a | 新增 |
| -m | 修改 |
| -d | 刪除 |
具體使用細節可以通過幫助命令man semanage進行檢視。
* getseboll命令
該命令用於檢視SELinux域相關的安全策略。
語法格式:getsebool -a(其中-a引數表示檢視所有域相關的安全策略)
~~~
[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
...省略部分內容
~~~
其中,on表示允許狀態,off表示禁止狀態。
* setsebool命令
該命令用於修改SELinux域相關的策略規則。
語法格式:setsebool -P 規則項=on或off (其中-P引數表示立即讓修改永久生效)
~~~
[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
~~~
以上實驗,我們先檢視grep xdm_write_home狀態,然後將其改為on,檢視修改是否生效,然後再將其改回原值。檢視某一項的值可以通過正則匹配,也可以直接通過該具體項獲取。
有了以上這些儲備知識,我們再繼續完成開啟SELinux的情況下讓我們自定義目錄的網站也能訪問。
#### 2.3 Apache案例1:修改網站目錄
通過上邊的講解,我們大概已經知道了前面的問題就是SELinux上下文引起,因此我們通過以下命令來檢視下預設的/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引數進行檢視,很明顯就看到了不同。(-Z引數專門用於檢視SELinux域相關設定)
可以看到***在檔案上設定的SELinux安全上下文是由使用者段、角色段以及型別段等多個資訊項共同組成的***。以上示例中,使用者段system_u代表系統程序的身份,角色段object_r代表檔案目錄的角色, 型別段httpd_sys_content_t代表網站服務的系統檔案。
搞清楚區別後,我們直接用前邊講解的semanage命令新增SELinux安全上下文即可,使其目錄及裡邊的所有檔案能夠被httpd服務程式訪問到
~~~
[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]#
~~~
需要注意的是,設定上下文值後並非立即生效,還需要執行restorecon才會生效,過程如上,請自行體驗。
經過這樣設定後,就可以正常訪問了。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323090956534.png)
> 本案例演示了SELinux上下文對資源的限制導致的web不能訪問,以及設定上下文值。
#### 2.4 Apache案例2:使用者個人主頁功能
上一個案例演示了SELinux上下文的設定,本案例再通過Apache的個人使用者主頁功能來演示SELinux域的設定。
假設有這樣有一個需求:需要為Linux每一位系統使用者建立一個獨立的網站。我們該怎麼做呢?
方法有很多,httpd服務程式提供的個人使用者主頁功能完全可以實現這個需求。它可以讓系統內所有的使用者在自己的家目錄中管理個人的網站,而且訪問起來也非常容易。
步驟如下:
##### 2.4.1 開啟個人主頁功能
個人使用者主頁功能配置檔案為:/etc/httpd/conf.d/userdir.conf 。主要修改2處:註釋掉UserDir disabled使其開啟個人主頁功能,同時設定個人網站目錄,取消UserDir public_html 前的註釋即可。
~~~
[root@apache website]# vim /etc/httpd/conf.d/userdir.conf
~~~
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323091009970.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
##### 2.4.2 建立網站目錄及檔案
在使用者家目錄中建立用於儲存網站資料的目錄及首頁面檔案。
~~~
[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/
~~~
另外,還需要把家目錄的許可權修改為755,保證其他人也有許可權讀取裡面的內容。
##### 2.4.3 設定SELinux安全域策略
文章最開始已經設定了防火牆,此時我們大致一想,應該是可以訪問個人網頁了吧。我們先切換到root使用者,重啟httpd服務,然後進行訪問,結果很不幸,這次又提示許可權不足。
~~~
[root@apache ~]# systemctl restart httpd
~~~
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020032309102097.png)
> 訪問地址為ip/~使用者名稱,其中的波浪號是必需的,而且網址、波浪號、使用者名稱之間沒有空格。
我們回想一下,這個現象和案例1遇到的症狀有幾分相似,當時是因為我們新建了一個目錄/website,而沒有設定SELinux上下文所導致。那這次是不是也是因為SELinux的上下文導致呢?
很顯然不是,httpd服務程式在提供個人使用者主頁功能時,該使用者的網站資料目錄本身就應該是存放到與這位使用者對應的家目錄中的,所以應該不需要修改家目錄的 SELinux 安全上下文,如果你實在不放心,也可以執行如下命令驗證:
~~~
[heima@apache ~]$ ll -Z /home/heima/
drwxrwxr-x. heima heima unconfined_u:object_r:httpd_user_content_t:s0 public_html
[heima@apache ~]$
~~~
對吧,很明顯不是SELinux上下文導致,因為httpd預設就給使用者目錄添加了上下文值。
那是什麼原因呢,我們還是按照之前的方法來排查,先把SELinux關閉,然後在此訪問。結果可以正常訪問了,那說明就是SELinux的問題,再回想我們前面提到的SELinux通過上下文和域這兩個方面進行限制和保護。既然上下文沒問題,因此自然而然,我們應該知道這就是SELinux域導致的。
***Linux 域確保服務程式不能執行違規的操作,只能本本分分地為使用者提供服務***。httpd 服務中突然開啟的這項個人用 戶主頁功能到底有沒有被SELinux域預設允許呢?
給個人主頁相關的域規則項為:httpd_enable_homedirs,如果不知道記住即可。我們看下他的狀態確實為off,因此將其改為on就可以了,切換到root使用者進行操作
~~~
[root@apache ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@apache ~]# setsebool httpd_enable_homedirs=on
[root@apache ~]#
~~~
此時,我們再次訪問,即可正常訪問了。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323091029953.png)
##### 2.4.4 設定需要使用者密碼才能登陸
有時候我們不希望別人直接就可以訪問個人網站,需要通過身份認證才能進行檢視,這就需要在網站中新增口令功能來實現。
(1)生成密碼資料庫
~~~
[root@apache ~]# htpasswd -c /etc/httpd/passed heima
New password:
Re-type new password:
Adding password for user heima
[root@apache ~]#
~~~
注意,檔名任意取,在下一步中保持一致即可,-c引數表示第一次生成。設定密碼為888888,以區別之前heima使用者登入系統的密碼123456,這樣做的目的是為了區分說明不此處設定的密碼不是使用者登入系統的密碼。
(2)修改配置檔案
~~~
[root@apache ~]# vim /etc/httpd/conf.d/userdir.conf
~~~
將文末的內容註釋並按如下進行修改即可
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323091039847.png)
修改完成後,重啟httpd
~~~
[root@apache ~]# systemctl restart httpd
~~~
再次訪問,就要求輸入密碼了。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323091054643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhbmNoZW5nanVu,size_16,color_FFFFFF,t_70)
此時輸入使用者名稱heima,以及剛才建立的888888密碼(注意不是heima登入系統的密碼)即可登入網站。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200323091103224.png)
> 這個案例演示了SELinux域對程序的控制,以及如何對其進行設定。
通過案例1和案例2,不僅完整演示了Apache常用操作,還特別演示了生產級別的SELinux域和上下文的設定。
下一篇文章繼續演示Apache的虛擬主機功能和訪問控制的實現