1. 程式人生 > >apache使用者名稱和密碼驗證

apache使用者名稱和密碼驗證

一、Apache伺服器已經內建使用者驗證機制

大家只要適當的加以設定,便可以控制網站的某些部分要使用者驗證。前期準備,必須已經安裝apache,如果還沒安裝,或者對安裝很模糊的話,
     第1步:我們在/var/www(apache的主頁根目錄)下建立一個test目錄
             mkdir /var/www/test
     第2步:然後我們編輯httpd.conf
             新增
                   Alias /test"/var/www/test"
                   Options Indexes MultiViews
                   AllowOverride AuthConfig #表示進行身份驗證
                   Order allow,deny
                   Allow from all
     #AllowOverride AuthConfig 表示進行身份驗證這是關鍵的設定
     第3步:在/var/www/test建立.htaccess檔案
             vi /var/www/test/.htaccess
                    AuthName "frank share web"
                    AuthType Basic
                    AuthUserFile /var/www/test/.htpasswd
                    require valid-user
        #AuthName 描述,隨便寫
        #AuthUserFile /var/www/test/.htpasswd
        #require valid-user 或者 require user frank 限制是所有合法使用者還是指定使用者
        #密碼檔案推薦使用.htpasswd,因為apache預設系統對“.ht”開頭的檔案預設不允許外部讀取,安全係數會高一點哦。
     第4步:就是建立apache的驗證使用者
          htpasswd -c /var/www/test/.htpasswd frank
          #第一次建立使用者要用到-c 引數 第2次新增使用者,就不用-c引數
            如果你們想修改密碼,可以如下
                              htpasswd -m .htpasswd frank
     第5步:
     ok,重啟apache服務,然後訪問 http://你的網站地址/test 如果順利的話,應該能看到一個使用者驗證的彈出視窗,只要填入第4步建立的使用者名稱和密碼就行
後話,為了伺服器的效能,一般不推薦使用AllowOverride AuthConfig或者AllowOverride ALL,因為這會使伺服器會不斷的去尋找.htaccess,從而影響伺服器的效能,一般我們把一些後臺管理介面或者其他特殊目錄可能需要加驗證這個需求。

