Apache Basic 인증이 작동하지 않는 이유는 무엇입니까?


14

방금 아파치를 2003 빌드에서 삐걱 거리며 깨끗하고 새로운 2.4.1 빌드로 업그레이드했습니다. 눈부신 것을 제외하고는 모두 꽤 좋아 보입니다.

내 httpd.conf 파일에는 다음이 있습니다.

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

이를 통해 지정된 auth 파일의 사용자 만 이전 버전의 Apache에서와 마찬가지로 서버에 액세스 할 수 있습니다. (권리?)

그러나 작동하지 않습니다. 인증이 제공되지 않은 요청이 승인됩니다. 액세스를 위해 로깅을 LogLevel Debug로 전환하면 다음과 같이 표시됩니다.

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

나는 이것이 이것이 무엇을 의미하는지 정말로 모른다. 그리고 나는 (내가 아는 한) 내 파일에 "모든 부여가 필요하다"또는 ""문장이 없다.

왜 이것이 작동하지 않는지, 또는 어디에서 디버깅해야 하는가?

최신 정보:

프록시를 허용하는 SSL 포트에 가상 호스트가 있습니다. 안에 같은 항목을 넣을 때

<proxy *> 

virtualhost 설정에서 조항이 작동합니다 . 그것은 작동하지 않는 것 같습니다

 <Directory> 

절. 그런 다음 다른 디렉토리 절 (다른 디렉토리에만 해당)을 시도했지만 작동 하지 않았습니다 .

또한

아래의 Shane의 질문에서-루트 "/"블록을 "/ tmp"디렉토리로 복제하려고 시도했습니다. / tmp 디렉토리가 제대로 작동합니다 !! 따라서이 문제는 루트 디렉토리에만 해당됩니까 ???


1
<Directory>작동하지 않는 요청에 적용 할 다른 블록은 무엇입니까 ?
— Shane Madden

루트 "/"디렉토리에 하나만 넣으면 전체 서버에 적용됩니다. 나는 사용자 홈 디렉토리 (mod_userdir 당)에 하나를 추가하려고 시도했지만 그와 동일한 결과를 얻었습니다.
— Brad

@ShaneMadden-귀하의 질문에-루트 "/"블록을 "/ tmp"디렉토리에 복제하려고했습니다. / tmp 디렉토리가 제대로 작동합니다 !! 따라서이 문제는 루트 디렉토리에만 해당됩니까 ???
— Brad

<Directory>Apache 설정의 다른 위치에 설정 한 것보다 우선하는 블록 이 더 있다고 생각합니다 /.
— Shane Madden

방금 모든 것을 gre습니다. 이 구성 파일은 Apache의 새로 설치된 기본값에 대한 수정 이 매우 적었습니다.
— Brad

답변:


12

새로 설치 한 2.4에서 다이제스트 인증과 비슷한 문제가 발생했습니다. Apache 사이트의 문서를 자세히 보면 인증 지시문이 <Location>태그가 아닌 태그 에 있어야하는 것처럼 보입니다 <Directory>. AuthBasicProvider 지시문에 대한 설명서를 참조하십시오 .


2
이것은 정확하지 않습니다. mod_auth_basic 및 mod_auth_digest는 <파일> <If> 및 <Proxy>뿐만 아니라 <Directory> 및 <Location>에서도 사용할 수 있습니다. Apache 2.4- > httpd.apache.org/docs/current/mod/… 문서 에서 "컨텍스트"아래에 위의 모든 유효한 컨테이너를 나타내는 "디렉토리"가 표시됩니다. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
— JadedCore

정확하지 않아야하지만 그것은 나를 위해 일했습니다. 디렉토리 부분에 다른 설정 (예 : RewriteRule)이
— 있었기 때문일 수

6

나는 같은 문제에 직면 했으며이 게시물의 아무것도 도움이되지 않았으므로 2 센트를 추가 할 것입니다. 필자의 경우 (apache 2.4) 문제는 순차적 Require 지시문에있었습니다.

