httpd網頁身份認證

来源:http://www.cnblogs.com/f-ck-need-u/archive/2017/10/07/7634205.html
-Advertisement-
Play Games

本文目錄:1.1 htpasswd命令1.2 身份認證類基本指令1.3 Require指令1.4 web身份認證示例 httpd對web身份認證的支持很豐富,提供的控制也非常細緻。無疑,功能豐富意味著模塊多。關於完整的模塊,見http://httpd.apache.org/docs/2.4/mod/ ...


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

例如:

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

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

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

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

Jim: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

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Tips 原文作者:Víctor López Ferrando 原文地址: "30 interesting commands for the Linux shell" 這些是我收集了多年的Linux shell的30個有趣的命令和提示。 1. 監控命令(每2秒運行一次) 2. 使用一個埠殺死程式 ...
  • 1. 運行環境: OS:CentOS 7.3 / Python: 2.7.3/ Pip: 9.0.1 / Zabbix:3.2.8 / Redis:微軟雲Redis 3.2.7 Zabbix官方提供的監控模板。 項目地址:https://github.com/blacked/zbx_redis_te ...
  • [1]分類 [2]RPM [3]RPM安裝 [4]查詢與校驗 [5]YUM [6]源碼包安裝 [7]腳本安裝 [8]Nodejs安裝 ...
  • 1. Graylog2 簡介 Graylog 是一個簡單易用、功能較全面的日誌管理工具,相比 ELK 組合, 優點: 部署維護簡單,一體化解決方案,不像ELK三個獨立系統集成。 查相比ES json語法,搜索語法更加簡單,如 source:mongo AND reponse_time_ms:>500 ...
  • 教研室新進機器人,組內成員需要對其做一下必要的瞭解。手冊純英文內容多,這裡挑重點介紹幾條: 感測器: 作為輸入設備,Tiago對周圍環境感知完全通過各種感測器實現。配備的感測器有以下幾種: 1,激光測距儀:0.05-10m 15Hz 2,聲吶:0.03-1m 40kHz 3,慣性測量感測器:MPU ...
  • 本文目錄:1.1 錯誤日誌ErrorLog1.2 訪問日誌CustomLog1.3 日誌輪替:rotatelogs工具1.4 日誌輪替:cronolog工具1.5 rotatelogs和cronolog的比較 需要記錄的日誌類型有:錯誤日誌ErrorLog、訪問日誌CustomLog。錯誤日誌一般採 ...
  • 我們將ASP.NET程式從IIS6移植到IIS7,可能運行提示以下錯誤: HTTP 錯誤 500.23 - Internal Server Error 檢測到在集成的托管管道模式下不適用的 ASP.NET 設置。 為什麼會出現以上錯誤? 在IIS7的應用程式池有兩種模式,一種是“集成模式”,一種是“ ...
  • 主要包括Alias指令、AliasMatch、Redirect、RedirectMatch、ScriptAlias和ScriptAliasMatch。它們由mod_alias模塊提供,該模塊用於提供簡單的路徑映射和重定向需求,更複雜的內容見URL重寫。 其中ScriptAlias用法和Alias完全 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...