二、經常上網的讀者會遇到這種情況:

     訪問一些網站的某些資源時,瀏覽器彈出一個對話方塊,要求輸入使用者名稱和密碼來獲取對資源的訪問。這就是使用者認證的一種技術。使用者認證是保護網路系統資源的第一道防線,它控制著所有登入並檢查訪問使用者的合法性,其目標是僅讓合法使用者以合法的許可權訪問網路系統的資源。基本的使用者認證技術是“使用者名稱+密碼”。

  Apache是目前流行的Web伺服器,可執行在Linux、Unix、Windows等作業系統下,它可以很好地解決“使用者名稱+密碼”的認證問題。Apache使用者認證所需要的使用者名稱和密碼有兩種不同的存貯方式:一種是文字檔案;另一種是MSQL、Oracle、MySQL等資料庫。下面以Linux的Apache為例,就這兩種存貯方式,分別介紹如何實現使用者認證功能,同時對Windows的Apache使用者認證作簡要的說明。
  1)採用文字檔案儲存
  這種認證方式的基本思想是:Apache啟動認證功能後,就可以在需要限制訪問的目錄下建立一個名為.htaccess的檔案,指定認證的配置命令。當用戶第一次訪問該目錄的檔案時,瀏覽器會顯示一個對話方塊,要求輸入使用者名稱和密碼,進行使用者身份的確認。若是合法使用者,則顯示所訪問的頁面內容,此後訪問該目錄的每個頁面,瀏覽器自動送出使用者名稱和密碼,不用再輸入了,直到關閉瀏覽器為止。以下是實現的具體步驟:
  以超級使用者root進入Linux,假設Apache 1.3.12已經編譯、安裝到了/usr/local/apache目錄中。預設情況下,編譯Apache時自動加入mod_auth模組,利用此模組可以實現“使用者名稱+密碼”以文字檔案為儲存方式的認證功能。
  1.修改Apache的配置檔案/usr/local/apache/conf/httpd.conf,對認證資源所在的目錄設定配置命令。下例是對/usr/local/apache/htdocs/members目錄的配置:
  <Directory /usr/local/apache/htdocs/members>
  Options Indexes FollowSymLinks
  allowoverride authconfig
  order allow,deny
  allow from all
  </Directory>
  其中,allowoverride authconfig一行表示允許對/usr/local/apache/htdocs/ members目錄下的檔案進行使用者認證。
  2.在限制訪問的目錄/usr/local/apache/htdocs/members下建立一個檔案.htaccess,其內容如下:
  AuthName "會員區"
  AuthType basic
  AuthUserFile/usr/local/apache/members.txt
  require valid-user
  說明:檔案.htaccess中常用的配置命令有以下幾個:
  1) AuthName命令:指定認證區域名稱。區域名稱是在提示要求認證的對話方塊中顯示給使用者的(見附圖)。
  2)AuthType命令:指定認證型別。在HTTP1.0中,只有一種認證型別:basic。在HTTP1.1中有幾種認證型別,如:MD5。
  3) AuthUserFile命令:指定一個包含使用者名稱和密碼的文字檔案,每行一對。
  4) AuthGroupFile命令:指定包含使用者組清單和這些組的成員清單的文字檔案。組的成員之間用空格分開,如:
  managers:user1 user2
  5) require命令:指定哪些使用者或組才能被授權訪問。如:
  require user user1 user2(只有使用者user1和user2可以訪問)
  requiresgroupsmanagers (只有組managers中成員可以訪問)
  require valid-user (在AuthUserFile指定的檔案中任何使用者都可以訪問)
  3.利用Apache附帶的程式htpasswd,生成包含使用者名稱和密碼的文字檔案:/usr/local/apache/members.txt,每行內容格式為“使用者名稱:密碼”。
  #cd /usr/local/apache/bin
  #htpasswd -bc ../members.txt user1 1234
  #htpasswd -b ../members.txt user2 5678
  文字檔案members.txt含有兩個使用者:user1,口令為1234;user2,口令為5678。注意,不要將此文字檔案存放在Web文件的目錄樹中,以免被使用者下載。
  欲瞭解htpasswd程式的幫助,請執行htpasswd -h。
  當用戶數量比較少時,這種方法對使用者的認證是方便、省事的,維護工作也簡單。但是在使用者數量有數萬人,甚至數十萬人時,會在查詢使用者上花掉一定時間,從而降低伺服器的效率。這種情形,應採用資料庫方式。
  2)採用資料庫儲存
  目前,Apache、PHP4、MySQL三者是Linux下構建Web網站的最佳搭檔,這三個軟體都是免費軟體。將三者結合起來,通過HTTP協議,利用PHP4和MySQL,實現Apache的使用者認證功能。
  只有在PHP4以Apache的模組方式來執行的時候才能進行使用者認證。為此,在編譯Apache時需要加入PHP4模組一起編譯。假設PHP4作為Apache的模組,編譯、安裝Apache到/usr/local/apache目錄,編譯、安裝MySQL到/usr/local/mysql目錄。然後進行下面的步驟:
  1.在MySQL中建立一個數據庫member,在其中建立一個表users,用來存放合法使用者的使用者名稱和密碼。
  1)用vi命令在/tmp目錄建立一個SQL指令碼檔案auth.sql,內容為:
  drop database if exists member;
  create database member;
  use member;
  create table users (
  username char(20) not null,
  password char(20) not null,
  );
  insertsintosusers values("user1",password("1234"));
  insertsintosusers values("user2",password("5678"));
  2)啟動MySQL客戶程式mysql,執行上述SQL指令碼檔案auth.sql的命令,在表users中增加兩個使用者的記錄。
  #mysql -u root -pmypwd</tmp/auth.sql
  2.編寫一個PHP指令碼標頭檔案auth.inc,程式內容為:
  <?php
  function authenticate() {
  Header('WWW-authenticate: basic realm="會員區"');
  Header('HTTP/1.0 401 Unauthorized');
  echo "你必須輸入正確的使用者名稱和口令。 ";
  exit;
  }
  function CheckUser(, ) {
  if ( == "" || == "") return 0;
   = "SELECT username,password FROM usersswheresusername='' and password=password('')";
   = mysql_connect('localhost', 'root', 'mypwd');
  mysql_select_db('member',);
   = mysql_query(, );
  =mysql_num_rows();
  mysql_close();
  if (>0) {
  return 1; //有效登入
  } else {
  return 0; //無效登入
  }
  }
  ?>
  函式Authenticate()的作用是利用函式Header('WWW-authenticate: basic realm="會員區"'),向瀏覽器傳送一個認證請求訊息,使瀏覽器彈出一個使用者名稱/密碼的對話方塊。當用戶輸入使用者名稱和密碼後,包含此PHP指令碼的URL將自動地被再次呼叫,將使用者名稱、密碼、認證型別分別存放到PHP4的三個特殊變數:、、,在PHP程式中可根據這三個變數值來判斷是否合法使用者。Header()函式中,basic表示基本認證型別,realm的值表示認證區域名稱。
  函式Header('HTTP/1.0 401 Unauthorized')使瀏覽器使用者在連續多次輸入錯誤的使用者名稱或密碼時接收到HTTP 401錯誤。
  函式CheckUser()用來判斷瀏覽器使用者傳送來的使用者名稱、密碼是否與MySQL資料庫的相同,若相同則返回1,否則返回0。其中mysql_connect('localhost', 'root', 'mypwd')的資料庫使用者名稱root和密碼mypwd,應根據自己的MySQL設定而改變。
  3.在需要限制訪問的每個PHP指令碼程式開頭增加下列程式段:
  <?php
  require('auth.inc');
  if (CheckUser(,)==0) {
  authenticate();
  } else {
  echo "這是合法使用者要訪問的網頁。"; //將此行改為向合法使用者輸出的網頁
  }
  ?>
  把需要向合法使用者顯示的網頁內容放到else子句中,取代上述程式段的一行:
  echo "這是合法使用者要訪問的網頁。";
  這樣,當用戶訪問該PHP指令碼程式時,需要輸入使用者名稱和密碼來確認使用者的身份。
  Windows的Apache使用者認證
  1.採用文字檔案存放使用者名稱和密碼時,其方法同前,但需要注意的是表示路徑的目錄名之間、目錄名與檔名之間一律用斜線“/”分開,而不是反斜線“”。
  2.採用MySQL資料庫存放使用者名稱和密碼時,首先按下列方法將PHP 4.0.3作為Apache的模組來執行,然後按上述“採用資料庫儲存使用者名稱和密碼的使用者認證”的方法完成。
  1)下載Windows版的Apache 1.3.12、PHP 4.0.3、MySQL 3.2.32,將三個軟體分別解壓、安裝到C:pache、C:PHP4、C:mysql目錄。
  2) C:PHP4SAPI目錄有幾個常用Web伺服器的PHP模組檔案,將其中php4apache.dll拷貝到Apache的modules子目錄(C:pachemodules)。
  3)修改Apache的配置檔案C:pachenfhttpd.conf,增加以下幾行:
  LoadModule php4_module modules/ php4apache.dll
  AddType application/x-httpd-php .php3
  AddType application/x-httpd-php-source .phps
  AddType application/x-httpd-php .php
  第一行使PHP4以Apache的模組方式執行,這樣才能進行使用者認證,後三行定義PHP指令碼程式的副檔名。
  4)在autoexec.bat檔案的PATH命令中增加PHP4所在路徑“C:PHP4”,重新啟動電腦。

