보안 콘텍스트를 설정하고 유지하려면 두 가지 유형의 주체 이름이 필요합니다.
서버 주체 이름 서버의 주체 이름은 service@host 형식이며 항상 널로 끝나는 ASCII 문자열로 지정됩니다(예: nfs@eng.acme.com).
클라이언트가 보안 콘텍스트를 작성할 때 클라이언트는 이와 같은 형식으로 서버 주체 이름을 지정합니다("콘텍스트 작성" 참고). 마찬가지로 서버를 표시할 주체 이름을 설정해야 할 경우에도 rpc_gss_set_svc_name()함수를 사용하는데 이 함수는 위 형식의 주체 이름을 인수로 받습니다.
클라이언트 주체 이름. 서버에서 받는 클라이언트의 주체 이름은 rpc_gss_principal_t 구조의 형식을 가집니다. 이것은 사용 중인 메커니즘에 따라 결정된, 카운트된 불투명(opaque) 바이트입니다. 이 구조에 대한 설명은 rpcsec_gss(3N) 매뉴얼 페이지를 참고하십시오.
서버는 시작할 때 표시할 주체 이름을 받아야 합니다. (한 서버는 여러 주체로 작동할 수 있습니다.) rpc_gss_set_svc_name() 함수는 주체 이름을 설정합니다.
char *principal, *mechanism; u_int req_time; principal = "nfs@eng.acme.com"; mechanism = "kerberos_v5"; req_time = 10000; /* time for which credential should be valid */ rpc_gss_set_svc_name(principal, mechanism, req_time, SERV_PROG, SERV_VERS);
(Kerberos는 req_time 매개변수를 무시합니다. 다른 인증 시스템에서는 이 매개변수를 사용할 수도 있습니다.)
자세한 내용은 rpc_gss_set_svc_name(3N) 매뉴얼 페이지를 참고하십시오.
서버는 클라이언트의 주체 이름과 관련된 작업을 할 수 있어야 합니다. 이러한 작업에는 클라이언트의 주체 이름을 액세스 제어 목록과 비교하거나, 증명서가 있을 경우, 해당 클라이언트에 대한 UNIX 증명서를 검색하는 작업 등이 있습니다. 이러한 주체 이름은 rpc_gss_principal_t 구조 포인터의 형식을 유지합니다. rpc_gss_principal_t에 대한 자세한 내용은 rpcsec_gss(3N) 매뉴얼 페이지를 참고하십시오. 서버가 받은 주체 이름을 알려진 실재 이름과 비교하려면 위와 같은 형식으로 주체 이름을 생성할 수 있어야 합니다.
rpc_gss_get_principal_name() 함수를 호출하면 네트워크에서 각 개인을 고유하게 식별하는 매개변수를 입력으로 받아, rpc_gss_principal_t 구조 포인터로 주체 이름을 생성합니다.
rpc_gss_principal_t *principal; rpc_gss_get_principal_name(principal, mechanism, name, node, domain); . . .
rpc_gss_get_principal_name() 함수에 대한 인수는 다음과 같습니다.
principal: 설정할 rpc_gss_principal_t 구조에 대한 포인터입니다.
mechanism: 사용 중인 보안 메커니즘입니다. 생성되는 주체 이름은 특정 메커니즘에 국한됩니다.
name: joeh나 nfs와 같이 개인 또는 서비스 이름이거나 사용자 정의 응용 프로그램 이름일 수 있습니다.
node: 예를 들어, UNIX 시스템 이름일 수 있습니다.
domain: 예를 들어, DNS, NIS, NIS+ 등의 도메인 이름이거나 Kerberos 영역일 수 있습니다.
각 보안 메커니즘에 따라 다른 식별 매개변수가 필요합니다. Kerberos V5의 경우, 사용자 이름은 필수, 해당 노드와 도메인 이름(Kerberos 용어로는 호스트 및 영역 이름)은 선택 사항입니다.
자세한 내용은 rpc_gss_get_principal_name(3N) 매뉴얼 페이지를 참고하십시오.
주체 이름은 free() 라이브러리 호출로 해제됩니다.