2011-01-31 18 views
2

私はイントラネットアクセスのために最初に設定されたapacheサーバーを持っていますので、ロックすることについてそれほど心配する必要はありませんでした。mod_rewriteの前にApache 2.xの認証

はその後、私はインターネットにそれを開くために必要なので、私はそうのようにhttpd.confのセクションでは、LDAP認証ディレクティブを置く:よう

Order allow,deny 

AuthBasicProvider ldap 
AuthType Basic 
AuthzLDAPAuthoritative on 
AuthName "MyCompany Intranet" 
AuthLDAPURL "ldap://myldapserver.mydomain.com:389/CN=Users,DC=mydomain,DC=com?sAMAccountName?sub?(memberOf=CN=Everyone at MyCompany,OU=MyCompany Groups,DC=mydomain,DC=com)" NONE 
AuthLDAPBindDN "CN=Administrator,CN=Users,DC=mydomain,DC=com" 
AuthLDAPBindPassword "MyPassword" 

Require valid-user 

#Allow from all 
Allow from 192.168.1 
Allow from 10.254.0 

Satisfy any 

これは基本的にそれを作ったローカルユーザーパスワードなしで入ることができ、外部ユーザは私たちのADSドメインに対して認証を受ける必要がありました。

これ以上のことはもっと複雑になります。

私は、URLの最後にcgi変数を追加してユーザを区別するアプリを持っているので、ウェブディレクトリ(/ var/www/html)のルートに.htaccessファイルを設定します。次のとおりです:

RewriteEngine on 
RewriteBase/
RewriteRule ^foo/(.*)$ some/really/long/url/$1?tenant_filter=2 [L] 
RewriteRule ^bar/(.*)$ some/really/long/url/$1?tenant_filter=1 [L] 

これは本当に素晴らしいです。クライアントはhttp://myserver.mydomain.com/foo/file.htmlを入力し、URLは魔法のようにhttp://myserver.mydomain.com/some/really/long/url/file.html?tenant_filter=2にそれらを示します彼らが見るものはすべてhttp://myserver.mydomain.com/foo/file.htmlです。問題がでてくるのはここ

だ。

私は/fooの別々の認証パラメータおよび/バー仮想ディレクトリを定義したいと思います。私が何を試みても、認証は上記のhttp.confのLDAP設定によって常に上書きされます。私は間違って何をしていますか、私の目標を達成するために何ができますか?それも可能ですか?

+0

設定ファイルのどのコンテキストでこれを追加していますか? – Ass3mbler

答えて

0

許可設定オプションは、>および<ディレクトリ>セクションに配置できます。しかし:

[...] <場所>ディレクティブは、ファイルシステムの場所へのアクセスを制御するために使用すべきではありません。いくつかの異なるURLが同じファイルシステムの場所にマップされる可能性があるため、そのようなアクセス制御は回避される可能性があります。

これはあなたのケースでは問題ではないようです。あなたが探している動作とまったく同じであるためです。

1

この問題の解決策は、fooとbarという/ var/www/htmlにターゲットディレクトリを作成することでした。認証は、以下のように/etc/httpd/conf.dディレクトリ内のディレクトリの設定だった:

<Directory "/var/www/html/bar">  
    AuthBasicProvider ldap 
    AuthType Basic 
    AuthName "Bar Extranet" 
    AuthLDAPURL ldap://myldapserver.mydomain.com:3268/DC=mydomain,DC=com?sAMAccountName?sub?(objectClass=*) 
    AuthzLDAPAuthoritative on 

    AuthLDAPBindDN "CN=Administrator,CN=Users,DC=mydomain,DC=com" 
    AuthLDAPBindPassword "mypassword" 

    AuthLDAPGroupAttributeIsDN on 

    require ldap-group CN=Bar Kiosk,OU=mycompany Groups,DC=mydomain,DC=com 

    Allow from 192.168.1 
    Allow from 10.254.0 

    Satisfy any 
</Directory> 

書き換えの対象ディレクトリがfooのいずれかから認証を受け入れるか、以下のようにバールに設定した

<Directory /var/www/html/some/really/long/directoryname> 
    AuthBasicProvider ldap 
    AuthType Basic 
    AuthName "mycompany Extranet" 
    AuthLDAPURL ldap://myldaphost.mydomain.com:3268/DC=mydomain,DC=com?sAMAccountName?sub?(objectClass=*) 
    AuthzLDAPAuthoritative on 

    AuthLDAPBindDN "CN=Administrator,CN=Users,DC=mydomain,DC=com" 
    AuthLDAPBindPassword "mypassword" 

    AuthLDAPGroupAttributeIsDN on 

    require ldap-group CN=Domain Users,CN=Users,DC=mydomain,DC=com 
    require ldap-group CN=BAR Kiosk,OU=mycompany Groups,CN=Users,DC=mydomain,DC=com 

    Allow from 192.168.1 
    Allow from 10.254.0 

    satisfy any 
</Directory> 

これは、fooとbarの両方がターゲットディレクトリにアクセスできるようにしますが、ターゲットディレクトリがURL書き換えコードによって難読化されているので、私のニーズに十分です。

また、/ etc/httpd/conf/httpdのコードも変更しました。URLのconfファイルは、ループを防ぐために書き換える:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_URI} !^(.*)tenant_filter=1$ [OR] 
RewriteCond %{REQUEST_URI} !^(.*)tenant_filter=2$ 
RewriteRule ^foo/(.*)$ some/really/long/url/$1?tenant_filter=2 [L] 
RewriteRule ^bar/(.*)$ some/really/long/url/$1?tenant_filter=1 [L] 

最後に、私の状況は、私はそのサーバー上のLinux用BlueDragon 7.1を実行しているという事実によって複雑になりました。最初の投稿では言及していませんでしたが、BDは再起動せずにApacheの設定で行っていた変更の一部を認識していませんでした。これはプロセスを非常に複雑にしました。