三、apache排除特定目錄地址實現方法

     我們經常會碰到要在apache排除特定目錄地址,下面我來給各位朋友詳細介紹實現方法,有需要參考的朋友可學習學習。同事看到http://ip/a這個url地址之後,要求改成訪問a目錄,url地址就是http://ip,b目錄是軟連結在a目錄中,還要求訪問a目錄是有apache身份認證的,而訪問http://ip/b是沒有身份認證的,下面就是我的解決方案.

 系統:centos 5.5
 環境:lamp環境
1.修改apache配置檔案

程式碼如下 複製程式碼
vi /etc/httpd/conf/httpd.conf
NameVirtualHost 192.168.1.104:80

<VirtualHost 192.168.1.104:80>
ServerAdmin
[email protected]

directoryIndex  index.html index.php index.htm index.shtml login.php
ServerName 192.168.1.104
DocumentRoot /var/www/vhosts/wwwroot/a
<Directory "/var/www/vhosts/wwwroot/a">
   Options -Indexes

   AllowOverride All

   Order allow,deny
   Allow from all

</Directory>
</VirtualHost>

把這兩項指向a目錄

程式碼如下 複製程式碼
DocumentRoot /var/www/vhosts/wwwroot/a
<Directory "/var/www/vhosts/wwwroot/a">


