OpenBSD httpd Webサーバーのサブディレクトリの認証を要求する方法は?

OpenBSD httpd Webサーバーのサブディレクトリの認証を要求する方法は?

VPSを実行しています。オープンBSD 7.4x64私の個人的なWebページをホストします。このWebページは、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/"

おすすめ記事