OpenBSD httpd 웹 서버의 하위 디렉토리에 대한 인증을 요구하는 방법은 무엇입니까?

OpenBSD httpd 웹 서버의 하위 디렉토리에 대한 인증을 요구하는 방법은 무엇입니까?

VPS를 실행 중입니다.오픈BSD 7.4x64내 개인 웹 페이지를 호스팅합니다. 이 웹 페이지는 Apache 서버 대신 OpenBSD에서 제공하는 기본 http 데몬을 사용합니다. 나는 내 사이트의 대부분이 이 사이트를 방문하는 모든 사람에게 공개되기를 원하지만 개인 정보 보호를 위해 특정 페이지는 인증된 사용자에게만 표시되기를 원합니다. 이를 달성하는 방법에 대한 문서를 온라인에서 검색했지만 대부분 빈손으로 나왔습니다.

지금까지 사용자에게 사용자 이름과 비밀번호를 묻는 authenticate명령문을 파일에 추가한 다음 보호된 영역에 대해 이전에 만든 파일을 확인 해야 한다는 것을 알았습니다 . 나는 또한 한 사람이 각각 다른 파일을 가진 여러 개의 "영역"을 가질 수 있다는 것을 발견했습니다. 내 문제는 인증이 필요하고 올바른 정보를 받은 후 사용자가 통과할 수 있도록 파일을 올바르게 설정할 수 없다는 것입니다 ./etc/httpd.conf.htpasswd.htpasswd/etc/httpd.conf

OpenBSD의 기본 http 데몬 채택률은 적어도 Apache 서버의 채택률에 비해 여전히 상대적으로 낮은 것으로 보입니다. OpenBSD의 맨페이지 외에는 이것이 어떻게 작동하는지에 대한 철저한 설명을 찾지 못했고 많은 사람들이 매우 철저하다고 말하지만 여전히 완전히 이해하는 데 어려움을 겪고 있습니다.

이것은 나에게 매우 새로운 일이며 실제로 이 모든 것을 먼저 설정할 수 밖에 없었습니다.대본은 다른 사람이 썼어요그리고 따라와그들의 지시.

모든 것을 요약하자면,폴더/디렉터리와 모든 하위 폴더/하위 디렉터리를 반복적으로 비밀번호로 보호하고 싶습니다.이것은 내 authenticate "realm" with "[.htpasswd file]"에 추가하는 것과 유사하다고 생각합니다 . 문제는 이 작업을 시도할 때 서버가 비밀번호를 묻는 메시지만 표시하고 비밀번호가 이전에 만든 자격 증명과 일치하는지 여부에 관계없이 즉시 다시 묻는 메시지를 표시한다는 것입니다. 비밀번호 프롬프트를 클릭하면 서버가 페이지를 제공합니다.serverhttpd.conf.htpasswdcancel"401 Unauthorized"

다음은 무한한 비밀번호 문제가 발생하는 구성입니다.

prefork 5

types {
  include "[TYPES_FILE_LOCATION]"
}

server "[DOMAIN_NAME.COM]" {
  listen on * port 80
  location * {
    block return 301 "https://$HTTP_HOST$REQUEST_URI"
  }
  location "/.well-known/acme-challenge/*" {
    root "/acme"
    request strip 2
  }
}

server "[DOMAIN_NAME.COM]" {
  listen on 127.0.0.1 port 8080
  default type text/html

[*** PROBLEM HERE v ***]
  location "/[PROTECTED_FOLDER]" {
    authenticate "realm" with "[.HTPASSWD_LOCATION]"
  }
[*** PROBLEM HERE ^ ***]

  location "/pub/*" {
    directory auto index
  }
}

이 구성은 일반 https 연결 및 http -> https 연결에 작동합니다.

나도 시도했다

[*** PROBLEM HERE v ***]
  location "/[PROTECTED_FOLDER]/*" {
    authenticate "realm" with "[.HTPASSWD_LOCATION]"
  }
[*** PROBLEM HERE ^ ***]

비슷한 효과를 얻습니다.

다음은 users.htpasswd 파일 및 모든 상위 디렉터리에 대한 권한입니다.

drwxr-xr-x  13 root  wheel   512 Nov 29 19:00 /
drwxr-xr-x  27 root  wheel   512 Nov 15 05:22 /var
drwxr-xr-x  11 root  daemon  512 Jan  1 23:20 /var/www/
-rw-------   1 www   daemon   68 Jan  1 23:29 /var/www/users.htpasswd

내가 여기서 뭘 잘못하고 있는지 아는 사람 있나요? 제가 놓친 리소스가 있나요? 지금까지 제가 찾은 리소스 중 일부는 다음과 같습니다.

비슷한 질문 #1-misc.openbsd.narkive.com

비슷한 질문 #2 - reddit.com/r/openbsd 파일

httpd.conf 매뉴얼 페이지 - man.openbsd.org 파일

어떤 팁/도움말/포인터라도 대단히 감사하겠습니다.

답변1

chroot이 최소 구성은 기본값이 다음 과 같다고 가정할 때 효과적 입니다 /var/www.

server * {
  listen on * port 80
  root "/htdocs/default"
  directory auto index

  location "/protected/" {
    authenticate "realm" with "/auth/htpasswd"
  }
}

types {
  include "/usr/share/misc/mime.types"
}

/보호된 디렉터리의 뒤에 오는 이름을 기록해 두십시오. 구성 파일을 너무 많이 편집했기 때문에 이 파일이 있는지 알 수 없습니다.

mkdir /var/www/htdocs/default              # Server document root
mkdir /var/www/htdocs/default/protected    # Protected subdirectory

mkdir /var/www/auth                        # Directory to store htpasswd
htpasswd /var/www/auth/htpasswd test       # User "test"; set your own password
chown www /var/www/auth/htpasswd           # Fix ownership

rcctl enable httpd                         # Enable the service
rcctl restart httpd                        # (Re)start the web server

location "/pub/*"include 와일드카드와 같은 지시문을 사용하려면 를 사용해야 하지만 충분하다고 location match "/pub/*"생각합니다 .location "/pub/"

관련 정보