1. 程式人生 > >ubuntu lighttpd的許可權認證模組 mod_auth

ubuntu lighttpd的許可權認證模組 mod_auth

一、ubuntu安裝lighttpd

 Ubuntu 16.04 官方倉庫中包含了 Lighttpd,所以只需更新本地倉庫索引並使用 apt-get 指令即可安裝 Lighttpd。 

 

二、設定lighttpd

三、檢視lighttpd所屬程序

①檢視lighttpd所屬使用者組

ps -aux|grep lighttpd 發現lighttpd所屬使用者組為www-data

②檢視 passwd中是否包含www-data且配置內容如下紅字為重點

cat /etc/passwd|grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

③配置使用者名稱和密碼   

echo "linuxing:abc123">/etc/lighttpd/lighttpd.user

④檢視lighttpd配置檔案lighttpd.conf

 

三、配置auth_mod

cat /etc/lighttpd/conf-available/05-auth.conf 
# /usr/share/doc/lighttpd/authentication.txt.gz

server.modules                += ( "mod_auth" )

    auth.backend                 = "plain"
    auth.backend.plain.userfile  = "/etc/lighttpd/lighttpd.user"
    #auth.backend.plain.groupfile = "lighttpd.group"

    #auth.backend.ldap.hostname   = "localhost"
    #auth.backend.ldap.base-dn    = "dc=my-domain,dc=com"
    #auth.backend.ldap.filter     = "(uid=$)"

    auth.require                 = ( "/index.html" => 
                                   ( 
                      "method"  => "basic",
                      "realm"   => "Server Status WebSite",
                      "require" => "user=linuxing|user=abc123"
                ),
                "/server-config" => 
                                    ( 
                      "method"  => "basic",
                      "realm"   => "Server Config WebSite",
                      "require" => "valid-user"
                )
                                  )


四、啟動auth_mod功能方法

終端輸入   lighttpd-enable-mod auth

然後再重啟lighttpd  /etc/init.d/lighttpd restart

 

五、驗證方法  瀏覽器輸入ip/server-status

使用者名稱為linuxing

密碼為abc123

 

 

 

 

 

參考網址:https://blog.csdn.net/bytxl/article/details/42027995

參考內容:

網際網路是不安全的。在利用網際網路便利的同時,我們需要特別小心,特別是現在的搜尋引擎可是會到處鑽哦,要做好防止資料被盜用的準備。如果你也像我一樣,想對某個域、目錄或頁面進行密碼保護,下面就告訴你在Lighttpd下是如何進行的。

一、簡單模式
Lighttpd使用mod_auth模組可實現對域等進行使用者名稱、密碼保護的功能。這與Apache下用.htaccess實現的保護是類似的。
mod_auth的使用說明,請看:這裡。這裡以最簡單的basic明文方式說明。
1、修改配置檔案
在/etc/lighttpd/lighttpd.conf配置檔案中加入:

引用

# 啟用mod_auth模組
server.modules = (...,"mod_auth",...)
# 執行lighttpd服務的使用者名稱和組,後面定義密碼檔案時會用到
server.username            = "lighttpd"
server.groupname           = "lighttpd"
# 開啟auth的debug模式,方便除錯,正常後可以取消
auth.debug = 2
# 使用明文密碼,這是最簡單的方式,當然也有安全問題,見後面
auth.backend               = "plain"
# 定義使用者名稱、密碼存放的路徑
auth.backend.plain.userfile = "/etc/lighttpd/.lighttpd.user"
# 根據說明,下面的groupfile還未完全實現,不用設定咯
#auth.backend.plain.groupfile = "lighttpd.group"
# 定義要加密的路徑
auth.require               = ( "/server-status" =>
(
# 可以使用多種認證方式,這裡以basic為例
"method"  => "basic",
# 訪問時,對話方塊的提示資訊
"realm"   => "Server Status WebSite",
# 允許訪問的使用者名稱,用“|”號分割多個使用者
"require" => "user=linuxing|user=test01"
),
"/server-config" =>
(
"method"  => "basic",
"realm"   => "Server Config WebSite",
# valid-user用於表示所有合法的使用者
"require" => "valid-user"
)
)


2、生成密碼檔案
使用者名稱和密碼寫在同一個檔案裡面,並根據執行lighttpd服務的使用者給予適當的許可權,執行:

引用

# cat /etc/passwd|grep lighttpd
lighttpd:x:100:101:lighttpd web server:/srv/www/lighttpd:/sbin/nologin
# echo "linuxing:abc123" > /etc/lighttpd/.lighttpd.user
# chown lighttpd:lighttpd /etc/lighttpd/.lighttpd.user
# chmod 440 /etc/lighttpd/.lighttpd.user
# ll /etc/lighttpd/.lighttpd.user
-r--r----- 1 lighttpd lighttpd 16 Feb  6 12:45 .lighttpd.user
# service lighttpd restart


3、訪問
訪問http://ip/server-status或http://ip/server-config,則會提示:

輸入正確的使用者名稱(linuxing),密碼(abc123)後即可正常訪問。否則,會報401錯誤,error.log日誌顯示:

引用

2009-02-06 12:59:49: (http_auth.c.876) get_password failed
2009-02-06 12:59:52: (http_auth.c.876) get_password failed
2009-02-06 12:59:54: (http_auth.c.876) get_password failed


