Apache 2のアクセス制御に関する質問があります。関連性はありませんが、ラズベリーパイ2とラスビアン。apache2は、ユーザー 'x'のみが「example.com/private/x」というURLを開くことを許可します。
ウェブサイトを使用できるユーザーは複数います。ただし、すべてのユーザーが自分のフォルダを持つフォルダが1つあります。すべてのユーザーは自分のフォルダにのみアクセスでき、他のフォルダにはアクセスできません。
問題は、これを行う唯一の方法は、各フォルダを構成ファイルに追加することで、ユーザーを追加するのに時間がかかることです。それでは別の方法がありますか?
明確にする:
ユーザー
x
,
y
および
z
の3人のユーザーがいるとします。
それらのすべてが
https://example.com/
へのアクセス権を持っていますが、ユーザー
x
以外のユーザーが
https://example.com/private/x/
へのアクセス権を持つべきではない、ユーザー
y
以外に誰も
https://example.com/private/y/
へのアクセス権を持つべきではない、とだけユーザー
z
は
https://example.com/private/z/
へのアクセス権を持っている必要があります。
これまでにやったこと:
私は場所
/private
へのすべてのアクセスを拒否しました。それで、さまざまなユーザーにそれぞれのフォルダへのアクセス権を与えることができました。
私は場所
/private/%{REMOTE_USER}/
と
/private/%{REMOTE_IDENT}/
へのアクセスを許可することによってそれを試みましたが、どちらも動作しませんでした。
また、
<If>
というディレクティブを使用してURLが
/private/%{REMOTE_USER}/
に一致するかどうかを確認しようとしましたが、それでも問題はありませんでした。
私はApacheのドキュメントで何かを見つけようとしましたが、私は答えに近づけることができない何かを見つけることができませんでした。
まとめ:設定ファイルにすべての場所を追加することなくこれを行うことは可能ですか?もしそうなら、どうすれば可能ですか?あなたの入力を事前に
おかげで、Desirius
PS:私はほとんど忘れてしまった、それが関連するのですが、認証には、以下の方法についてで、PAMを使用して行われているかどうかはわからない。
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
AddExternalGroupMethod unixgroup environment
</IfModule>
AuthType Basic
AuthBasicProvider external
AuthExternal pwauth
GroupExternal unixgroup
Require unix-group www-priv
私はまだこれを調べていて、何かを見つけました。
2.4.8以降、名前付きグループとバックリファレンスは、対応する名前に接頭辞「MATCH_」と大文字を使用して環境に取り込まれ、書き込まれます。これにより、mod_rewriteのような式やモジュールの中からURLの要素を参照することができます。混乱を避けるため、番号の付いた(名前のない)後方参照は無視されます。代わりに名前付きグループを使用してください。
<LocationMatch "^/combined/(?<sitename>[^/]+)">
require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
</LocationMatch>
(ApacheドキュメントからLocationMatch directiveの最後の部分。
<LocationMatch "^/private/(?<user>[^/]+)">
Require expr "%{REMOTE_USER} == %{MATCH_USER}"
</LocationMatch>
しかし、Apacheはすぐに再起動しません。)
今、私は次のようにこれを使用することを考えました。 Require
行がコメントアウトされている場合は再起動されますが、それ以外の場合は再開されません。次のいずれかが動作しませんでした:
<LocationMatch "^/private/(?<user>[^/]+)">
<RequireAll>
Require valid-user
Require expr "%{REMOTE_USER} == %{MATCH_USER}"
<RequireAll>
</LocationMatch>
私はまだこの問題を解決しようとしていますが、焦点は少しずれています。 への回答がある場合Require
を使用して、認証されたユーザーが変数のユーザーであるかどうかを確認するにはどうすればよいですか?、それはおそらく全体の問題を解決するだろう。
いつものように、どんな入力にも感謝しています。
Desirius
編集2:
私もRequire expr "true"
動作しないことが分かりました。私は問題を作成するためにRequire expr
を疑っています...