탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
![]() |
Oracle Solaris 11.1 관리: 보안 서비스 Oracle Solaris 11.1 Information Library (한국어) |
PAM 서비스를 사용하는 시스템 응용 프로그램(예: ssh)은 PAM 구성 파일에 구성됩니다. 자세한 내용은 pam.conf(4) 매뉴얼 페이지를 참조하십시오. 이러한 구성 파일에는 /etc/pam.conf 파일뿐만 아니라 /etc/pam.d에 배치된 서비스 특정 파일도 포함됩니다. 이러한 파일을 변경하면 시스템의 모든 사용자에게 영향을 줍니다. 서비스 특정 PAM 구성 파일은 세분성으로 인해 파일에서 실수를 하더라도 해당 서비스에만 영향을 주기 때문에 PAM 구성을 위해 선호되는 방식입니다. 또한 새로운 PAM 서비스 추가도 단일 파일을 복사하는 것과 같이 간소화되었습니다. 서비스 특정 파일은 /etc/pam.d가 대부분의 PAM 구현에서 기본 구성이기 때문에 다른 플랫폼간 PAM 응용 프로그램에 대해 보다 나은 상호 운용성을 제공합니다.
또한 PAM 정책 파일을 사용하면 개별 서비스에 대한 인증 정책을 만들고 이러한 정책을 필요에 따라, 개인, 개인 그룹 또는 모든 사용자에게 지정할 수 있습니다. 기본 PAM 정책 파일은 /etc/security/pam_policy에 있습니다. PAM 정책 파일을 사용하면 안전하고 신뢰할 수 있는 방식으로 한 명 이상의 사용자에 대해 인증 정책을 설정하거나 변경할 수 있습니다.
시스템 관리자는 PAM 구성 파일을 관리합니다. 이러한 파일의 항목 순서가 잘못되면 예측하지 못한 역효과가 발생할 수 있습니다. 예를 들어, 잘못 구성된 파일은 사용자를 잠그게 되므로 복구하려면 단일 사용자 모드가 필요할 수 있습니다. 순서 설정에 대한 설명은 PAM 스택이 작동하는 방식을 참조하십시오.
PAM 구성 파일의 PAM 구성 정보는 다음 순서에 따라 PAM 라이브러리에서 수집됩니다.
/etc/pam.conf에서 서비스 이름을 조회합니다.
/etc/pam.d/service를 확인합니다.
/etc/pam.conf에서 서비스 이름 other를 확인합니다.
/etc/pam.d/other 파일이 검사됩니다.
이 순서에 따라 기존 /etc/pam.conf 파일이 /etc/pam.d에 있는 서비스별 PAM 구성 파일과 함께 작동할 수 있습니다.
/etc/pam.conf 파일 및 PAM 정책 파일은 서비스 특정 파일과 다른 구문을 사용합니다. 이러한 각 파일의 구문은 아래에서 설명합니다.
/etc/pam.conf 또는 PAM 정책 파일의 항목에 사용되는 형식은 다음 중 하나입니다.
service-name module-type control-flag module-path module-options
service-name module-type include path-to-included-PAM-configuration
서비스의 이름(대소문자 구분 안함)입니다(예:login 또는 passwd). 응용 프로그램에서는 응용 프로그램이 제공하는 서비스에 대해 서로 다른 서비스 이름을 사용할 수 있습니다. 예를 들어, Oracle Solaris 보안 셸 데몬에서는 sshd-none, sshd-password, sshd-kbdint, sshd-pubkey 및 sshd-hostbased의 서비스 이름을 사용합니다.
서비스 이름 other는 와일드카드 서비스 이름으로 사용되는 사전 정의된 이름입니다. 특정 서비스 이름을 구성 파일에서 찾을 수 없는 경우 other에 대한 구성 파일이 사용됩니다.
서비스의 유형(즉, auth, account, session 또는 password)입니다.
서비스에 대한 통합된 성공 또는 실패 값을 결정하는 모듈의 역할을 나타냅니다. 유효한 제어 플래그는 binding, definitive, include, optional, required, requisite 및 sufficient입니다. 이러한 플래그 사용에 대한 자세한 내용은 PAM 스택이 작동하는 방식을 참조하십시오.
서비스를 구현하는 라이브러리 객체의 경로입니다. 경로 이름이 절대 경로가 아닌 경우 경로 이름은 /usr/lib/security/$ISA/에 대한 상대 경로로 간주됩니다. libpam이 디렉토리에서 응용 프로그램의 특정 아키텍처를 찾도록 하려면 아키텍처 종속 매크로 $ISA를 사용합니다.
서비스 모듈에 전달되는 옵션입니다. 모듈의 매뉴얼 페이지에서는 해당 모듈에서 허용되는 옵션을 설명합니다. 일반적인 모듈 옵션에는 nowarn 및 debug가 포함됩니다.
개별 PAM 구성 파일에 대한 전체 경로 또는 /usr/lib/security 디렉토리에 상대적인 경로 이름을 제공합니다.
/etc/pam.d에 있는 서비스별 구성 파일은 pam.conf와 동일한 구문을 사용하지만 서비스 이름을 포함하지 않습니다. 서비스별 구성 파일을 사용할 때는 파일 이름이 서비스 이름입니다. 예를 들어, /etc/pam.d/cron에는 cron 명령에 대한 PAM 구성이 포함됩니다.
pam_user_policy PAM 모듈을 사용하면 시스템 관리자가 사용자별 기준에 따라 PAM 구성을 지정할 수 있습니다. 사용자의 pam_policy 키는 사용자별 PAM 구성 파일에 대한 경로를 제공해야 합니다. 자세한 내용은 pam_user_policy(5) 매뉴얼 페이지를 참조하십시오.
사용자별 인증 정책을 설정하는 방법은 다음과 같습니다.
사용자에 대한 새 PAM 정책 파일을 만든 후 usermod 명령을 사용하여 정책을 사용자에게 지정합니다. 이 절차는 사용자 정의된 PAM 정책을 사용자에게 지정하는 방법에서 설명합니다.
usermod 명령을 사용하여 사전 정의된 정책을 사용자에게 지정합니다.
usermod 명령에 -P 옵션을 사용하여 pam_policy 키를 포함하는 권한 프로파일을 사용자에게 지정합니다.
pam_policy 키를 포함하는 권한 프로파일을 /etc/security/policy.conf 명령에서 PROFS_GRANTED 키에 추가하여 모든 사용자에게 지정합니다. 이 절차는 새 권한 정책을 모든 사용자에게 지정하는 방법에서 설명합니다.
응용 프로그램이 다음 함수 중 하나를 호출하면 libpam이 PAM 구성 파일을 읽어서 이 서비스의 작업에 어떤 모듈이 참여하는지 확인합니다.
구성 파일에 이 서비스의 작업에 대한 모듈이 하나(예: 인증 또는 계정 관리)만 포함된 경우 해당 모듈의 결과가 작업의 결과를 결정합니다. 예를 들어, passwd 응용 프로그램에 대한 기본 인증 작업에는 하나의 모듈 pam_passwd_auth.so.1이 포함됩니다.
passwd auth required pam_passwd_auth.so.1
반면 서비스의 작업에 대해 정의된 모듈이 여러 개인 경우 해당 모듈을 스택이라 하고 PAM 스택이 해당 서비스에 대해 존재합니다. 예를 들어, /etc/pam.d/login에 다음 항목이 포함된 경우를 생각해 보십시오.
auth definitive pam_user_policy.so.1 auth requisite pam_authtok_get.so.1 auth required pam_unix_auth.so.1 auth required pam_dhkeys.so.1 auth required pam_unix_cred.so.1 auth required pam_dial_auth.so.1
이러한 항목은 login 서비스에 대한 샘플 auth 스택을 나타냅니다. 이 스택의 결과를 결정하려면 개별 모듈의 결과 코드에 통합 프로세스가 필요합니다. 통합 프로세스에서 모듈은 파일에 지정된 대로 순서대로 실행됩니다. 각 성공 또는 실패 코드는 모듈의 제어 플래그에 따라 전체 결과에 통합됩니다. 제어 플래그는 스택의 조기 종료를 유발할 수 있습니다. 예를 들어, requisite 또는 definitive 모듈이 실패하거나 sufficient, definitive 또는 binding 모듈이 성공할 수 있습니다. 스택이 처리된 후 개별 결과는 하나의 전체 결과로 합쳐서 응용 프로그램에 전달됩니다.
제어 플래그는 PAM 모듈이 서비스에 대한 액세스를 결정하는 데 수행하는 역할을 나타냅니다. 제어 플래그 및 효과는 다음과 같습니다.
Binding – 실패한 이전 required 모듈이 없는 경우 binding 모듈의 요구 사항 충족에 성공하면 응용 프로그램에 즉시 성공을 반환합니다. 이러한 조건이 충족되지 않는다면 모듈은 더 이상 실행되지 않습니다. 실패의 경우 required 실패가 기록되고 모듈 처리가 계속됩니다.
Definitive – 실패한 이전 required 모듈이 없는 경우 definitive 모듈의 요구 사항 충족에 성공하면 응용 프로그램에 즉시 성공을 반환합니다. 이전 required 모듈이 실패한 경우 모듈이 추가로 실행되지 않고 해당 실패가 응용 프로그램에 즉시 반환됩니다. 실패의 경우 모듈의 추가 실행 없이 즉시 오류가 반환됩니다.
Include – PAM 스택의 이 시점에서 사용될 별도의 PAM 구성 파일에서 행을 추가합니다. 이 플래그는 성공이나 실패 동작을 제어하지 않습니다. 새 파일이 읽혀지면 PAM 포함 스택이 증가됩니다. 새 파일에서 스택 확인이 완료되면 포함 스택 값이 감소합니다. 파일의 끝에 도달하고 PAM 포함 스택이 0이면 스택 처리가 종료됩니다. PAM 포함 스택에 대한 최대 수는 32입니다.
Optional – optional 모듈의 요구 사항을 충족하는 성공은 서비스를 사용하는 데 필요하지 않습니다. 실패의 경우 optional 실패가 기록됩니다.
Required – required 모듈의 요구 사항을 충족하는 성공은 서비스를 사용하는 데 필요합니다. 실패의 경우 이 서비스에 대한 나머지 모듈이 실행된 후 오류가 반환됩니다. 서비스에 대한 최종 성공은 실패를 보고한 binding 또는 required 모듈이 없을 경우에만 반환됩니다.
Requisite – requisite 모듈의 요구 사항을 충족하는 성공은 서비스를 사용하는 데 필요합니다. 실패의 경우 모듈의 추가 실행 없이 즉시 오류가 반환됩니다. 함수가 응용 프로그램에 성공을 반환할 수 있으려면 서비스에 대한 모든 requisite 모듈이 성공을 반환해야 합니다.
Sufficient – 발생한 이전 required 실패가 없는 경우 sufficient 모듈의 성공은 모듈의 추가 실행 없이 응용 프로그램에 즉시 성공을 반환합니다. 실패의 경우 optional 실패가 기록됩니다.
다음 두 다이어그램은 통합 프로세스에서 액세스가 어떻게 결정되는지 보여줍니다. 첫번째 다이어그램은 제어 플래그의 각 유형에 대해 성공 또는 실패가 어떻게 기록되는지 나타냅니다. 두번째 다이어그램은 통합된 값이 어떻게 결정되는지 보여줍니다.
그림 14-2 PAM 스택: 제어 플래그의 효과
그림 14-3 PAM 스택: 통합된 값이 결정되는 방식
이 예에서는 /etc/pam.d/other 파일의 인증 관리를 위한 기본 정의를 보여줍니다. 이러한 정의는 서비스 특정 정의가 구성되지 않은 경우에 사용됩니다.
# # Default definitions for Authentication management # Used when service name is not explicitly mentioned for authentication # auth definitive pam_user_policy.so.1 auth requisite pam_authtok_get.so.1 auth required pam_dhkeys.so.1 auth required pam_unix_auth.so.1 auth required pam_unix_cred.so.1
첫번째, pam_user_policy 모듈을 사용하여 사용자의 보안 정책을 확인합니다. definitive 제어 플래그는 보안 정책 평가가 성공할 경우 이 시점에서 검사된 다른 모듈이 없기 때문에 서비스가 응용 프로그램에 성공을 반환하도록 선택합니다. 요청이 실패할 경우에는 실패 메시지가 응용 프로그램에 전송되고 추가 검사가 수행되지 않습니다. 사용자에 대해 설정된 정책이 없으면 다음 모듈이 실행됩니다.
사용자별 PAM 정책이 이 사용자에 대해 지정되지 않았으면 pam_authtok_get 모듈이 실행됩니다. 이 모듈에 대한 제어 플래그는 requisite로 설정됩니다. pam_authtok_get을 실패할 경우 인증 프로세스가 종료되고 서비스에 실패가 반환됩니다.
pam_authtok_get이 실패하지 않으면 다음 3개의 모듈이 실행됩니다. 이러한 모듈은 required 제어 플래그로 구성되므로 개별 실패가 반환되는지 여부에 관계없이 프로세스가 계속됩니다. pam_unix_cred가 실행된 후에는 남은 모듈이 없습니다. 이 시점에서 모든 모듈이 성공한 경우 사용자에게 액세스 권한이 부여됩니다. pam_dhkeys, pam_unix_auth 또는 pam_unix_cred가 실패를 반환한 경우 사용자의 액세스가 거부됩니다.