可見,在全域性部分定義了該auth.require,可以較好的保護了/server-status和/server-config頁面。需要注意的是,該頁面有mod_status提供,所以在載入模組部分,務必讓mod_auth比mod_status在前。

二、使用其他驗證方式
上面介紹的是最簡單的密碼驗證方式,但也存在很明顯的安全問題:

引用

a、basic模式下,使用者名稱和密碼在瀏覽器與伺服器之間的網路是明文傳輸的;
b、使用者名稱和密碼也是以明文方式存在在本地;


為避免這些問題,Lighttpd提供了其他驗證方式。

1、驗證方式的不同
DocsModAuth的介紹,有basic和digest兩種驗證方式,其各自支援不同的後臺密碼檔案儲存模式:

引用

basic auth:
該模式使用者名稱和密碼在網路中都是以base64編碼明文傳輸的,容易被擷取,不安全。支援的後臺密碼檔案儲存方式有:
- plain_
- htpasswd_ 
- htdigest_
- ldap_
digest auth:
該模式改為傳輸hashed值,相對比較安全。但支援的後臺密碼檔案儲存方式只有:
- plain_
- htdigest_


2、設定方法
根據選擇的驗證模式和後臺密碼檔案儲存方式不同,配置檔案和密碼儲存檔案生成的方式就不同了。記住,把後臺密碼儲存檔案設定為只允許執行lighttpd服務的使用者和組(如lighttpd)讀,其他使用者禁止訪問。

a、plain方式
正如前面提到的,把明文使用者名稱和密碼寫入後臺密碼儲存檔案,一行一個,格式為:

引用

username:password


b、htpasswd
這是利用Apache提供的htpasswd工具生成後臺密碼儲存檔案,它使用了crypt()加密函式:

引用

# htpasswd -m -c .lighttpd.user linuxing
# cat .lighttpd.user
linuxing:$apr1$o1ZZY/..$MO6rKCiwLXnIp8h.7PxvK1
# chown lighttpd.lighttpd .lighttpd.user
# chmod 440 .lighttpd.user


配置檔案中則為:

引用

# 定義後臺密碼檔案驗證方式
auth.backend               = "htpasswd"
# 定義後臺密碼儲存檔案的路徑
auth.backend.htpasswd.userfile = "/etc/lighttpd/.lighttpd.user"


c、htdigest方式
方法與htpasswd類似,也是藉助Apache提供的htdigest工具生成後臺密碼儲存檔案,但其有三列,除使用者名稱、密碼外,還包括realm(提示資訊),一行表示一個賬號,格式為:

引用

username:realm:(password)


其中(password)並不是明文的,而是由username、realm、password組合後,通過md5計算出來的,用命令來實現就是這樣:

引用

# echo -n "linuxing:Info Messages:abc123"|md5sum|cut -b -32
61ab4c1c5d8fea7b5d32c449993a114c


◎ 這裡,請特別關注,這裡的realm與lighttpd中使用到"realm"   => 部分必須一樣,也就是說使用者名稱、密碼和後臺密碼儲存檔案中的realm三部分都會作為驗證的依據。Wiki裡面沒有仔細說明,我當時在這裡就搞了很長時間。

生成後臺密碼儲存檔案:

引用

# htdigest -c .lighttpd.user 'Info Messages' linuxing
Adding password for linuxing in realm Info Messages.
New password:
Re-type new password:
# cat .lighttpd.user
linuxing:Info Messages:61ab4c1c5d8fea7b5d32c449993a114c
# chown lighttpd.lighttpd .lighttpd.user
# chmod 440 .lighttpd.user


配置檔案中則為:

引用

auth.backend               = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.lighttpd.user"
# 試試用digest驗證模式
auth.require               = ( "/server-status" =>
(
"method"  => "digest",
"realm"   => "Info Messages",
"require" => "user=linuxing"
)
)


◎ 記住咯,username、realm、password三部分都會驗證的,缺一不可。即使輸入的使用者名稱和密碼都與後臺儲存密碼的檔案相同,但realm與auth.require部分定義的不一樣,也是不能登陸的。
這裡可以把realm作為一個組的標識使用。

官方Wiki提供了一個方便易用的管理htdigest密碼檔案的指令碼:
(不過,這指令碼也有問題,就是realm不能有空格,即使用引號隔開也不行)

下載檔案

點選這裡下載檔案


使用方法是:

引用

更新或增加新使用者
$ lightdigest.sh -u USERNAME -r REALM_NAME -f PASSWORD_FILE_PATH
刪除舊使用者
$ lightdigest.sh -d -u USERNAME


最後還有一種方式,是使用ldap資料保留使用者名稱和密碼資訊,適用於多使用者的環境,但配置比較複雜,又需要的朋友,請看官方的Wiki介紹吧。

三、用於域或目錄的環境
只要把auth.require部分寫入虛擬主機部分的配置中即可,類似:

引用

$HTTP["url"] =~ "^/download|^/server-info" { 
        auth.require = (   "" => (   
                     "method"  => "digest",
                     "realm"   => "download archiv",
                     "require" => "user=linuxing|user=test01" 
                     )
        )
}



四、參考資料
DocsModAuth
Lighttpd setup a password protected directory (directories)
Set Apache Password Protected Directories With .htaccess File

http://hlee.iteye.com/blog/549981