远程授权 API 使用以下文件:
其中,ACDir 是 CA ControlMinder 的安装目录,默认为 /opt/CA/AccessControl
示例
以下程序演示客户端应用程序如何执行远程授权检查:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <unistd.h>
#include “api_auth.h”
#include “langapi.h”
int ShowUsage(void)
{
fprintf( stderr, “Usage:\n”
“ rmt_auth User‑Name Class‑Name Resource‑Name“
“Access“
return 1;
}
int main(int argc, char *argv[])
{
char *output;
int rv;
API_AUTH_RES result;
char input[200];
char *Passwd = NULL;
if ( argc != 6 )
return ShowUsage();
Passwd = getpass(“Please enter your password:”);
if ( Passwd == NULL )
{
printf(“Illegal password!!\n”);
return 1;
}
/*
* 初始化。 从命令行参数获取
* 主机名和密码
*/
rv = lca_rmtauth_Init(“rmt_auth”, &output, argv[5], Passwd);
if ( rv )
{
printf( “Return value: 0x%08x\n”
“%s\n”, rv, (output) ? output : “Initialization failed” );
return 1;
}
Passwd = NULL;
/*
* 向服务器发送请求并获取结果
*/
rv = lca_rmtauth_CheckAccess(argv[1], argv[2], argv[3], argv[4], &result);
if ( rv )
{
printf(“Return value: 0x%08x\n”
“Remote Access Check failed\n”, rv);
return 1;
}
/*
* 输出结果。
* 可以在此阶段就允许/拒绝访问的原因
* 做进一步分析
*/
printf(“%s's access %s to %s %s at %s is %s!!\n”,
argv[1], argv[4], argv[2], argv[3], argv[5],
((char) result.result == 'P') ? “Permitted” : “Denied”);
lca_Terminate();
}
编译和链接此示例后,可以检查是否已授权用户访问特定资源。 例如,要查看用户 Joe 是否具有文件 /etc/passwd 的读取权限,请键入以下命令:
rmt_auth Joe FILE /etc/passwd Read authorization‑server‑name
系统会提示您输入密码,输入密码后会收到回复。
授权和身份验证 API 包括以下函数:
将错误字符串转换为表示错误代码的整数。
检查是否已授权用户使用指定的访问类型来访问资源。
为用户创建 ACEE 句柄。
删除用户的 ACEE 句柄。
SEOSROUTE_ParseApiError 函数解析验证和身份验证函数返回的错误字符串,并返回与其相关的整数值。
注意:
int SEOSROUTE_ParseApiError(const char *szErrMsg);
CA ControlMinder 在 *szMsg 参数中返回的错误字符串。
SEOSROUTE_RequestAuth 函数询问 seosd 是否允许指定用户使用指定访问类型访问指定资源。
SEOSROUTE_RequestAuth 函数会向 seosd 发送请求,而 seosd 首先会检查参数是否有效。 如果参数有效,seosd 将执行其标准资源授权检查:指定用户是否有权以指定方式访问指定资源?
应用程序必须提供前五个参数;最后两个参数由 CA ControlMinder 返回,应用程序可使用这两个参数做出决定并向用户提供状态信息。
函数返回的整数取以下值之一:
允许用户按请求访问资源。
指定的访问权限无效。
请求被拒绝。
seosd 后台进程没有响应。
调用进程的用户 ID 不是 0 (root),执行调用进程的用户没有 SERVER 属性。
后台进程或服务返回 szMsg 中描述的错误。
注意:
在调用 SEOSROUTE_RequestAuth 之前,服务器应用程序通常会调用 SEOSROUTE_VerifyCreate,为正在进行授权检查的用户获取 ACEE 句柄。
int SEOSROUTE_RequestAuth(const char *szClass,
const char *szEntity,
int hACEE,
SEOS_ACCESS *pAccess,
int LogOpt,
API_AUTH_RES *pRes,
char *szMsg);
资源所属的类名。
记录或对象的名称,表示正在访问的资源。
注意:szClass 支持区分大小写的对象时,szEntity 参数的大小写至关重要。
访问者的 ACEE 句柄。 要指定与当前进程相关的用户的 ACEE,请指定 SEOSAPI_AUTH_CURRACEE。 指定除 SEOSAPI_AUTH_CURRACEE 之外的 ACEE 句柄要求与调用进程相关联的用户具有 SERVER 属性或调用进程在有效用户 ID 0 (root) 下运行。
指向包含请求访问的结构的指针。 该结构包含 SEOS_ACCS 类型的单个数据成员访问。 该成员的有效值包括:
确定是否必须制定审核日志条目的标志。 有效值为:
对于常规用户(非 root 用户),如果授权请求成功,则不创建审核记录。 如果授权请求失败,并且数据库中的当前规则需要审核,则创建审核记录。
对于服务器应用程序和 root 用户,无论授权请求成功还是失败,都不创建审核记录(值 = 0)。
如果数据库中的当前规则需要审核,则创建审核记录(值 = 1)。
对于常规用户,这是无效选项并映射到 SEOSAPI_AUTH_LOG。
对于服务器应用程序,无论是什么数据库规则,始终创建审核记录(值 = 2)。
对于常规用户,这是无效选项并映射到 SEOSAPI_AUTH_LOG。
对于服务器应用程序,仅当授权请求失败,并且数据库规则需要授权时,才创建审核记录(值 = 3)。
对于常规用户(包括 root 用户),如果授权请求成功,则不创建审核记录。 如果授权请求失败,并且数据库中的当前规则需要审核,则创建审核记录。
对于服务器应用程序,无论授权请求成功还是失败,都不创建审核记录(值 = 4)。
不创建审核记录(值 = 5)。
指向包含授权结果的 API_AUTH_RES 结构的指针。
指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 缓冲区的指针。
SEOSROUTE_RequestAuthAzn 函数向 seosd 发送授权请求。 CA ControlMinder 首先检查参数是否有效。 如果参数有效,CA ControlMinder 将执行其在 SEOSROUTE_RequestAuth 函数中实现的标准资源授权检查。
重要说明! 此函数已过时,仅用于满足向后兼容性。
如果函数成功,则返回值为 0。 否则,返回值为错误代码。
int SEOSROUTE_RequestAzn (
LPCSTR szClass,
LPCSTR szEntity,
LPCSTR szAccess,
HANDLE *phUserAttributes,
int hACEE,
int LogOpt,
API_AZN_RES *pres,
API_RESP_TAB **response,
LPCSTR szMsg
);
访问者的 ACEE 句柄。
确定是否必须制定审核日志条目的标志。
指向 SEOSROUTE_CreateRequestAzn 函数所创建的散列表的指针。 此指针仅与 SEOSD 进程相关。
指向包含授权结果的 API_AZN_RES 结构的指针。
指向包含响应列表的缓冲区的指针。
指向以 null 结尾的字符串的指针,该字符串指定与 szEntity 描述的对象对应的访问名称。
指向包含资源类名的以 null 结尾的字符串的指针。
指向包含对象(表示正在访问的资源)名称的以 null 结尾的字符串的指针。
注意:szClass 支持区分大小写的对象时,szEntity 参数的大小写至关重要。
指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 字节长缓冲区的指针。
SEOSROUTE_CreateRequestAzn 函数向 seosd 发送一组涉及相同用户的用户属性,并接收指定在用户属性基础上创建的散列表的指针。
注意:请务必在处理用户之后调用 SEOSROUTE_CloseRequestAzn 函数。
如果函数成功,则返回值为 0。 否则,返回值为错误代码。
INT SEOSROUTE_CreateRequestAzn(
LPCSTR szUserDir,
DWORD cEntries,
LPAPI_AZN_USERATTR pUserAttr,
PHANDLE phUserAttributes,
LPSTR szMsg
);
指向用于指定用户目录的以 null 结尾的字符串的指针。
在 pUserAttr 指向的数组中指定 API_AZN_USERATTR 结构数的值。 该值不得为零 (0)。
指向包含用户属性的数组的指针。
如果函数成功,参数会指定一个指向使用用户属性计算的散列表的指针。
如果函数失败,则值为 INVALID_HANDLE_VALUE。
指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 字节长缓冲区的指针。
SEOSROUTE_CloseRequestAzn 函数通过 hUserAttributes 删除散列表指针。 调用此函数之后,SEOSD 无法处理指定用户的授权请求,除非再次处理 SEOSROUTE_CreateRequestAzn( )。
如果函数成功,则返回值为 0。 否则,返回值为错误代码。
INT SEOSROUTE_CloseRequestAzn(
HANDLE hUserAttributes,
LPSTR szMsg
);
指向使用用户属性计算的散列表的指针。
指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 字节长缓冲区的指针。
API_AZN_USERATTR 结构指定属性信息。
typedef struct tagAPI_AZN_USERATTR {
char szAttName[ONAME_SIZE];
char szAttVal[ONAME_SIZE];
}API_AZN_USERATTR, *PAPI_AZN_USERATTR, FAR *LPAPI_AZN_USERATTR;
包含属性名称的以 null 结尾的字符串。
包含属性值的以 null 结尾的字符串。
|
版权所有 © 2013 CA。
保留所有权利。
|
|