Назад | Перейти на главную страницу

Удалить аутентификацию пароля Lighttpd для одного пути

У меня есть сервер 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 = ()
}