httpd網頁身份認證,httpd身份認證

來源:互聯網
上載者:User

httpd網頁身份認證,httpd身份認證

本文目錄:
1.1 htpasswd命令
1.2 身份認證類基本指令
1.3 Require指令
1.4 web身份認證樣本

httpd對web身份認證的支援很豐富,提供的控制也非常細緻。無疑,功能豐富意味著模組多。關於完整的模組,見http://httpd.apache.org/docs/2.4/mod/ ,其中mod_authX_XXX都是和認證有關的模組。要實現最基本的帳號憑證存取控制,只需幾個常見的模組即可:mod_authz_core,mod_authz_user,mod_authz_host...。

1.1 htpasswd命令

htpasswd用於為指定使用者產生基於網頁使用者身份認證的密碼,由httpd-tools軟體包提供。支援3種密碼編譯演算法:MD5、SHA和系統上的crypt()函數,不指定演算法時,預設為md5。

htpasswd [ -c ] [ -m ] [ -D ] passwdfile usernamehtpasswd -b [ -c ] [ -m | -d | -p | -s ] [ -D ] passwdfile username passwordhtpasswd -n [ -m | -d | -s | -p ] usernamehtpasswd -nb [ -m | -d | -s | -p ] username password選項說明:passwdfile:包含使用者名稱及其密碼的使用者密碼檔案。如果使用了"-c"選項,則會建立或覆蓋檔案。不使用"-n"選項時必須指定passwdfile參數。username:為指定的使用者名稱建立密碼。如果該使用者記錄已存在,則更新。-c:建立使用者密碼檔案passwdfile,如果檔案已經存在則會覆蓋已存在的檔案。不能和"-n"一起使用。-n:在標準輸出中輸出結果,而不是將其寫入到使用者密碼檔案中。該選項會忽略使用者密碼檔案passwdfile參數。不能和"-c"選項一起使用。-m:使用MD5密碼編譯演算法。預設。-d:使用crypt()Function Compute密碼,不安全。-s:使用SHA密碼編譯演算法。安全。-P:強制不加密密碼,保持明文狀態,不安全。-B:強制bcrypt加密密碼,非常安全。-D:從使用者密碼檔案中刪除指定的使用者及其密碼。-b:使用批處理模式,即非互動模式,可以直接待加密的傳遞純文字密碼。password:指定要輸入的純文字密碼。只能在批處理模式中使用,即和"-b"一起使用。

例如:

(1).使用"-n"選項直接將結果輸出到標準輸出而不建立passwdfile。

[root@xuexi ~]# htpasswd -n JimNew password: Re-type new password: Jim:ZKHud9tziGucY

(2).使用批處理模式直接傳遞密碼。

[root@xuexi ~]# htpasswd -nb Jim 123456 ; htpasswd -nb Jim 123456Jim:r.BF8RVw56BOAJim:xXoNgOS8nN3LQ

發現密碼完全是隨機的。

(3).建立使用者密碼檔案passwdfile。

[root@xuexi ~]# htpasswd -cb Bobfile Bob 123456[root@xuexi ~]# cat Bobfile Bob:fvUxzB3kcnDPk

(4).刪除使用者檔案中的某使用者。

[root@xuexi ~]# htpasswd -D Bobfile Bob

(5).使用sha和md5密碼編譯演算法計算密碼。

[root@xuexi ~]# htpasswd -mb Bobfile Bob 123456[root@xuexi ~]# cat Bobfile Bob:$apr1$bllkodFt$GUmeb8hXngOAschs1SBgq0[root@xuexi ~]# htpasswd -sb Bobfile Bob 123456 [root@xuexi ~]# cat Bobfile  Bob:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=

1.2 身份認證類基本指令

AuthType:指定web身份認證的類型。有效值為none、basic、digest以及form。通常最基本的認證使用的是檔案認證,所以通常使用basic。
AuthName:設定身份認證時的提示資訊。
AuthUserFile file-path:指定web使用者認證列表。由htpasswd命令產生。
AuthGroupFile file-path:指定組認證檔案,檔案中分組格式為"mygroup: Jim Bob Alice"。如果檔案路徑為相對路徑,則相對於ServerRoot

基於basic類型的認證就這麼幾個指令,最主要的還是require指令的使用。更多的認證方法見官方手冊的auth類別模組。

1.3 Require指令

該指令只能放在Directory容器中,用於控制對目錄的存取權限。它的主要功能是由mod_authz_core模組提供,但有些身份認證類別模組也提供它額外的功能,這時它可以放在< Directory >、< Files >或< Location >容器中。

主要功能:

  • Require all granted
    無條件允許所有人訪問該目錄
  • Require all denied
    無條件拒絕所有人訪問該目錄
  • Require env env-var [env-var] ...
    只有給定的環境變數var-env已經定義才允許訪問該目錄
  • Require method http-method [http-method] ...
    只有給定的HTTP要求方法才允許訪問該目錄,如只允許GET才能訪問
  • Require expr expression
    只有給定的運算式為true才允許訪問該目錄

