認證 授權和訪問控制

2022-09-02 13:03:10 字數 4544 閱讀 7118

apache能夠確保使用者只能訪問被允許訪問的資源

本文涵蓋了保護站點資源的"標準"方法,大多數管理員將要用到這些方法。

前提

本文中討論的指令應該被放進主配置檔案(通常在段中)或者針對單個目錄的配置檔案(.htaccess檔案)中。

如果你打算使用.htaccess檔案,則必須設定伺服器以允許在這些檔案中使用認證指令,即用allowoverride指令指定哪些指令在針對單個目錄的配置檔案中有效。

既然本文討論認證,就應該對allowoverride這樣設定:

allowoverride authconfig

如果你希望把這些指令直接寫入主配置檔案,當然就需要具有對主配置檔案的寫許可權。

而且,你需要對伺服器的目錄結構有所了解,以確定某些檔案的位置。這個並不難,需要時我們會做適當的說明。

建立密碼檔案

apache在其安裝目錄的bin子目錄中提供了htpasswd工具,用於建立密碼檔案,可以這樣使用:

htpasswd -c /usr/local/apache/passwd/passwords rbowen

htpasswd會要你輸入密碼,並要求重新輸入以進行確認:

# htpasswd -c /usr/local/apache/passwd/passwords rbowen

new password: mypassword

re-type new password: mypassword

adding password for user rbowen

如果htpasswd不在搜尋路徑中,則必須使用完整路徑,如:/usr/local/apache/bin/htpasswd

向已有的密碼檔案中增加乙個使用者,可以輸入:

htpasswd /usr/local/apache/passwd/passwords dpitts

程式的提示和上面的一樣,但是它會追加到已有的檔案中,而不是建乙個新檔案(引數-c可以強制建立新的密碼檔案)。

啟用認證

修改httpd.conf.htaccess檔案,指示伺服器允許哪些使用者訪問並向使用者索取密碼。若要保護/usr/local/apache/htdocs/secret目錄,則可以將下列指令寫入/usr/local/apache/htdocs/secret/.htaccess或者httpd.conf的段。

authtype basic

authname "restricted files"

authuserfile /usr/local/apache/passwd/passwords

require user rbowen

讓我們逐個解釋這些指令。authtype指令選擇對使用者實施認證的方法,最常用的是由mod_auth_basic提供的basic。必須認識到的很重要的一點是,basic認證方法並不加密來自使用者瀏覽器的密碼,因此,不應該用於高度敏感的資料。apache中還有另一種更安全的認證方法"authtype digest",即由mod_auth_digest供的摘要認證。目前,只有最新的瀏覽器版本才支援摘要認證。

authname指令設定了使用認證的域(realm),它起兩個作用,首先,此域會出現在顯示給使用者的密碼提問對話方塊中,其次,也幫助客戶端程式確定應該傳送哪個密碼。

所以,如果乙個使用者已經在"restricted files"域通過了認證,則客戶端就可以嘗試使用同樣的密碼來訪問同乙個伺服器上任何名為"restricted files"域的其他部分,從而使多個受限區域使用同乙個密碼,以避免使用者重複輸入。當然,出於安全考慮,如果伺服器變了,客戶端始終會要求重新輸入密碼。

authuserfile指令設定了密碼檔案的位置,也就是剛才我們用htpasswd建立的檔案。如果使用者很多則認證速度會很慢,因為對每個請求都必須搜尋這個純文字檔案,對此,apache還支援把使用者資訊存入快速的資料庫檔案,mod_authn_dbm模組提供了authdbmuserfile指令,並可以用dbmmanage程式建立和操作這些資料庫。apache模組資料庫中還提供了許多其他第三方模組提供的認證選項。

最後,require指令設定了允許訪問受保護區域的使用者,下一節將對require指令作詳細說明。

組許可權

上述指令只允許乙個人(乙個叫rbowen的使用者)訪問這個目錄,但是多數情況下,都需要允許多人訪問,所以就要用到authgroupfile指令。

groupname: rbowen dpitts sungo rshersey

它只是每組一行的乙個用空格分隔的組成員列表。

現在,需要將.htaccess檔案修改成這樣:

authtype basic

authname "by invitation only"

authuserfile /usr/local/apache/passwd/passwords

authgroupfile /usr/local/apache/passwd/groups

require group groupname

現在,groupname組中的成員都在password檔案中有乙個相應的記錄,從而允許他們輸入正確的密碼進行訪問。

除了建立組檔案,還有另一種途徑允許多人訪問,就是使用如下指令:

require valid-user

使用上述指令,而不是require user rbowen,可以允許密碼檔案中的所有使用者使用正確的密碼進行訪問。通過為每個組建立乙個密碼檔案,這裡甚至允許列舉各個組,其優點是apache只需要檢查乙個檔案(而不是兩個),其缺點是,必須維護眾多密碼檔案,而且要確保authuserfile指定了乙個正確的密碼檔案。

對主機名和主機位址的認證

基於使用者名稱和密碼的認證只是方法之一,時常會有不需要知道來訪者是誰,只需要知道來自**的情況。

allowdeny指令可以允許或拒絕來自特定主機名或主機位址的訪問,同時,order指令告訴apache處理這兩個指令的順序,以改變過濾器。

這些指令的用法:

allow from address

address可以是乙個ip位址(或者ip位址的一部分),也可以是乙個完整的網域名稱(或者網域名稱的一部分),還可以同時指定多個ip位址和網域名稱。

deny from 205.252.46.165deny from host.example.com

deny from 192.101.205

deny from cyberthugs.com

moreidiots.com

deny from ke

order可以組合denyallow指令,以保證在允許乙個群體訪問的同時,對其中的一些又加以限制:

order deny,allow

deny from all

allow from dev.example.com

只列出allow指令不會得到你想要的結果,因為它在允許指定物件訪問的同時並不禁止其他未列出的物件的訪問。所以上例使用的方法是:首先拒絕任何人,然後允許來自特定主機的訪問。

啟用認證的問題

由於採用了basic認證的方法,每次向伺服器請求甚至重新整理乙個受保護的頁面或時都必須校驗使用者名稱和密碼,為此,必須開啟密碼檔案並逐行搜尋使用者名稱,因此,伺服器響應速度會受一些影響,受影響的程度與密碼檔案的大小成正比。

所以,對密碼檔案中的使用者總數存在乙個實際上的上限,此上限取決於特定的伺服器機器的效能,但是一般有幾百個使用者就會對響應速度有非常明顯的影響,在這種情況下,可以考慮用其他認證方法。

認證和授權

認證 一種是session會話狀態,資訊儲存在伺服器端 一種是客戶端傳送每乙個請求的同時帶乙個 secret access token 來驗證使用者。因為乙個 access token 可以用來確定乙個唯一的使用者和驗證這個使用者,api requests 應該總是通過 https 協議來傳輸,以防...

kubectl認證 授權 准入控制

kubernetes 認證及serviceaccount 服務賬號 kubernetes中apiservice是唯一訪問的入口 認證 授權 准入控制 認證方式 token ssl kubect和node都要雙向認證 k8s1.6以上增加了rbac認證,授權檢查 kuberadm是強制使用kubera...

認證 授權與准入控制

一 訪問控制概述 api server作為訪問kubernetes集群的閘道器,也是唯一入口 所有客戶端訪問集群都必須進行合法性檢驗 1 使用者身份鑑別 2 操作許可權驗證 3 是否符合全域性約束 4 所有驗證均通過才能訪問或存入資料到etcd中 客戶端認證操作 由 api server 配置的一到...