远程授权 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。
保留所有权利。
|
|