원격 권한 부여 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;
}
/*
* Initialization. get the host name and password from the
* command line parameters
*/
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;
/*
* Send the request to the server and get the result
*/
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;
}
/*
* Print the results.
* Further analysis as for the reasons for granting/denying
* access can be made at this stage
*/
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는 지정된 사용자가 지정된 리소스에 지정된 방식으로 액세스할 수 있는지 확인하는 표준 리소스 권한 부여 검사를 수행합니다.
처음 다섯 개의 매개 변수는 응용 프로그램이 제공해야 합니다. 마지막 두 개의 매개 변수는 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(루트)으로 실행 중이어야 합니다.
요청된 액세스를 포함하는 구조에 대한 포인터입니다. 이 구조는 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_Create RequestAzn 함수가 생성하는 해시 테이블에 대한 포인터입니다. 이 포인터는 SEOSD 프로세스에만 관련됩니다.
권한 부여 결과를 포함하는 API_AZN_RES 구조에 대한 포인터입니다.
응답 목록을 포함하는 버퍼에 대한 포인터입니다.
null 종결 문자열에 대한 포인터입니다. 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로 해시 테이블 포인터를 제거합니다. 이 함수를 호출한 후에는 SEOSROUTE_CreateRequestAzn( )을 다시 처리하지 않는 한 SEOSD가 지정된 사용자에 대한 권한 부여 요청을 처리할 수 없습니다.
이 함수가 성공할 경우 반환 값은 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 종결 문자열입니다.
|
Copyright © 2013 CA.
All rights reserved.
|
|