身份認證類別模組提供的require指令功能包括:

  • mod_authz_user為require指令提供的功能:
    • Require user userid [userid] ...:認證列表中只有指定的userid才能訪問
    • Require valid-user:認證列表中的所有使用者都可以訪問
  • mod_authz_groupfile為require指令提供的功能:
    • Require group group1 [group2] ...:指定組內的使用者都可以訪問
  • 本地檔案系統身份參考類:
    • Require file-owner:要求web使用者名稱必須和請求檔案的uid對應的username完全相同
    • Require file-group:要求web使用者名稱必須為請求檔案的gid組中的一員
  • mod_authz_host為require指令提供的ip和host功能:
    • Require ip 192.168.1.104 192.168.1.205
    • Require ip 10.1
    • Require ip 10 172.20 192.168.2
    • Require ip 10.1.0.0/255.255.0.0
    • Require ip 10.1.0.0/16
    • Require host www.example.org
    • Require host example.org
    • Require host .net example.edu
    • Require local

可以在require指令後緊跟not關鍵字,表示取反。例如"require not group group1"、"require not local"等。

還支援require條件容器,包括< RequireAll >、< RequireAny >和< RequireNone >,當require指令沒有寫在任何Require容器中時,它們隱式包含在一個< RequireAny >容器中。

  • < RequireAll >:其內封裝的Require指令必須全都不能失敗,且至少有一個成功時,該容器成功。如果其內所有指令既不成功又不失敗,則該容器中立。其餘所有情況都會導致該容器失敗。
  • < RequireAny >:其內封裝的Require指令只要有一個成功,該容器就成功。如果其內所有指令既不成功又不失敗,則該容器中立。其餘所有情況(即全部失敗時)都會導致該容器失敗。
  • < RequireNone >:其內封裝的Require指令只要有一個成功時該容器就失敗,否則就中立。

1.4 web身份認證樣本

以最常見的Basic認證方式為例。支援基於使用者的認證和基於組的認證。

1.4.1 基於使用者的認證

先建立一個web使用者及其密碼列表檔案。其內有4個使用者:Jim、Bob、Alice和Tom。

[root@xuexi ~]# htpasswd -cb /usr/local/apache/a_com.pass Jim 123456[root@xuexi ~]# htpasswd -b /usr/local/apache/a_com.pass Bob 123456[root@xuexi ~]# htpasswd -b /usr/local/apache/a_com.pass Alice 123456[root@xuexi ~]# htpasswd -b /usr/local/apache/a_com.pass Tom 123456

修改httpd設定檔,假設只有www.a.com中的a.com目錄才需要認證且只有Jim和Bob可以認證,而其他目錄以及www.b.com不需要認證,其他使用者認證不通過。

<VirtualHost 192.168.100.14:80>        ServerName www.a.com        DocumentRoot /usr/local/apache/htdocs/a.com        <Directory /usr/local/apache/htdocs/a.com>                AllowOverride Authconfig                AuthType Basic                AuthName "please enter your name & passwd"                AuthUserFile a_com.pass                Require user Jim Bob        </Directory></VirtualHost><VirtualHost 192.168.100.14:80>        ServerName www.b.com        DocumentRoot /usr/local/apache/htdocs/b.com</VirtualHost>

此處AuthUserFile使用的相對路徑,所以該檔案必須放在ServerRoot(我的測試環境ServerRoot為/usr/local/apache)下。且Require user行可以替換為"Require valid-user"表示a_com.pass中的所有使用者都允許認證。

然後重啟httpd,並修改用戶端hosts檔案。

192.168.100.14 www.a.com www.b.com

再測試訪問。

1.4.2 基於組的認證

基於組的認證只需建立一個組檔案,檔案中包含的是組名和組中使用者成員。

例如,將Tom和Alice加入到allow組,使它們也可以訪問a.com目錄。

[root@xuexi ~]# echo 'allow:Tom Alice' >/usr/local/apache/auth_group

修改設定檔,例如:

<VirtualHost 192.168.100.14:80>        ServerName www.a.com        DocumentRoot /usr/local/apache/htdocs/a.com        <Directory /usr/local/apache/htdocs/a.com>                AllowOverride Authconfig                AuthType Basic                AuthName "please enter your name & passwd"                AuthUserFile a_com.pass                AuthGroupFile auth_group                Require user Jim Bob                Require group allow        </Directory></VirtualHost><VirtualHost 192.168.100.14:80>        ServerName www.b.com        DocumentRoot /usr/local/apache/htdocs/b.com</VirtualHost>

再重啟進行測試。

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7634205.html註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支援能激發作者更大的寫作熱情,非常感謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.