Apache에서 개인 사용자 디렉토리에 대한 인증을 설정하는 방법은 무엇입니까?

Apache에서 개인 사용자 디렉토리에 대한 인증을 설정하는 방법은 무엇입니까?

public_html내 디렉토리에 개인 인증을 설정했지만 home아무런 효과가 없습니다. 즉, 자격 증명을 묻는 팝업이 표시되어야 하는데 그런 일은 일어나지 않습니다. 인증은 서버 루트의 디렉터리에서 제대로 작동하며 잘 작동합니다. 지금은 서버를 개편하고 있어요.

자세한 내용은 다음과 같습니다. 제가 넣을 구성 파일과 관련된 몇 가지 부가적인 질문과 쿼리가 있습니다.용감한.

  • 기본 HTTP 디렉터리가 있고 /var/www/htmlHTTPS에도 동일한 디렉터리가 있습니다.
  • 내 개인 URL index.html에 대한 링크가 포함된 파일은 하나만 있습니다 . ~tomas좋은 결과. userdir매핑에 모드를 사용하고 있습니다 ~tomas.
  • 개인 디렉토리도 있고 cgi-binCGI는 잘 작동하지만 URL이 필요합니다.~tomas/cgi-bin 디렉토리 목록 표시, 어떤 이유로 작동하지 않고 403 Forbidden이 표시됩니다.
  • 승인 없이 홈 디렉토리를 HTTPS 및 HTTP에서 사용할 수 있기를 원합니다. 그러나 클라이언트가 다음 을 통해 public_html개인 디렉터리 중 하나를 요청하면 ~user액세스가 인증되어야 합니다 .인증은 HTTPS를 통해 이루어져야 합니다.. 따라서 HTTP를 HTTPS로 전환해야 합니다. HTTPS 기능을 설정하고 테스트했지만 이 컨텍스트에서는 어떠한 시행도 설정하지 않았습니다. 중요한 경우 FQDN이 없습니다.

~user그러나 주요 질문은 HTTP를 통해서도 인증 자체가 작동하도록 하는 방법입니다 .

구성을 다 넣었 userdir.conf는데추측하다문제는 .NET에서 와일드카드를 사용하는 것입니다 /home/*/public_html.

이것은 userdir.conf.

<IfModule mod_userdir.c>
        UserDir "public_html"
        UserDir disabled
        UserDir enabled tomas

        <Directory "/home/*/public_html">
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Require all granted
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Require all denied
                </LimitExcept>
                AuthType Basic
                AuthName "Personal HTML"
                AuthUserFile "/usr/share/apache2/passwd/passwords"
                Require valid-user
                SSLOptions +StdEnvVars
        </Directory>

        <Directory "/home/*/public_html/cgi-bin">
                Options ExecCGI Indexes
                SetHandler cgi-script
        </Directory>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

이 구성 파일이나 Apache에 대한 전반적인 접근 방식에 대한 의견이 있으면 의견을 남겨주세요.

답변1

핵심은 Limit지침입니다. 단서는 존재한다<Limit>명령 부분mod Apache 문서 페이지 core.

<Limit><LimitExcept>지시문과 함께 or 지시문을 사용할 때 , Require 다른 지시문의 존재 여부에 관계없이 성공한 첫 번째 지시문이 요청을 승인한다는 점에 유의하세요.RequireRequire

Require현재 사례와 일치하는 첫 번째 사례에 따라 처리 방법이 결정됩니다. 내 질문의 구성에 따르면 다음과 같습니다.

            <Limit GET POST OPTIONS>
                    Require all granted
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>
            AuthType Basic
            AuthName "Personal HTML"
            AuthUserFile "/usr/share/apache2/passwd/passwords"
            Require valid-user

Require all granted위 목록의 두 번째 줄에 있는 GET 요청은 간단한 GET 요청으로 이 작업을 수행합니다. 그 AuthType Basic아래 줄 과 다른 줄은 데드 코드입니다. 올바른 접근 방식은 다음과 같습니다.

            <Limit GET POST OPTIONS>
                    AuthType Basic
                    AuthName "Personal HTML"
                    AuthUserFile "/usr/share/apache2/passwd/passwords"
                    Require valid-user
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>

그런데 이는 지시어가 무시되는 경우이다 Limit.

            Require all granted
            <Limit GET POST OPTIONS>
                    AuthType Basic
                    AuthName "Personal HTML"
                    AuthUserFile "/usr/share/apache2/passwd/passwords"
                    Require valid-user
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>

첫 번째 줄은 요청을 성공하고 승인합니다.

관련 정보