網頁首頁及目錄相關之權限設定 (DocumentRoot 與 Directory)
我們不是講過 CentOS 的 WWW 預設首頁放置在 /var/www/html 這個目錄嗎?為什麼呢?因為 DocumentRoot 這個設定值的關係啦!此外,由於 Apache 允許 Internet 對我們的資料進行瀏覽, 所以你當然必須要針對可被瀏覽的目錄進行權限的相關設定,那就是 <Directory> 這個設定值的重要特色!先讓我們來看看預設的主網頁設定吧!
[root@www ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"  <==可以改成你放置首頁的目錄!
# 這個設定值規範了 WWW 伺服器主網頁所放置的『目錄』,雖然設定值內容可以變更,
# 但是必須要特別留意這個設定目錄的權限以及 SELinux 的相關規則與類型(type)!
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
# 這個設定值是針對 WWW 伺服器的『預設環境』而來的,因為針對『/』的設定嘛!
# 建議保留上述的預設值 (上頭資料已經是很嚴格的限制),相關參數容後說明。
<Directory "/var/www/html">         <==針對特定目錄的限制!底下參數很重要!
    Options Indexes FollowSymLinks  <==建議拿掉 Indexes 比較妥當!
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
這個地方則是針對 /var/www/html 這個目錄來設定權限啦!就是咱們首頁所在目錄的權限。 主要的幾個設定項目的意義是這樣的 (這些設定值都很重要!要仔細看喔!):
  • Options (目錄參數)

    此設定值表示在這個目錄內能夠讓 Apache 進行的動作,亦即是針對 apache 的程序的權限設定啦!主要的參數值有:

    • Indexes:如果在此目錄下找不到『首頁檔案 (預設為 index.html) 』時, 就顯示整個目錄下的檔案名稱,至於『首頁檔案檔名』則與 DirectoryIndex 設定值有關。

    • FollowSymLinks:這是 Follow Symbolic Links 的縮寫, 字面意義是讓連結檔可以生效的意思。我們知道首頁目錄在 /var/www/html,既然是 WWW 的根目錄,理論上就像被 chroot 一般! 一般來說被 chroot 的程式將無法離開其目錄,也就是說預設的情況下,你在 /var/www/html 底下的連結檔只要連結到非此目錄的其他地方,則該連結檔預設是失效的。 但使用此設定即可讓連結檔有效的離開本目錄。

    • ExecCGI:讓此目錄具有執行 CGI 程式的權限,非常重要!舉例來說,之前熱門的 OpenWebMail 使用了很多的 perl 的程式,你要讓 OpenWebMail 可以執行,就得要在該程式所在目錄擁有 ExecCGI 的權限才行喔!但請注意,不要讓所有目錄均可使用 ExecCGI

    • Includes:讓一些 Server-Side Include 程式可以運作。建議可以加上去!

    • MultiViews:這玩意兒有點像是多國語言的支援,與語系資料 (LanguagePriority) 有關。最常見在錯誤訊息的回報內容,在同一部主機中,可以依據用戶端的語系而給予不同的語言顯示呢! 預設在錯誤回報訊息當中存在,你可以檢查一下 /var/www/error/ 目錄下的資料喔!

  • AllowOverride (允許的覆寫參數功能)

    表示是否允許額外設定檔 .htaccess 的某些參數覆寫?我們可以在 httpd.conf 內設定好所有的權限,不過如此一來若使用者自己的個人網頁想要修改權限時將會對管理員造成困擾。因此 Apache 預設可以讓使用者以目錄底下的 .htaccess 檔案內覆寫 <Directory> 內的某些功能參數。 這個項目則是在規定 .htaccess 可以覆寫的權限類型有哪些。常見的有:

    • ALL:全部的權限均可被覆寫;
    • AuthConfig:僅有網頁認證 (帳號密碼) 可覆寫;
    • Indexes:僅允許 Indexes 方面的覆寫;
    • Limits:允許使用者利用 Allow, Deny 與 Order 管理可瀏覽的權限;
    • None:不可覆寫,亦即讓 .htaccess 檔案失效!

    這部份我們在進階設定時會再講到的!

  • Order, Allow, Deny (能否登入瀏覽的權限)

    決定此目錄是否可被 apache 的 PID 所瀏覽的權限設定啦!能否被瀏覽主要有兩種判定的方式:

    • deny,allow:以 deny 優先處理,但沒有寫入規則的則預設為 allow 喔。
    • allow,deny:以 allow 為優先處理,但沒有寫入規則的則預設為 deny 喔。

    所以在預設的環境中,因為是 allow,deny 所以預設為 deny (不可瀏覽),不過在下一行有個 Allow from all,allow 優先處理,因此全部 (all) 用戶端皆可瀏覽啦!這部份我們會在 20.3.4 進階安全設定當中再提及滴。
除了這些資料之外,跟網站資料相關性高的還有底下的幾個咚咚:
[root@www ~]# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var  <==首頁『檔案的檔名』設定!
如果用戶端在網址列只輸入到目錄,例如 http://localhost/ 時,那麼 Apache 將拿出那個檔案來顯示呢?就是拿出首頁檔案嘛! 這個檔案的檔名在 Apache 當中預設是以 index.* 為開頭的,但 Windows 則以 default.* 之類的檔名為開頭的。如果你想要讓類似 index.pl 或 index.cgi 也可以是首頁的檔名,那可以改成:
  • DirectoryIndex index.html index.htm index.cgi index.pl ...
那如果上面的檔名通通存在的話,那該怎辦?就按照順序啊!接在 DirectoryIndex 後面的檔名參數,越前面的越優先讀取。 那如果檔名通通不存在呢?就是說沒有首頁時,該如何讀取?這就與剛剛談到的 Options 裡面的 Indexes 有關喔! 這樣有沒有將兩個參數串起來?
[root@www ~]# vim /etc/httpd/conf/httpd.conf
# Alias  網址列延伸  實際Linux目錄
Alias /icons/ "/var/www/icons/"  <==製作一個目錄別名 (相當類似捷徑)!
<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
這個 Alias 很有趣的!是製作出類似連結檔的東西啦!當你輸入 http://localhost/icons 時,其實你的 /var/www/html 並沒有 icons 那個目錄,不過由於 Alias (別名) 的關係,會讓該網址直接連結到 /var/www/icons/ 下。 這裡面預設有很多 Apache 提供的小圖示喔!而因為設定了一個新的可瀏覽目錄,所以你瞧,多了個 <Directory> 來規定權限了吧! ^_^
[root@www ~]# vim /etc/httpd/conf/httpd.conf
# ScriptAlias  網址列延伸  實際Linux目錄
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
與上面的 icons 類似,不過這邊卻是以 ScriptAlias (可執行腳本的別名) 為設定值! 這個設定值可以指定該目錄底下為『具有 ExecCGI 』能力的目錄所在喔!所以你可以將類似 Open webmail 的程式給他放置到 /var/www/cgi-bin 內,就不必額外設定其他的目錄來放置你的 CGI 程式喔! 這樣大概就 OK 了啦!接下來準備一下看看還有哪些額外的設定檔需要處理的呢?