上一主题: 授权和身份验证 API下一主题: 访问授权


编程指南

CA ControlMinder 管理用户对资源的访问。 每个资源都属于一个标识资源类型的类。 例如,TERMINAL 类的记录或对象管理用户从终端登录的能力。 仅当用户拥有以请求的方式访问资源的权限时,该用户才能访问特定资源。 例如,仅当 CA ControlMinder 数据库中存在向用户分配终端读取访问权限的规则(记录)时,用户才能从终端登录。 请注意,规则不必是显式分配,您也可以使用组成员资格或默认访问设置来分配授权。

授权和身份验证 API 中的 CA ControlMinder 函数与本地工作站上的 seosd 进行通信。 CA ControlMinder 支持以下类型的进程:

要使用 CA ControlMinder 来保护应用程序的资源,请执行以下操作:

  1. 将资源类添加到数据库。 使用此资源类来保护应用程序的对象。

    注意:有关将新的资源类添加到 CA ControlMinder 的详细信息,请参阅 UNIX《Utilities Guide》中的 seclassadm 实用程序。

  2. 将记录添加到数据库中的应用程序类。 这些记录定义用于保护应用程序对象的规则。
  3. 在程序中放置 CA ControlMinder 授权和身份验证 API 调用。
  4. 将程序与 CA ControlMinder 库链接起来。

服务器和普通应用程序使用相同的库。

要使用任何 CA ControlMinder 函数,您必须在 C 代码中包含以下行:

#include <api_auth.h>

授权和身份验证 API 中所有函数的名称都采用 SEOSROUTE_functionName 形式。

本部分包括演示如何使用某些授权和身份验证 API 函数的示例代码。 在系统驱动器的以下目录中提供其他示例:

注意:有关 CA ControlMinder 类和对象,以及添加用户定义资源的详细信息,请参阅《参考指南》。‑

检查用户进程的访问授权

任何应用程序都可以使用 CA ControlMinder 授权和身份验证 API 来检查用户是否可以访问资源。 您决定是否在应用程序中执行资源访问权限检查。 要编写使用 CA ControlMinder 授权机制的应用程序,您只需调用名为 SEOSROUTE_RequestAuth、具有适当参数的单个 API 函数并检查返回值。

以下程序演示如何检查用户是否可以访问资源:

UNIX 示例

要测试 CA ControlMinder 是否允许您使用 su root 命令代理 root,请键入以下命令:

>upexamp SURROGATE USER.root
#include <stdio.h>
#include <string.h>
#include <memory.h>

#include “api_auth.h”

int ShowUsage(void)
{
     fprintf( stderr, “Usage:\n”
                    “ upexamp ClassName ResourceName\n”);
  return 1;
}

int main(int argc, char *argv[])
{ int               rv;
     char           buff[SEOSAPI_AUTH_MSGLEN];
     SEOS_ACCESS access;
     API_AUTH_RES result;     /* 请求结构的结果 */
     if (argc != 3)
        return ShowUsage();
     memset(&access, 0, sizeof(access) );
     access.accs = SEOS_ACCS_READ;
     rv = SEOSROUTE_RequestAuth( argv[1],     /* 类名        */
                                 argv[2],     /* 资源名称     */
                               SEOSAPI_AUTH_CURRACEE,      /*我自己*/
                               &access,
                               SEOSAPI_AUTH_LOGNONE,
                               &result,
                               buff);

     printf( “Result %s (0x%X)\n”, buff, rv );
     return 0;
}

在编译和链接此示例后,可以检查您是否已获得访问特定资源的授权。

Windows 示例

要测试 CA ControlMinder 是否允许您访问已明确拒绝您访问的文件,请键入以下命令:

newfile D:\Winnt\system32\notepad.exe defaccess(all)
authorize file D:\Winnt\system32\notepad.exe \
          uid(your_UID) access(none)

>upexamp FILE D:\Winnt\system32\notepad.exe

以下部分说明该程序使用的文件。

