mod_rewrite를 사용하는 Apache의 동적 AuthUserFile. 가능합니까?

mod_rewrite를 사용하는 Apache의 동적 AuthUserFile. 가능합니까?

여러 scponly 계정이 있는 서버가 있고 기본 인증에서 http 액세스를 제공하고 싶습니다.

문제의 첫 번째 부분은 mod_rewrite를 사용하여 각 사용자에게 적합한 디렉토리를 자르고 선택함으로써 해결됩니다. 하지만 각 사용자에 대해 서로 다른 인증 사용자 파일을 설정하려고 하면 문제가 발생합니다. 간단히 말해서 나는 그것을 수행하는 방법을 찾을 수 없습니다.

다음은 샘플 구성입니다.

<VirtualHost an-ip-number-and:a-port>
    ServerName *.example.com
    RewriteEngine On
    UseCanonicalName Off

    RewriteCond %{HTTP_HOST} ^(.*).example.com
    RewriteCond /server/scponly/%1/incoming -d
    RewriteRule ^(.+)   %{SERVER_NAME}$1 [C]
    RewriteRule ^([^.]+)\.example\.com/(.*) /server/scponly/$1/incoming/$2 [L]

    RewriteRule ^(.+) http://FAIL.example.com

    <Directory /server/scponly/*/incoming>
        AuthType Basic
        AuthName "SFTP-HTTP Area"
        AuthUserFile  ???????   # <-- this!
        require valid-user
    </Directory>
</VirtualHost> 

노트:

  • 실제 구성이 다른 서버 이름/디렉토리 확인/다른 목적으로 다시 쓰기와 혼합되어 있기 때문에 mod_rewrite를 삭제할 수 없습니다.
  • 사용자가 인증 세부 정보를 지울 수 있으므로 인증 세부 정보를 .htaccess 파일로 이동할 수 없습니다. 하지만 이 접근 방식이 부분적인 해결책이 될 수 있을지 궁금합니다.
  • 다른 접근 방식에도 관심이 있습니다.
  • 각 디렉터리에 대해 서로 다른 인증 파일이 필요합니다. 파일이 하나만 있으면 각 사용자에게 모든 디렉터리에 대한 액세스 권한이 부여됩니다.

답변1

Peelman의 답변을 확장하려면 각 사용자마다 별도의 섹션이 있어야 합니다.

<Directory /server/scponly/*/incoming>
    AuthType Basic
    AuthName "SFTP-HTTP Area"
    AuthUserFile  /path/to/user/htpasswd
</Directory>
<Directory /server/scponly/bob/incoming>
    require user bob
</Directory>
<Directory /server/scponly/smith/incoming>
    require user smith
</Directory>

근본적인 접근 방식은 Perl로 Apache를 구성할 수 있는 mod_perl을 사용하는 것입니다. 이것은 Apache 구성 파일에 들어갑니다.

<Perl>

for $dir (glob "/server/scponly/*/incoming") {

  ($user) = $dir =~ m%/server/scponly/([^/]+)/incoming%;

  exists $Directory{$dir} or $Location{$dir} = { };
  $Directory{$dir}{AuthType} = 'Basic';
  $Directory{$dir}{AuthName} = 'SFTP-HTTP Area';
  $Directory{$dir}{AuthUserFile} = '/path/to/htpasswd';
  $Directory{$dir}{require} = "user $user";

}

</Perl>

(내 머리 꼭대기에 쓰여졌습니다.)

답변2

뭐? 파일은 하나만 가질 수 있습니다. Require 매개변수를 유효한 사용자 대신 사용자 ID로 변경하기만 하면 됩니다. 여기를 보아라: 아파치 문서.

관련 정보