儲存後,重啟apache.

程式碼如下 複製程式碼
service httpd restart


2.去a目錄下新增修改.htaccess檔案

程式碼如下 複製程式碼
vi /var/www/vhosts/wwwroot/a/.htaccess
AuthUserFile    /var/www/vhosts/wwwroot/.htpasswd
AuthName        "Please Enter Your Password"
AuthType        Basic
Require         valid-user

3.去b目錄下新增修改.htaccess檔案

程式碼如下 複製程式碼
vi /var/www/vhosts/wwwroot/b/.htaccess
Satisfy Any
Order Deny,Allow
Allow from all

這樣就可以讓b目錄不被身份認證限制住.

4.軟鏈b目錄到a目錄中

程式碼如下 複製程式碼
ln -s /var/www/vhosts/wwwroot/b/ /var/www/vhosts/wwwroot/a/b

點選檢視原圖

5.驗證



好了,大家可以看到訪問http://ip是有apache身份認證的,訪問http://ip/b是沒有apache身份認證的


相關推薦

apache使用者名稱密碼驗證

一、Apache伺服器已經內建使用者驗證機制 大家只要適當的加以設定,便可以控制網站的某些部分要使用者驗證。前期準備,必須已經安裝apache,如果還沒安裝,或者對安裝很模糊的話,      第1步:我們在/var/www(apache的主頁根目錄)下建立一個test目

python--學習--用戶名密碼驗證

python--練習--用戶名和密碼驗證#!/usr/bin/python3user=‘whoooo‘password="1234567" name=input("請輸入用戶名:")namepasswd=input("請輸入密碼:")count1=1

樹莓派 | 修改樹莓派3熱點的名稱密碼

開篇 在網上找了很久也沒找到怎麼修改熱點的名稱和密碼有關的資料,恰好自己發現了hostapd,此篇獻給像我這樣的小白。 教程 前提是使用的Yahboom_raspberrypi_8G_Router.img這個映象,一個自帶熱點的映象。 一、設定樹莓派3熱點的名稱和密

Python之——獲取電腦連線過的所有wifi名稱密碼

不多說,上程式碼: # -*- coding: UTF-8 -*- import os import sys reload(sys) sys.setdefaultencoding('utf-8') # 定義一個函式checkWIFI,獲取電腦連線過的所有wifi名

Android WIFI開發、掃描、連線密碼驗證

網上關於如何用程式碼設定wifi的文章一搜一大堆,我在此就不再添亂了,我就試著給大家談一談我遇到的問題吧。 首先,我在做有系統定製某App的wifi模組的專案需求時候,系統預設在出廠設定的時候wifi 是關閉的,當開啟連線wifi(獲取wifi資訊列表)的

postman如何繞過登入賬戶密碼驗證,進行介面測試的方法

實測於:2019.01.08 參考原文:https://yq.aliyun.com/ziliao/403942 一、獲取登入後的cookie資料 1.開啟瀏覽器; 2.啟用開發者模式(F12鍵); 3.在開發者模式下執行:先開啟network,再點選all; 4.再回到使用者介面執行常規的登入

windows下利用python 2.7獲取電腦上所有的wifi名稱密碼

# -*- coding: UTF-8 -*- import os import sys reload(sys) sys.setdefaultencoding('utf-8') # 定義一個函式checkWIFI,獲取電腦連線過的所有wifi名稱和密碼,結果以列表形式返回

Win10系統修改主機名、用戶名稱密碼、以及C盤中的用戶文件夾名

.cn nis windows10 jpg 新建 修改主機名 寫在前面 image 用戶 寫在前面 近期重新安裝了Ubuntu16.04系統,同時也修改了Windows10系統的用戶名、密碼,還有C盤用戶文件夾名稱。對於Linux和windows系統來說,修改名稱基