在 UNIX 中

该程序使用以下文件:

在 Windows 中

如果系统上已安装 CA ControlMinder,则程序使用以下文件:

应用程序服务器

授权和身份验证 API 包括用于应用程序服务器的接口。 假定服务器应用程序向许多用户提供服务。 只有服务器应用程序可以代表用户(包括与进程相关的用户)执行授权检查。

服务器应用程序必须对每个新连接的客户端执行“伪登录”。‑ 通过调用 SEOSROUTE_VerifyCreate 函数执行伪登录。‑ SEOSROUTE_VerifyCreate 函数向应用程序提供客户端的 Accessor Element Entry (ACEE) 句柄。

从现在起,由 SEOSROUTE_VerifyCreate 函数返回的 ACEE 句柄执行对客户端的 CA ControlMinder 授权检查模块的各次调用。 应用程序应仔细维护这些句柄。

客户端断开与应用程序的连接时,或应用程序向客户端提供服务后,应用程序必须执行“伪注销”来释放 ACEE 句柄。‑ 要执行伪注销,请调用 SEOSROUTE_VerifyDelete 函数。‑ 如果未释放句柄,则仍会将系统资源和 CA ControlMinder 内部资源分配给 ACEE 句柄。 如果保持分配这些资源,则不必要的分配可能会导致系统运行缓慢,从而可能导致无法登录系统。

只有有效 UID 0 (root) 运行的进程或具有 SERVER 属性的用户可以使用除 SEOSAPI_AUTH_CURRACEE 之外的句柄发出 SEOSROUTE_VerifyCreate、SEOSROUTE_VerifyDelete 和 SEOSROUTE_RequestAuth 调用。

示例

以下程序演示如何使用 CA ControlMinder 来管理多用户进程的安全性方面:‑

#include <stdio.h>
#include <string.h>
#include <memory.h>

#include “api_auth.h”

int ShowUsage(void)
{
     fprintf( stderr, “Usage:\n”
                        “ musexamp ClassName ResourceName
                           UserName\n”);
     return 1;
}

int main(int argc, char *argv[])
{ int          rv;
     int        usr_acee;
     char       msg_buff[SEOSAPI_AUTH_MSGLEN];
     SEOS_ACCESS   access;
     API_AUTH_RES                 result;
     /* 请求结构的结果 */

     if (argc != 4)
        return ShowUsage();

     memset(&access, 0, sizeof(access) );
     access.accs = SEOS_ACCS_READ | SEOS_ACCS_WRITE | SEOS_ACCS_EXEC;

     rv = SEOSROUTE_VerifyCreate( argv[3], NULL, NULL, 0, NULL,
                                SEOSAPI_AUTH_LOG, &usr_acee,
                                &result, msg_buff );

     if (rv)
          { printf( “Return Value: 0x%08x\n”
               “Msg: '%s'\n”, rv, msg_buff );
                return 1;
                }
     else
          printf( “Got ACEE handle for user '%s': %d\n”, argv[3],
                    usr_acee );

     rv = SEOSROUTE_RequestAuth(argv[1],    /* 类名         */
                         argv[2],           /* 资源名称      */
                         usr_acee,          /* 用户的 ACEE 句柄 */
                         &access,
                         0,
                         &result,
                         msg_buff);

     if (rv)
          printf( “Return Value: 0x%08x\n”
               “Msg: '%s'\n”, rv, msg_buff );
     else    
          printf( “Pass !!!!\n” );

     rv = SEOSROUTE_VerifyDelete( &usr_acee, 1, msg_buff );

     if (rv)
          { printf( “Return Value: 0x%08x\n”
               “Msg: '%s'\n”, rv, msg_buff );
          return 1;
       }
     else
     printf(“Released ACEE handle for user '%s': %d\n”,
               argv[3], usr_acee );

     return 0;
}
在 UNIX 中

该程序使用以下文件:

在 Windows 中

假定系统上已安装 CA ControlMinder,则程序使用以下文件: