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