У меня есть сервер lighttpd, с которого я хочу обслуживать некоторые файлы. К сожалению, сервер в настоящее время настроен на требование аутентификации по паролю, и я хочу, чтобы эти файлы были общедоступными.
Как я могу сделать так, чтобы файлы в определенном подкаталоге не требовали пароля?
В качестве дополнительного осложнения, большая часть вещей в файле конфигурации была настроена другими администраторами, поэтому я стараюсь быть очень осторожным, чтобы не нарушить существующие настройки безопасности.
# config stuff that I am hesitant to change
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/ssl/foo.pem"
ssl.ca-file = "/etc/pki/tls/certs/foo.cert"
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2
$HTTP["url"] !~ "^(/portal/.*|/js/.*|/css/.*|/icons/.*|/favicon\.ico)" {
auth.require = (
"/" =>(
"method" => "digest",
"realm" => "Authorized users only",
"require" => "valid-user"
)
)
}
$HTTP["url"] =~ "^/portal" {
auth.require = (
"/portal" => (
"method" => "digest",
"realm" => "portal users",
"require" => "valid-user"
)
)
url.redirect = ( "" => "/portal/")
}
$HTTP["remoteip"] !~ "1.2.3.4|5.6.7.8" {
url.access-deny = ( "" )
}
# new directory that I want to make public
$HTTP["url"] =~ "^/public($|/)" {
dir-listing.activate = "enable"
}
Я пробовал добавить /public/*
в регулярное выражение для первого $HTTP["url"] !~
блок, но это не сработало. Я также пробовал отключить ssl.engine
внутри блока, который соответствует /public($|/)
, но это тоже не сработало.
Эта установка отлично работает для меня, как уже было сказано в комментариях:
server.modules += ( "mod_auth" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/passwd"
$HTTP["url"] !~ "^(/portal/.*|/js/.*|/css/.*|/icons/.*|/favicon\.ico|/public/.*)" {
auth.require = (
"/" =>(
"method" => "digest",
"realm" => "Authorized users only",
"require" => "valid-user"
)
)
}
Оказывается ты жестяная банка отключите его выборочно, используя пустой список:
auth.require = ()
Для примера OP:
# new directory that I want to make public
$HTTP["url"] =~ "^/public($|/)" {
dir-listing.activate = "enable"
auth.require = ()
}
Помещение этого блока последним в файле гарантирует, что он переопределит все другие директивы, которые могут быть или не быть тем, что вы хотите, в зависимости от вашей настройки. У меня есть случай с несколькими виртуальными хостами с разными схемами аутентификации, но я хотел обойти все это для /.well-known/acme-challenge/
включить certbot --webroot
работать для получения сертификатов Let's Encrypt. Для моего примера:
##### Let's Encrypt
$HTTP["url"] =~ "^/.well-known/acme-challenge/" {
server.document-root = "/var/www/"
auth.require = ()
}