기본적으로 둘 이상의 Require 지시문 이 있으면 다음 과 같이 간주됩니다.<RequireAny>

내에서 <Directory>나는

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

따라서 IP가 정확하면 인증 요청이 나타나지 않았습니다. I 스위치 했어 필요 에서 논리를 <RequireAny>로 <RequireAll>하고 지금은 모든 것이 올바르게 작동하는 것 같다.

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>

5

jscott의 답변이 잘못되었습니다. 아파치 2.4는 가장 확실하게 수행 의 인증 지침 있도록 <Directory>용기를. 또한 <Location>컨테이너를 다양한 방식으로 액세스 할 수 있으므로 인증을 구현할 수있는 유일한 안전한 방법 입니다.주의하지 않으면 인증을 우회 할 수 있습니다. 참고로 프로덕션 시스템에서 사용중인 샘플 컨테이너는 다음과 같습니다.

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>


1

AuthBasic 제공 업체가 누락 된 것 같습니다. 다음과 같은 줄을 추가하십시오.

AuthBasicProvider    file

이 작업을 마치면 Satisfy지시문 을 살펴볼 수 있습니다 . 인터넷 액세스를 위해 비밀번호를 요구하면서 비밀번호없이 로컬 액세스를 허용하는 데 사용할 수 있습니다.

편집 : 나는 일반적으로 인터넷에서 사용할 수없는 내용에 대한 암호 기반의 원격 액세스를 가능하게하기 위해 BasicAuth에 대한 포함 파일을 사용합니다. Satisfy지시문을 원하지 않을 수 있습니다 . 이것은 내 /etc/apache2/basicauth.conf파일입니다.

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

/etc/apache2/allow_local.confIP 기반 인증을위한 포함 파일 도 있습니다 .

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

그들을 가능하게하기 위해 나는이 포함을 사용합니다.

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

권한 부여 스펙에 추가하려고 할 수 있습니다. 이것은 내 테스트 구성에서 작동합니다.

Order deny,allow
Allow from all

그것을 시도-여전히 작동하지 않습니다 : -O
— 브래드

파일을있는 그대로 포함하면 "AuthName not allowed here"오류가 발생합니다. "Location", "Directory"또는 "Proxy"절 외부와 같이이 지시문을 어디에서나 지정할 수 없으므로 "디렉토리"조항에 포함시킬 경우 – 다시 – 자격 증명없이 보내드립니다
— Brad

"directory"절에 "deny from all"만 넣으면 액세스가 거부됩니다 (예상 한대로). 그런 다음 디렉토리 절에 FIRST 스크립트를 포함 시키면 무조건 액세스가 허용됩니다. 스크립트에서 "만족"을 제거하면 무조건 거부됩니다.
— Brad

0

나는 같은 문제를 겪었고 그것은 아파치 버그 일 것이다. 필자의 경우 업데이트 후 문제가 나타 났으며 후속 업데이트 후에 사라졌지 만 맨 아래에 추가해야했습니다.

Deny from all

아파치가 다음과 같은 보안 허점을 열 수 있다는 것은 무섭습니다.


Deny from all아파치 2.2 설정입니다. httpd.apache.org/docs/2.4/upgrading.html#run-time
— danger89

예 보안 관련 지시문을 이전 버전과 호환되지 않는 방식으로 변경하는 것은 어리석은 일입니다
— greg

0

시험:
<Directory "/"> ... </Directory>

대신에:
<Directory /> ... </Directory>

의미 : 큰 따옴표로 루트 기호를 캡슐화하십시오. 그렇지 않으면 해당 슬래시로 태그를 닫을 수 있습니다.


0

실수로 다른 것이없는지도 확인하십시오.

    Require all granted

동일한 디렉토리 구성의 다른 곳. 그것은 당신을 무시하고있을 수 있습니다

    Require     valid-user
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.