mod_auth

mod_auth 要求客户端使用用户名和密码进行身份验证。它支持基本认证方法(摘要认证暂不支持),以及纯文本、htpasswd 和 htdigest 后端。

重要提示:您需要在生成内容之前放置身份验证操作!如果内容处理程序已激活(例如php、static或dirlist),身份验证将被忽略!

  • 基本认证
    “基本”方法在网络上以明文(Base64编码)传输用户名和密码,如果不与客户端和服务器之间的加密通信通道结合使用,可能会导致安全问题。
    建议将HTTPS与基本认证结合使用。
  • 摘要认证(暂不支持)
    “摘要”方法仅在网络上传输哈希值,这在不安全的网络(如互联网)中为加强认证过程做了大量工作。
    “摘要”方法不适用于htpasswd后端,仅适用于纯文本和htdigest。

注意:摘要认证方法在Internet Explorer < 7中存在问题。如果这对您来说是个问题,请改用基本认证。(无论如何,目前都不支持)

auth.plain (操作)

需要使用纯文本文件进行身份验证

auth.plain options;
选项
一个包含以下条目的键值表
方法
“basic” 或 “digest” - 目前仅支持 “basic”,但您仍然需要指定它。
领域
在“需要身份验证”响应中发送给浏览器的领域名称;也用于htdigest的哈希值中。
文件
后端数据的文件名
TTL
(可选)在多少秒后,如果密码文件发生更改并再次需要时,lighty会重新加载该文件(默认为10秒)

需要使用包含以换行符 (\n) 分隔的用户:密码对的纯文本文件进行身份验证。

auth.htpasswd (操作)

需要使用htpasswd文件进行身份验证

auth.htpasswd options;
选项
一个包含以下条目的键值表
方法
仅支持“basic”
领域
在“需要身份验证”响应中发送给浏览器的领域名称;也用于htdigest的哈希值中。
文件
后端数据的文件名
TTL
(可选)在多少秒后,如果密码文件发生更改并再次需要时,lighty会重新加载该文件(默认为10秒)
  • 需要使用包含以换行符 (\n) 分隔的用户:加密密码对的htpasswd文件进行身份验证
  • 密码使用crypt(3)加密,请使用Apache的htpasswd二进制文件管理该文件
    • 支持以“$apr1$”开头的哈希值(htpasswd -m)
    • 支持以“{SHA}”开头的哈希值(后跟sha1_base64(password),htpasswd -s)

auth.htdigest (操作)

需要使用htdigest文件进行身份验证

auth.htdigest options;
选项
一个包含以下条目的键值表
方法
“basic” 或 “digest” - 目前仅支持 “basic”,但您仍然需要指定它。
领域
在“需要身份验证”响应中发送给浏览器的领域名称;也用于htdigest的哈希值中。
文件
后端数据的文件名
TTL
(可选)在多少秒后,如果密码文件发生更改并再次需要时,lighty会重新加载该文件(默认为10秒)
  • 需要使用包含以换行符 (\n) 分隔的用户:领域:哈希密码三元组的htdigest文件进行身份验证
  • 哈希值与领域绑定,因此不重置密码就无法更改领域
  • 密码保存为(修改过的)MD5哈希值
    md5hex(用户名 + ":" + 领域 + ":" + 密码)

auth.deny (操作)

处理带有“401 Unauthorized”的请求

auth.deny;

auth.debug (选项)

启用调试输出

auth.debug value;
默认值:false

示例

setup {
	module_load "mod_auth";
}

#/members/ is for known users only
if request.path =^ "/members/" {
	auth.plain [ "method" => "basic", "realm" => "members only", "file" => "/etc/lighttpd/users.txt"];
	if req.env["REMOTE_USER"] !~ "^(admin1|user2|user3)$" { auth.deny; }
}

示例

您也可以使用mod_lua插件 contrib/core.lua 中的 auth.require_user 进行 REMOTE_USER 检查

setup {
	module_load ("mod_auth", "mod_lua");
	lua.plugin "contrib/core.lua";
}

#/members/ is for known users only
if request.path =^ "/members/" {
	auth.plain [ "method" => "basic", "realm" => "members only", "file" => "/etc/lighttpd/users.txt"];
	auth.require_user ("admin1", "user2", "user3");
}