Kerberos管理员授权

时间:2015-07-14 13:00:54

标签: c++ authorization kerberos

我正在编写与MS Active Directory集成的linux应用程序。为此我正在使用Kerberos。我已经实现了使用给定凭据对域用户进行身份验证的机制,但现在我想检查用户是否是管理员组的成员。

所以我从函数中获得creds

error = krb5_get_init_creds_password(context, &creds, principals,
        password.c_str(), NULL, NULL, 0, NULL, NULL);

在这里,我想实现授权用户/管理员的逻辑

if(!error) {
    // admin check
}

我正在考虑使用krb5_verify_init_creds功能,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

正如Fred所说,Kerberos用于身份验证,而不是用于授权。虽然AD DC发布的Kerberos票证包含MS-PAC记录,其中包含有关映射到此Kerberos主体的AD对象成员资格的其他信息,但您需要的不仅仅是知道故障单中显示的记录格式以便使用它。

在典型的Linux环境中,您的应用程序最好依靠PAM堆栈来分离身份验证和授权步骤。通常,PAM会话设置用于运行授权检查。如果您的Linux计算机配置为使用SSSD(id_provider = adid_provider=ipa以及FreeIPA和AD之间的跨林信任),您可以依靠pam_sss来处理身份验证和授权通过SSSD的步骤。

最新版本的SSSD通过将GPO登录权限映射到PAM服务来支持基于GPO的访问。

使用SSSD,您的AD用户和组将显示为POSIX用户和组。这允许您在使用getgrouplist(3)将Kerberos主体映射到本地用户名后,根据您可以通过krb5_aname_to_localname()调用获得的组成员身份构建一个简单的访问控制。

如果您仍需要了解有关从Kerberos主体映射的用户的其他信息,则可以使用SSSD的infopipe接口。通过infopipe提供的信息是从Kerberos票证(如果可用)和AD LDAP(全局目录或DC直接)中收集的。通过使用infopipe,您不需要将MS-PAC中的SID解析为名称,解析组成员身份并验证MS-PAC和票证的其他组件的签名,因为SSSD会为您执行此操作。有关实际实施,请参阅https://fedorahosted.org/sssd/wiki/DesignDocs/DBusResponderhttp://www.adelton.com/apache/mod_lookup_identity/