탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
![]() |
Oracle Solaris 11.1 관리: 보안 서비스 Oracle Solaris 11.1 Information Library (한국어) |
프로세스 권한 관리에서는 명령, 사용자, 역할, 시스템 레벨에서 프로세스가 제한됩니다. Oracle Solaris는 권한을 통해 프로세스 권한 관리를 구현합니다. 권한을 사용하면 시스템에서 전체 수퍼유저 능력을 보유한 하나의 사용자나 프로세스와 연관된 보안 위험을 줄일 수 있습니다. 권한 및 RBAC는 전통적인 수퍼유저 모델의 강력한 대체 모델입니다.
RBAC에 대한 내용은 역할 기반 액세스 제어(개요)를 참조하십시오.
권한 관리 방법에 대한 내용은 권한 사용(작업)을 참조하십시오.
권한에 대한 참고 사항은 권한을 참조하십시오.
권한은 프로세스가 작업을 수행하는 데 필요한 별개의 권한입니다. 권한은 커널에서 시행됩니다. 권한의 기본 세트의 한도 내에서 운영되는 프로그램은 시스템 보안 정책의 한도 내에서 운영됩니다. 시스템 보안 정책의 한도 밖에서 운영되는 프로그램의 예로 setuid 프로그램이 있습니다. 권한을 사용할 경우 프로그램이 setuid를 호출할 필요가 없습니다.
권한은 시스템에서 가능한 작업 종류를 별개로 열거합니다. 정확히 프로그램 성공을 위해 필요한 권한만으로 프로그램을 실행할 수 있습니다. 예를 들어, 파일을 조작하는 프로그램에 file_dac_write 및 file_flag_set 권한이 필요할 수 있습니다. 프로세스에 대한 이러한 권한으로 인해 프로그램을 root로 실행할 필요가 없습니다.
전통적으로, 시스템은 권한 모델을 따르지 않았습니다. 오히려 수퍼유저 모델을 사용했습니다. 수퍼유저 모델에서는 프로세스가 root 또는 사용자로 실행됩니다. 사용자 프로세스는 사용자의 디렉토리와 파일에서 작동하도록 제한되었습니다. root 프로세스는 시스템의 어디든지 디렉토리 및 파일을 만들 수 있습니다. 사용자의 디렉토리 밖에 디렉토리를 만들어야 하는 프로세스는 UID=0, 즉 root로 실행됩니다. 시스템 파일을 보호하기 위해 보안 정책이 DAC(모든 액세스 제어)에 의존했습니다. 장치 노드가 DAC로 보호되었습니다. 예를 들어, sys 그룹이 소유한 장치는 sys 그룹의 구성원만 열 수 있었습니다.
그러나 setuid 프로그램, 파일 사용 권한 및 관리 계정은 오용되기 쉽습니다. setuid 프로세스가 허가한 동작이 작업 완료를 위해 필요한 것보다 훨씬 많습니다. 그러면 전권의 root 사용자로 실행된 침입자에 의해 setuid 프로그램이 손상될 수 있습니다. 마찬가지로, root 암호에 액세스할 수 있는 사용자가 전체 시스템을 손상시킬 수 있습니다.
이와 반대로, 권한으로 정책을 시행하는 시스템은 사용자 능력과 root 능력 사이에 단계적 등급을 허용합니다. 일반 사용자 능력을 벗어난 작업을 수행하려면 사용자에 권한을 부여할 수 있고, root는 현재 보유한 root보다 적은 권한으로 제한될 수 있습니다. RBAC를 사용하여 권한으로 실행되는 명령을 권한 프로파일에 격리하고 하나의 사용자나 역할에 지정할 수 있습니다. 표 8-1은 RBAC+권한 모델이 제공하는, 사용자 능력과 루트 능력 사이의 단계적 등급을 요약한 것입니다.
권한 모델이 수퍼유저 모델보다 훨씬 안전합니다. 프로세스에서 제거된 권한은 악용될 수 없습니다. 프로세스 권한은 프로그램이나 관리 계정이 모든 능력에 액세스하지 못하도록 합니다. 프로세스 권한은 민감한 파일에 추가 보호 조치를 제공할 수 있으며, DAC 보호만으로는 액세스에 악용될 수 있습니다.
그런 다음 프로그램과 프로세스에 필요한 능력만으로 권한을 제한할 수 있습니다. 이 기능을 최소 권한의 원칙이라고 합니다. 최소 권한을 구현하는 시스템에서는 프로세스를 탈취하는 침입자가 프로세스가 가진 권한에만 액세스할 수 있습니다. 시스템의 나머지는 손상될 수 없습니다.
FILE 권한 – file 문자열로 시작하는 권한은 파일 시스템 객체에서 작동합니다. 예를 들어, file_dac_write 권한은 파일에 쓰는 동안 모든 액세스 제어를 대체합니다.
IPC 권한 – ipc 문자열로 시작하는 권한은 IPC 객체 액세스 제어를 대체합니다. 예를 들어, ipc_dac_read 권한을 통해 프로세스가 DAC로 보호된 원격 공유 메모리를 읽을 수 있습니다.
NET 권한 – net 문자열로 시작하는 권한은 특정 네트워크 기능에 액세스를 제공합니다. 예를 들어, net_rawaccess 권한을 통해 장치가 네트워크에 연결할 수 있습니다.
PROC 권한 – proc 문자열로 시작하는 권한을 통해 프로세스 자체의 제한된 등록 정보를 수정할 수 있습니다. PROC 권한은 매우 제한된 효과를 가진 권한입니다. 예를 들어, proc_clock_highres 권한을 통해 프로세스가 고해상도 타이머를 사용할 수 있습니다.
SYS 권한 – sys 문자열로 시작하는 권한은 다양한 시스템 등록 정보에 무제한 액세스를 제공합니다. 예를 들어, sys_linkdir 권한을 통해 프로세스가 디렉토리의 하드 링크를 연결 및 분리할 수 있습니다.
다른 논리 그룹에는 CONTRACT, CPC, DTRACE, GRAPHICS, VIRT 및 WIN이 포함됩니다.
일부 권한은 시스템에 제한된 효과를 미치고, 일부는 광범위한 효과를 미칩니다. proc_taskid 권한의 정의는 제한된 효과를 나타냅니다.
proc_taskid Allows a process to assign a new task ID to the calling process.
net_rawaccess 권한의 정의는 광범위한 효과를 나타냅니다.
net_rawaccess Allow a process to have direct access to the network layer.
privileges(5) 매뉴얼 페이지는 모든 권한을 설명합니다. ppriv -lv 명령은 모든 권한의 설명을 표준 출력으로 인쇄합니다.
권한이 있는 시스템과 권한이 없는 시스템 사이에는 몇 가지 눈에 띄는 차이점이 있습니다. 다음 표는 일부 차이점을 나열합니다.
표 8-2 권한 있는 시스템과 권한 없는 시스템 사이의 눈에 띄는 차이점
|
Oracle Solaris에서 project.max-locked-memory 및 zone.max-locked-memory 리소스 컨트롤을 사용하여 PRIV_PROC_LOCK_MEMORY 권한에 지정된 프로세스의 메모리 소비를 제한할 수 있습니다. 이 권한으로 프로세스가 물리적 메모리의 페이지를 잠글 수 있습니다.
PRIV_PROC_LOCK_MEMORY 권한을 권한 프로파일에 지정하면 이 권한을 가진 프로세스에 모든 메모리를 잠그는 능력을 제공할 수 있습니다. 보호 조치로, 권한 사용자가 모든 메모리를 잠그지 못하도록 리소스 컨트롤을 설정하십시오. 비전역 영역에서 실행되는 권한 있는 프로세스의 경우 zone.max-locked-memory 리소스 컨트롤을 설정합니다. 시스템에서 실행되는 권한 있는 프로세스의 경우 프로젝트를 만들고 project.max-locked-memory 리소스 컨트롤을 설정합니다. 이러한 리소스 컨트롤에 대한 내용은 Oracle Solaris 11.1 관리: Oracle Solaris 영역, Oracle Solaris 10 영역 및 리소스 관리의 6 장, 리소스 제어(개요) 및 Oracle Solaris 11.1 관리: Oracle Solaris 영역, Oracle Solaris 10 영역 및 리소스 관리의 16 장, 비전역 영역 구성(개요)을 참조하십시오.
모든 프로세스에는 프로세스가 특정 권한을 사용할 수 있는지 여부를 결정하는 4개의 권한 세트가 있습니다. 커널이 자동으로 권한의 유효 세트를 계산합니다. 권한의 초기 상속 가능한 세트를 수정할 수 있습니다. 권한을 사용하도록 코딩된 프로그램은 권한의 허가된 세트를 줄일 수 있습니다. 권한의 제한 세트를 축소할 수 있습니다.
유효 권한 세트 또는 E – 현재 발효 중인 권한 세트입니다. 프로세스는 허가된 세트에 속한 권한을 유효 세트에 추가할 수 있습니다. 또한 E에서 권한을 제거할 수도 있습니다.
허가된 권한 세트 또는 P – 사용할 수 있는 권한 세트입니다. 상속 또는 지정을 통해 얻은 권한을 프로그램에 사용할 수 있습니다. 실행 프로파일은 프로그램에 권한을 지정하는 하나의 방법입니다. setuid 명령은 root가 가진 모든 권한을 프로그램에 지정합니다. 허가된 세트에서 권한을 제거할 수 있지만 세트에 권한을 추가할 수는 없습니다. P에서 제거된 권한은 자동으로 E에서 제거됩니다.
권한 인식 프로그램은 사용하지 않는 권한을 허가된 세트에서 제거합니다. 이렇게 하면 프로그램이나 악의적 프로세스에서 불필요한 권한을 악용할 수 없습니다. 권한 인식 프로그램에 대한 자세한 내용은 Developer’s Guide to Oracle Solaris 11 Security의 2 장, Developing Privileged Applications를 참조하십시오.
상속 가능한 권한 세트 또는 I – exec의 호출에서 프로세스가 상속할 수 있는 권한 세트입니다. exec에 대한 호출 이후 상속된 권한이 허용된 유효 세트에 배치되어 setuid 프로그램의 특수한 경우를 제외하고 이러한 세트가 동일하게 설정됩니다.
setuid 프로그램의 경우 exec의 호출 후에 상속 가능한 세트가 먼저 제한 세트로 제약됩니다. 그런 다음, 상속된 권한 세트(I)에서 제한 세트에 속한 권한(L)을 뺀 값이 해당 프로세스의 P 및 E에 지정됩니다.
제한 권한 세트 또는 L – 프로세스와 그 자식에 사용 가능한 권한에 대한 외부 제한입니다. 기본적으로 제한 세트는 모든 권한입니다. 프로세스가 제한 세트를 축소할 수 있지만 제한 세트를 확장할 수는 없습니다. L은 I를 제한하는 데 사용됩니다. 결과적으로, L은 exec 시간에 P 및 E를 제한합니다.
사용자가 권한 지정 프로그램을 포함하는 프로파일에 지정된 경우 대개 해당 프로그램을 실행할 수 있습니다. 수정되지 않은 시스템에서 프로그램의 지정된 권한은 사용자의 제한 세트 내에 있습니다. 프로그램에 지정된 권한은 사용자의 허가된 세트의 일부가 됩니다. 권한이 지정된 프로그램을 실행하려면 사용자가 프로파일 셸에서 프로그램을 실행해야 합니다.
커널은 기본 권한 세트를 인식합니다. 수정되지 않은 시스템에서 각 사용자의 초기 상속 가능한 세트는 로그인 시 기본 세트와 같습니다. 기본 세트를 수정할 수 없는 반면, 사용자가 기본 세트에서 상속한 권한은 수정할 수 있습니다.
수정되지 않은 시스템에서 로그인 시 사용자의 권한 세트는 다음과 비슷합니다.
E (Effective): basic I (Inheritable): basic P (Permitted): basic L (Limit): all
따라서 로그인 시 모든 사용자는 상속 가능한 세트, 허가된 세트, 유효 세트에 기본 세트를 포함합니다. 사용자의 제한 세트는 (전역 또는 비전역) 영역의 기본 제한 세트와 같습니다. 사용자의 유효 세트에 더 많은 권한을 넣으려면 권한 프로파일을 사용자에 지정해야 합니다. 권한 프로파일은 사용자가 권한을 추가한 명령을 포함합니다. 또한 위험을 동반하더라도 사용자나 역할에 직접 권한을 지정할 수도 있습니다. 위험 설명은 보안 속성을 직접 지정할 때 보안 고려 사항을 참조하십시오.
프로세스는 권한을 상속할 수 있습니다. 또는 프로세스가 권한에 지정될 수 있습니다. 프로세스는 부모 프로세스에서 권한을 상속합니다. 로그인 시, 사용자의 초기 상속 가능한 권한 세트는 사용자의 프로세스에 사용 가능한 권한을 결정합니다. 사용자 초기 로그인의 모든 자식 프로세스는 해당 세트를 상속합니다.
프로그램, 사용자, 역할에 직접 권한을 지정할 수도 있습니다. 프로그램에 권한이 필요할 때 권한 프로파일에서 프로그램의 실행 파일에 권한을 지정합니다. 프로그램을 실행하도록 허가된 사용자나 역할이 프로그램을 포함하는 프로파일에 지정됩니다. 로그인 시 또는 프로파일 셸을 입력할 때, 프로그램의 실행 파일을 프로파일 셸에 입력하면 프로그램이 권한으로 실행됩니다. 예를 들어, Object Access Management 프로파일을 포함하는 역할은 chmod 명령을 file_chown 권한으로 실행할 수 있습니다.
역할/사용자가 추가 권한이 직접 지정된 프로그램을 실행할 때 지정된 권한이 역할/사용자의 상속 가능한 세트에 추가됩니다. 권한이 지정된 프로그램의 자식 프로세스는 부모의 권한을 상속합니다. 자식 프로세스에 부모 프로세스보다 더 많은 권한이 필요한 경우 자식 프로세스에 해당 권한을 직접 지정해야 합니다.
권한을 사용하도록 코딩된 프로그램을 권한 인식 프로그램이라고 합니다. 권한 인식 프로그램은 프로그램 실행 중 권한 사용을 켜고 끕니다. 운용 환경에서 성공하려면 프로그램이 켜고 끄는 권한을 지정해야 합니다.
권한 인식 코드의 예는 Developer’s Guide to Oracle Solaris 11 Security의 2 장, Developing Privileged Applications를 참조하십시오. 권한이 필요한 프로그램에 권한을 지정하려면 예 9-18를 참조하십시오.
보안 관리자의 자격으로 권한을 지정할 책임이 있습니다. 최적의 사용법은 권한 프로파일에서 명령에 권한을 지정하는 것입니다. 그런 다음 권한 프로파일을 역할이나 사용자에 지정합니다.
사용자, 역할, 권한 프로파일에 직접 권한을 지정할 수도 있습니다. 세션 동안 책임감 있게 권한을 사용할 것으로 신뢰되는 일부 사용자에게는 권한을 직접 지정할 수 있습니다. 직접 지정의 좋은 후보는 proc_clock_highres와 같은 제한된 영향을 미치는 권한입니다. 직접 지정의 나쁜 후보는 file_dac_write와 같은 폭넓은 영향을 미치는 권한입니다.
사용자나 시스템에 권한이 거부될 수도 있습니다. 사용자나 시스템의 초기 상속 가능한 세트 또는 제한 세트에서 권한을 제거할 때는 주의를 기울여야 합니다.
사용자 및 역할은 상속 가능한 권한 세트를 갖습니다. 제한 세트는 초기에 모든 권한이므로 확장할 수 없습니다. 사용자, 역할, 시스템에 대한 초기 상속 가능한 세트를 확장할 수 있습니다. 상속 가능한 세트에 속하지 않는 권한을 프로세스에 지정할 수도 있습니다.
세 가지 방식으로 사용 가능한 권한을 확장할 수 있습니다.
사용자, 역할, 시스템에 대한 초기 상속 가능한 세트를 확장할 수 있습니다.
상속 가능한 세트에 속하지 않는 권한을 프로세스에 명시적으로 지정할 수 있습니다.
상속 가능한 세트에 속하지 않는 권한은 네트워크 포트, UID 또는 파일 객체에 명시적으로 지정할 수 있습니다. 이러한 권한 사용을 확장 정책이라고 부릅니다.
프로세스별 권한 지정이 가장 정확한 권한 추가 방법입니다. 사용자에 역할을 지정하여 사용자가 수행할 수 있는 권한 있는 작업의 수를 확장할 수 있습니다. 역할은 추가된 권한을 가진 명령을 포함하는 권한 프로파일에 지정됩니다. 사용자가 역할을 맡으면 역할의 프로파일 셸을 얻습니다. 권한 프로파일의 명령을 역할의 셸에 입력할 때 추가된 권한으로 명령이 실행됩니다.
사용자가 맡은 역할이 아닌, 사용자에게 권한 프로파일을 지정할 수도 있습니다. 사용자가 pfksh와 같은 프로파일 셸을 열면 사용자의 권한 프로파일의 명령을 권한으로 실행할 수 있습니다. 일반 셸에서 명령은 권한으로 실행되지 않습니다. 권한 있는 프로세스는 권한 있는 셸에서만 실행할 수 있습니다.
사용자, 역할, 시스템에 대한 초기 상속 가능한 권한 세트를 확장하는 것은 위험한 권한 지정 방법입니다. 상속 가능한 세트의 모든 권한은 허가된 세트와 유효 세트에 속합니다. 사용자나 역할이 셸에 입력하는 모든 명령은 직접 지정된 권한을 사용할 수 있습니다. 직접 지정된 권한을 통해 사용자/역할의 관리 책모든 한도를 벗어난 작업을 쉽게 수행할 수 있습니다.
이러한 위험을 줄이기 위해 한 번에 하나의 객체에서 작업할 수 있도록 사용자 또는 역할에 권한을 지정할 수 있습니다. 가능한 객체는 네트워크 포트, UID 및 파일 객체입니다. 예를 들어, /var/core 디렉토리의 파일에 대한 file_dac_read 권한을 사용자에게 지정할 수 있습니다. file_dac_read 권한은 이 확장 정책이 적용된 경우 사용자 프로세스의 유효 세트에 있어야 합니다. 그러면 사용자가 이 디렉토리 객체에 대한 확장 정책이 이 사용자에게 지정된 경우 /var/core 디렉토리의 모든 파일을 읽을 수 있습니다.
시스템에서 초기 상속 가능한 권한 세트에 추가할 때 시스템에 로그온한 모든 사용자는 더 큰 기본 권한 세트를 받습니다. 이러한 직접 지정으로 시스템의 모든 사용자는 일반 사용자의 한도를 벗어난 작업을 쉽게 수행할 수 있습니다.
주 - 제한 세트는 초기에 모든 권한이므로 확장할 수 없습니다.
권한을 제거하여 사용자나 역할이 특정 작업을 수행하는 것을 막을 수 있습니다. 초기 상속 가능한 세트 및 제한 세트에서 권한을 제거할 수 있습니다. 초기 상속 가능한 세트 또는 제한 세트가 기본 세트보다 작은 경우 세트를 분배하기 전에 권한 제거를 주의 깊게 테스트해야 합니다. 초기 상속 가능한 세트에서 권한을 제거하면 사용자의 로그인을 막을 수 있습니다. 제한 세트에서 권한을 제거할 때 기존의 setuid 프로그램에 제거된 권한이 필요한 경우 프로그램을 실패할 수 있습니다.
스크립트는 명령과 비슷한 실행 파일입니다. 따라서 권한 프로파일에서 명령에 권한을 추가하듯이 스크립트에 권한을 추가할 수 있습니다. 권한 프로파일에 지정된 사용자/역할이 프로파일 셸에서 스크립트를 실행할 때 추가된 명령으로 스크립트가 실행됩니다. 스크립트에 권한이 필요한 명령이 포함된 경우 추가된 권한을 가진 명령 역시 지정된 권한 프로파일에 있어야 합니다.
권한 인식 프로그램은 프로세스별 권한을 제한할 수 있습니다. 권한 인식 프로그램의 임무는 프로그램에 필요한 권한만 실행 파일에 지정하는 것입니다. 그런 다음 프로그램을 테스트하여 프로그램이 작업 수행을 성공하는지 확인합니다. 또한 프로그램이 권한 사용을 오용하지 않는지 검사합니다.
권한 모델은 권한을 사용하여 시스템 인터페이스를 보호하며, 수퍼유저 모델은 파일 사용 권한만으로 보호합니다. 권한 있는 시스템에서 파일 사용 권한은 인터페이스를 보호하기에 너무 약합니다. proc_owner와 같은 권한은 파일 사용 권한을 대체하고 시스템 전체에 대한 전체 액세스 권한을 부여할 수 있습니다.
따라서 Oracle Solaris에서 장치 디렉토리의 소유권은 장치를 열기에 충분하지 않습니다. 예를 들어 sys 그룹의 구성원은 더 이상 자동으로 /dev/ip 장치를 열도록 허용되지 않습니다. /dev/ip의 파일 사용 권한은 0666이지만, 장치를 열려면 net_rawaccess 권한이 필요합니다.
장치 정책은 권한으로 제어합니다. getdevpolicy 명령은 모든 장치에 대한 장치 정책을 표시합니다. 장치 구성 명령 devfsadm은 장치 정책을 설치합니다. devfsadm 명령은 장치 읽기/쓰기를 위해 권한 세트를 open과 바인드합니다. 자세한 내용은 getdevpolicy(1M) 및 devfsadm(1M) 매뉴얼 페이지를 참조하십시오.
장치 정책을 통해 장치 열기 권한 부여에 유연성이 확대됩니다. 기본 장치 정책과 비교해 다른 권한이나 많은 권한이 필요할 수 있습니다. 장치 정책 및 드라이버에 대한 권한 요구 사항을 적절히 수정할 수 있습니다. 장치 드라이버를 설치, 추가, 업데이트할 때 권한을 수정할 수 있습니다.
add_drv 및 update_drv 명령을 사용하여 장치 정책 항목 및 장치 특정 권한을 수정할 수 있습니다. 장치 정책을 변경하려면 전체 권한 세트를 보유한 프로세스를 실행 중이어야 합니다. 자세한 내용은 add_drv(1M) 및 update_drv(1M) 매뉴얼 페이지를 참조하십시오.
Oracle Solaris는 권한 실패를 디버깅하는 도구를 제공합니다. ppriv 명령과 truss 명령은 디버깅 출력을 제공합니다. 예제는 ppriv(1)매뉴얼 페이지를 참조하십시오. 절차는 프로그램에 필요한 권한을 확인하는 방법을 참조하십시오. 또한 dtrace 명령을 사용할 수 있습니다. 자세한 내용은 dtrace(1M) 매뉴얼 페이지를 참조하십시오.