如何仅针对我的网站根目录禁用 Kerberos 身份验证?

如何仅针对我的网站根目录禁用 Kerberos 身份验证?

我有基于 Kerberos 的身份验证,我想仅在根 URL 上禁用它:http://mysite.com/。我希望它能继续在任何其他页面上正常工作,例如http://mysite.com/page1

我的.htaccess 中有这样的东西:

AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd on
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user

我想仅针对根 URL 关闭它。作为解决方法,可以.htaccess在虚拟主机配置中关闭它。不幸的是,我不知道该怎么做。

我的 vhost.conf 的一部分:

    <Directory /home/user/www/current/public/>
            Options -MultiViews +FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
    </Directory>

UPD。我正在使用 Apache/2.2.3 (Linux/SUSE)

我尝试使用以下版本的.htaccess:

SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd on
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user

不幸的是,这样的配置会为所有 URL 启用 Kerberos AuthType。我尝试将前 3 行

SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any

在主块之后,但它没有帮助我。

答案1

我将mod_auth_kerb配置移至 vhost.conf。并使用Location指令关闭某些 URL 的授权。

    # root_url
    <LocationMatch "(^\/$|^$)">
            Satisfy Any
    </LocationMatch>
    <Location /incidents/last>
            Satisfy Any
    </Location>

    <Directory /home/user/www/>
            Options -MultiViews +FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
            AuthType Kerberos
            AuthName "Domain login"
            KrbAuthRealms DOMAIN.COM
            KrbMethodK5Passwd On
            Krb5KeyTab /etc/httpd/httpd.keytab
            require valid-user
    </Directory>

这解决了我的问题。

答案2

如何执行此操作取决于您使用的是 Apache 2.2 还是 Apache 2.4。我实际上还没有测试过它们,所以完全有可能它根本不起作用或可能需要进行一些调整。

对于 2.2 我们可以使用SetEnvIf/如果他们请求并使用,则设置一个变量Allow fromSatisfy any控制访问。所有现有配置应保持原样:

SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any

2.4 版有以下变化:认证和授权。我们现在有一组<Require>您可以围绕任何访问控制来微调授权的块:

SetEnvIf Request_URI ^/$ rootdir=1

<RequireAny>
  AuthType Kerberos
  AuthName "Domain login"
  KrbAuthRealms DOMAIN.COM
  KrbMethodK5Passwd on
  Krb5KeyTab /etc/httpd/httpd.keytab
  Require valid-user
  Require env rootdir=1
</RequireAny>

<RequireAny>阻止意味着任何人指令Require必须匹配才能授权成功。还有<RequireAll><RequireNone>块。

答案3

尝试 AllowOverride None 它将禁用 .htacess

相关内容