php配置open_basedir後及Apache對應配置 Yii驗證碼無法出現解決方法

本來沒有考慮這個問題,是對絕對路徑下的檔案進行讀寫的時候報了錯,使用的是fopen()函式 fopen("c:\\cmd.txt","r"); 出現以下錯誤提示: Warning: fopen("c:\\cmd.txt","r") - No such

Linux使用git命令跳過每次的使用者名稱密碼驗證

1、切換到使用者目錄下,依次執行命令     cd ~      git config --global credential.helper store 2、執行之後會在使用者目錄下.gitconfig檔案中增加     [credential]         he

MVC資料驗證--使用者名稱密碼驗證

     網上很多部落格都講到了資料驗證的問題,但總有些問題是我這實現不了的,所以綜合了很多,才實現了我想要的結果,把實現的程式碼貼上到這裡,希望能給打家提供幫助。 實現效果圖如下:         

PowerShell驗證用戶名密碼

PowerShell AD 驗證用戶名和密碼通常會在內部進行定期掃描,以防止弱密碼的使用。當然,掃描時大家要註意不要超過最大錯誤次數,以免造成鎖定密碼驗證的方法這裏涵蓋了兩種,一種是域用戶,一種是本地用戶域用戶的驗證方法:$Try = New-Object System.DirectoryServic

SSM框架整合Apache Shiro,實現安全登入驗證許可權驗證功能

第一部分 Apache Shiro的簡介  1、什麼是 apache shiro : Apache Shiro是一個功能強大且易於使用的Java安全框架,提供了認證,授權,加密,和會話管理 如同 spring security 一樣都是是一個許可權安全框架,但是與Spri

js正則表達式密碼驗證必須包含數字字母

tex 正則表達式 數字和字母 js正則表達式 text 需要 表達式 分享圖片 code 寫註冊頁面的時候需要這樣的功能 一條正則表達式驗證方式: /^(?=.*?[a-z)(?=.*>[A-Z])(?=.*?[0-9])[a-zA_Z0-9]{6,10}$/ 多

密碼錯誤次數管理圖形驗證碼管理介面實現

在開發中,登入介面一般會校驗密碼,當密碼錯誤次數達到一定次數(閥值)就啟用圖形驗證碼校驗,此舉的目的主要是為了防止暴力破解密碼。基於此,我抽取了密碼次數管理介面和驗證碼校驗。 錯誤次數管理器: import cn.palmte.anfang.model.Member;

MySQL5.7MySQL8.0調整密碼驗證規則

MySQL 5.7 進行如下設定 mysql> set global validate_password_policy=0; mysql> set global validate_password_length=1; 在MySQL8.0中執行以上程式碼會報如下

django 使用form驗證用戶名密碼

邏輯 for 正常 elf password none 文件 err inpu form驗證可以減少查詢數據庫,所以代碼先預先驗證,有問題可以返回給前端顯示 1.在users文件夾下新建forms.py文件,用來驗證用戶名和密碼是否為空,密碼長度是否大於6 # -*- co

django 使用form驗證使用者名稱密碼

form驗證可以減少查詢資料庫,所以程式碼先預先驗證,有問題可以返回給前端顯示 1.在users資料夾下新建forms.py檔案,用來驗證使用者名稱和密碼是否為空,密碼長度是否大於6 # -*- coding: utf-8 -*- # 作者:神祕藏寶室 # 日期:2018/12/30 21:56 from

基於SSH的使用者名稱密碼驗證免密登入原理

關於SSH你只需要瞭解這些 SSH即安全外殼協議:專為遠端登入會話和其他網路服務提供安全性的協議,通過使用SSH,你可以把所有傳輸的資料進行加密。 瞭解OpenSSH OpenSSH是SSH的免費開源實現,是使用SSH透過計算機網路加密通訊的實現。它是

Apache James使用者資訊的資料庫儲存密碼問題

本文主要解決兩個問題:一個是如何將James的使用者資訊儲存到資料庫中,二是在進行James二次開發時,如何處理密碼問題。本文面向對James有一定使用經驗的使用者,對於James的初學者,請先閱讀我的另一篇文章《Apache James使用入門》。 一、James簡介Apache James(Java Ap