메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

Tivoli Access Manager for Operating Systems를 사용하여 DB2 자원 보호하기

Aditi Prasad, Associate Software Engineer, WSO2 Inc
Aditi Prasad photo
Aditi Prasad는 Associate Software Engineer이다. 현재, 인도 푸네에 있는 IBM India Software Lab에서 Tivoli Security Product를 담당한다.
Nishant Sinha, DB2 Advanced Technical Support Analyst, WSO2 Inc
Sinha Nishant photo
Nishant Sinha는 인도 푸네에 있는 IBM India Software Lab의 DB2 고급 기술 지원 분석가로 전세계의 IBM DB2 고객을 지원하는 업무를 담당한다.

요약:  Tivoli® Access Manager for Operating Systems(TAMOS)를 사용하여 IBM® DB2® 자원을 보호하는 방법을 배워보십시오. TAMOS는 UNIX®와 Linux® 운영 체제에서 자원을 보호하는 데 필요한 IBM 솔루션입니다. 이 기사에서는 TAMOS를 사용하여 DB2 자원을 보호하는 정책을 설정하는 방법을 두 가지 실제 시나리오를 통해 단계별로 살펴봅니다. 독자는 이러한 시나리오를 근간으로 하여 데이터베이스를 보호할 수 있는 엔터프라이즈급 보안 솔루션을 빌드할 수 있습니다.

원문 게재일:  2010 년 4 월 22 일 번역 게재일:   2010 년 6 월 22 일
난이도:  초급 영어로:  보기 PDF:  A4 and Letter (182KB | 18 pages)Get Adobe® Reader®
페이지뷰:  3375 회
의견:  


소개

모든 데이터베이스 관리 시스템은 승인되지 않은 액세스와 수정이 이루어지지 않도록 데이터를 보호할 수 있어야 한다. 이점은 IBM DB2 Database for Linux, UNIX, and Windows®(이하, DB2)의 경우에도 마찬가지이다. DB2는 인증, 권한 부여 및 특권과 같은 몇 가지 메커니즘을 사용하여 이러한 요구를 충족시킨다. 그러나, DB2는 기본 운영 체제에 대부분 의존하여 프로세스, 컨테이너, 시스템 파일과 같은 자원을 보호한다.

Tivoli Access Manager for Operating System(TAMOS)은 중앙화된 정책 관리 방식을 사용하여 UNIX나 Linux 운영 체제에 있는 자원을 보호하는 IBM 솔루션이다. 그러므로 TAMOS를 사용하여 기본 운영 체제에서 제공하는 보안 계층과는 별개의 추가 보안 계층을 제공할 수 있다.

이 기사에서 다루게 될 주제에 대한 개요는 다음과 같다.

  • TAMOS에 대한 소개와 TAMOS를 설치하고 구성하는 방법에 대한 개요
  • 권한 부여 정책을 사용하여 DB2 자원을 보호하는 방법
  • 설치된 기본 운영 체제와 데이터베이스 관리 시스템의 잠재적 보안 허점을 설명할 수 있는 실제 시나리오와 TAMOS를 사용하여 이러한 보안 허점을 막는 방법
  • DB2 프로세스에 대한 조작을 추적하고 모니터하는 방법

TAMOS란?

엔터프라이즈 관점에서 보면 UNIX와 Linux 운영 체제는 보안상에 몇 가지 문제점이 있다. TAMOS를 이용하면 UNIX와 Linux 운영 체제의 운영 체제 레벨에서 액세스를 제어하여 이러한 문제점을 처리할 수 있다. TAMOS는 중앙화된 정책 관리 기술을 통해 승인되지 않은 액세스를 차단하고 민감한 데이터와 자원에 대한 액세스를 모니터한다.

TAMOS는 UNIX나 Linux 운영 체제에 적합한 일련의 디먼과 커널 확장 및 제어 파일로 구현된다. TAMOS 커널 확장은 모든 시스템 호출을 가로챈다. 그 후에는 중앙화된 권한 부여 디먼인 pdosd가 시스템 호출이 요청되는 과정에서 모든 권한 부여 결정에 참여한다.

그림 1에 있는 순서도를 통해 TAMOS가 커널 레벨에서 시스템 호출을 가로채어 보안 계층을 구현하는 방법을 확인할 수 있다.


그림 1.TAMOS 커널 인터셉션을 나타내는 샘플 순서도
Open() 호출 > open()을 pdos_open에 맵핑 > TAMOS가 권한 부여를 호출 > 허용할 것인가? > '예'인 경우, 실제로 open()을 호출하고 파일 디스크립터 리턴, '아니오'인 경우, 거부

IBM TAMOS를 설치하고 구성하려면 먼저, 시스템에서 요구하는 몇 가지 전제조건이 만족되어야 한다. 그러나 이 기사에서는 이러한 전제조건에 대한 자세한 설명을 다루지 않는다. 전제조건에 대한 자세한 내용은 이 기사 마지막 부분에 있는 참고자료 섹션에 링크되어 있는 "TAMOS Installation Guide"를 참조하기 바란다.

설치

다음과 같은 네 가지 방법 중 하나로 TAMOS를 설치할 수 있다.

  • 다중 플랫폼 GUI 모드 설치
  • 다중 플랫폼 콜솔 모드 설치
  • 다중 플랫폼 자동 모드 설치
  • 기본 설치

이 세션에서는 예제를 통해 첫 번째 설치 유형을 살펴본다. — 특히 Linux 서버에서 TAMOS를 GUI 모드로 설치하는 방법을 살펴본다. 또한, 이 기사의 이후 섹션에 있는 예제에서는 Linux 운영 체제를 사용하는 것으로 가정한다.

대화식 GUI 모드 설치를 시작하려면 TAMOS CD를 찾아서 이름이 install_amos_platform인 프로그램을 실행한다. 여기서 platform은 운영 체제의 이름을 나타낸다. 이 프로그램은 설치 마법사를 실행하여 설치 프로세스를 시작한다. 예를 들어, 이 기사에서와 같이 Linux 시스템에서 설치하는 경우에는 이 설치 프로그램의 이름은 ./install_amos_linux가 된다.

그림 2와 그림 3에는 TAMOS 설치 마법사를 캡처한 샘플 스크린샷이 표시되어 있다.


그림 2. TAMOS 설치 화면
TAMOS InstallShield Wizard의 시작 화면

그림 3. 권장 시스템 설정
시스템 검사를 통해 현재 메모리, 필수 메모리, 공간 요구사항 및 운영 체제 지원 여부를 표시

설치 과정은 설치 마법사를 통해 진행되며 설치 마법사가 해당 LDAP 서버를 사용하여 TAM Runtime을 설치하고 구성하는 과정을 안내한다.

자동 모드 설치에서는 응답 파일을 사용하여 프로그램을 자동으로 설치한다. 기본 설치에서는 해당 운영 체제에서 제공하는 기본 소프트웨어 설치 유틸리티를 사용한다. 자세한 설치 지시사항은 이 기사 마지막 부분의 참고자료 섹션에 링크되어 있는 "TAMOS Installation Guide"를 참고하기 바란다.

TAMOS 구성

이 섹션에서는 기본 설치를 수행한 후, UNIX나 Linux 운영 체제에서 TAMOS를 구성하는 방법을 설명한다. Installshield 다중 플랫폼을 사용하여 설치하는 경우에는 이미 TAMOS가 설치 프로세스의 일부로 구성되어 있다. 그러나 기본 설치를 수행하는 경우에는 여전히 TAMOS를 설치하고 나서 TAMOS를 구성해야 한다.

기본 설치를 수행하고 나서 TAMOS를 구성하기 위해 사용하는 명령은 pdoscfg이다. 다음은 초기 구성 과정에서 지정해야 하는 필수 구성 옵션이다.

  • branch — 이 시스템이 등록된 정책 브랜치
  • suffix — TAMOS와 연관된 사용자가 작성된 사용자 레지스트리 접미부
  • registry_ssl_cacert — TAM 사용자 레지스트리 서버의 인증서
  • admin_name — Tivoli Access Manager 관리자 이름
  • admin_pwd — Tivoli Access Manager 관리자 비밀번호

Listing 1. TAMOS를 구성하는 데 필요한 샘플 명령

[root@Server~]#pdoscfg -registry_ssl_cacert /ldapcert.arm -branch Server.in.ibm.com \
-suffix o=ibm,c=in -admin_name administrator -admin_pwd password
			

자세한 구성 지시사항은 이 기사 마지막 부분의 참고자료 섹션에 있는 "TAMOS Administration Guide"를 참고하기 바란다.


권한 부여 정책 설정

DB2 자원은 DB2가 설치된 해당 운영 체제에 존재하는 DB2 프로세스, 컨테이너, 시스템 파일 등을 의미한다. TAMOS는 ACL(Access Control List) 및 POP(Protected Object Policy)와 같은 다양한 액세스 제어를 사용하여 이러한 자원을 보호한다. TAMOS는 정책 데이터베이스에서 오브젝트를 작성하는 과정으로 이루어진 정적 모드를 사용하여 자원을 보호한다. 보호해야 할 모든 DB2 자원은 오브젝트로서 정책 데이터베이스에 명시적으로 작성되어야 하며 오브젝트에는 ACL/POP가 적용되어야 한다.

정책 데이터베이스

Tivoli Access Manager(TAM) 환경에서는 오브젝트에 정의된 ACL과 POP는 정책 데이터베이스에 저장된다.

다음 예제를 통해 TAMOS 액세스 제어를 사용하여 부정한 작동을 차단할 수 있는 방법을 확인할 수 있다.

UNIX나 Linux 시스템에 대한 모든 사용 권한을 갖고 있는 루트 사용자가 자신의 ID를 DB2 인스턴스 사용자(예: db2ins95)로 전환하여 일부 DB2 프로세스를 함부로 변경하려고 한다. 이러한 사례가 바로 TAMOS를 통해 DB2 자원을 보호해야 하는 경우이다. TAMOS는 대리 조작을 차단할 수 있는 방법을 대리 자원을 사용하는 과정을 통해 제공한다. 먼저, 오브젝트를 작성한다.

오브젝트를 작성하는 구문은 다음과 같다.

Object create /OSSEAL/<Server name>/Resource "Description" <object type> ispolicyattachable yes|no

예를 들면, 위에서 설명한 사례에서는 Listing 2에 있는 것과 같은 명령을 사용하여 대리 자원을 위한 오브젝트를 작성할 수 있다.


Listing 2. 오브젝트를 작성하는 샘플 명령
			
pdadmin sec_master> object create /OSSEAL/Server.in.ibm.com/Surrogate/User/db2ins95 \
	"SurrogateUser" 0 ispolicyattachable yes
			

그런 다음, Listing 3에 있는 것과 같은 명령을 사용하여 루트 사용자가 사용자 ID를 db2ins95로 전환하지 못하도록 정책을 작성한다.


Listing 3. ACL을 작성하는 샘플 명령

pdadmin sec_master> acl show surr-acl
    ACL Name: surr-acl
    Description:
    Entries:
        User sec_master TcmdbsvaBRl
        User root T

상기 ACL에서는 루트 사용자에게 대리 권한 비트 "G"를 지정하지 않았다. 이제 Listing 4에 있는 것과 같은 명령을 사용하여 시행할 오브젝트에 보안 정책을 적용한다.


Listing 4. 시행할 오브젝트에 정책을 적용하는 샘플 명령

pdadmin sec_master> acl attach /OSSEAL/Server.in.ibm.com/Surrogate/User/db2ins95 surr-acl

이제 Listing 5에 표시된 바와 같이 루트 사용자가 ID를 DB2 인스턴스 사용자로 변경하려고 해도 그렇게 할 수 없게 된다.


Listing 5. ID를 DB2 인스턴스 사용자로 변경할 수 없음
[root@Server ~]# whoami
root
[root@Server ~]# su - db2ins95
su: cannot set user id: Operation not permitted
 

이 섹션에 있는 예제에서는 오브젝트를 작성하고 이 오브젝트에 정책을 적용하는 방법을 확인할 수 있다. 특히, 루트 사용자의 DB2 인스턴스 사용자 전환 권한을 제어하여 DB2 자원을 보호하는 방법을 알 수 있다. 루트 계정의 사용을 제어하는 이러한 기능은 TAMOS의 핵심 기능 중 하나이다.


실제 시나리오

이 섹션에서는 DB2 고객이 직면하는 두 가지 실제적인 문제를 TAMOS를 이용하여 처리하는 방법을 살펴본다.

사례 1

SIGKILL (kill -9) 신호가 db2sysc 프로세스에 전송되면서 인스턴스가 파손되는 경험을 했다고 일부 DB2 고객이 보고했다. kill -9 신호가 db2sysc로 전송되면 DB2 인스턴스가 파손되는 것은 당연하다. 그러나 프로덕션 시스템에서 인스턴스가 파손되면 비즈니스에 심각한 영향을 주게 된다. 이 섹션에 있는 예제에서 이러한 시나리오를 확인할 수 있다.

db2ins95라는 DB2 인스턴스가 있다고 가정한다. 이러한 시나리오를 시작하기 위해 Listing 6에 표시된 것과 같이 ps 명령을 실행하여 db2ins95 인스턴스에서 실행한 DB2 프로세스를 표시한다.


Listing 6. DB2 인스턴스 프로세스 표시
[db2ins95@Server ~]$ ps -ef | grep db2
root      7970  7929  0 12:32 pts/2    00:00:00 su - db2ins95
db2ins95  7971  7970  0 12:32 pts/2    00:00:00 -bash
db2ins95  8380     1  0 12:39 pts/2    00:00:00 /home/db2ins95/sqllib/bin/db2bp
 7971A2077 5 A
root      8587     1  0 12:45 pts/2    00:00:00 db2wdog 0
db2ins95  8588  8587  0 12:45 pts/2    00:00:00 db2sysc 0
root      8589  8588  0 12:45 pts/2    00:00:00 db2ckpwd 0
root      8590  8588  0 12:45 pts/2    00:00:00 db2ckpwd 0
root      8591  8588  0 12:45 pts/2    00:00:00 db2ckpwd 0
root      8592  8588  0 12:45 pts/2    00:00:00 db2pmd 0
db2ins95  8593  8588  0 12:45 pts/2    00:00:00 db2gds 0
db2ins95  8594  8588  0 12:45 pts/2    00:00:00 db2licc 0
db2ins95  8595  8588  0 12:45 pts/2    00:00:00 db2ipccm 0
db2ins95  8596  8588  0 12:45 pts/2    00:00:00 db2resync 0
db2ins95  8598  8588  1 12:45 pts/2    00:00:00 db2acd 0 ,0,0,0,1,0,0,0,897d44
,14,1e014,2,0,1,11fd0,0x11f90000,0x11f90000,1610000,100004,2,478009
db2ins95  8617  7971  0 12:45 pts/2    00:00:00 ps -ef
db2ins95  8618  7971  0 12:45 pts/2    00:00:00 grep db2
root     14366     1  0 Mar19 ?        00:00:25 /opt/ibm/db2/V9.1/bin/db2fmcd
			

그런 다음, Listing 7과 같이 사용자를 SAMPLE 데이터베이스에 연결한다.


Listing 7. SAMPLE 데이터베이스에 사용자 연결
		    
[db2ins95@Server ~]$ db2  "connect to sample"

   Database Connection Information

 Database server        = DB2/LINUX 9.1.5
 SQL authorization ID   = DB2INS95
 Local database alias   = SAMPLE


[db2ins95@Server ~]$ db2 list tables

Table/View                      Schema          Type  Creation time
------------------------------- --------------- ----- --------------------------
ACT                             DB2INS95        T     2010-03-22-12.37.09.890866
ADEFUSR                         DB2INS95        S     2010-03-22-12.37.13.858864
CL_SCHED                        DB2INS95        T     2010-03-22-12.37.09.641766
DEPARTMENT                      DB2INS95        T     2010-03-22-12.37.09.654181
DEPT                            DB2INS95        A     2010-03-22-12.37.09.716163
EMP                             DB2INS95        A     2010-03-22-12.37.09.749817
EMPACT                          DB2INS95        A     2010-03-22-12.37.09.887997
EMPLOYEE                        DB2INS95        T     2010-03-22-12.37.09.717494
EMPMDC                          DB2INS95        T     2010-03-22-12.37.15.079208
EMPPROJACT                      DB2INS95        T     2010-03-22-12.37.09.876485

Listing 8에서는 db2sysc 프로세스를 대상으로 kill -9를 실행하면 DB2 인스턴스가 파손된다는 점을 확인할 수 있다.


Listing 8. db2sysc를 대상으로 kill -9를 실행하면 인스턴스가 파손됨
	
[db2ins95@Server ~]$ kill -9 8588
[db2ins95@Server ~]$ db2 list tables
SQL1224N  The database manager is not able to accept new requests, has
terminated all requests in progress, or has terminated your particular request
due to a problem with your request.  SQLSTATE=55032

[db2ins95@Server ~]$ db2 connect to SAMPLE
SQL1032N  No start database manager command was issued.  SQLSTATE=57019
			

Listing 9는 DB2 인스턴스가 파손된 후 db2diag.log에 로그되는 결과 항목에 대한 예이다. 이러한 항목을 통해 사용자나 애플리케이션에서 SIGKILL 신호를 실행하면 인스턴스가 파손된다는 사실을 알 수 있다.


Listing 9. 샘플 db2diag.log 항목
			
2010-03-22-12.49.14.993973-300 I39299G722         LEVEL: Error
PID     : 8587                 TID  : 3086112448  PROC : db2wdog 0 0
INSTANCE: db2ins95             NODE : 000
FUNCTION: DB2 UDB, oper system services, sqlossig, probe:10
MESSAGE : Sending SIGKILL to the following process id
DATA #1 : signed integer, 4 bytes
-8588
CALLSTCK:
  [0] 0x0276568D sqlossig + 0x117
  [1] 0x0132313A sqloWatchDogMain + 0x20E
  [2] 0x0132192A sqloRunInstance + 0xCE
  [3] 0x0804D450 DB2main + 0x6DC
  [4] 0x0804CD6C main + 0x24
  [5] 0x04938DF3 __libc_start_main + 0xD3
  [6] 0x0804CCB1 _Z21sqlePdbProcessRequestP11sqkfChannelPv + 0x1C1
  [7] 0x00000000 ?unknown + 0x0
  [8] 0x00000000 ?unknown + 0x0
  [9] 0x00000000 ?unknown + 0x0

TAMOS 활용

이제 TAMOS를 이용하여 상기와 같은 시나리오를 방지할 수 있는 방법을 확인할 차례이다.

먼저, Listing 10과 같이 TAMOS 오브젝트 공간에서 db2sysc 프로세스의 오브젝트를 파일 자원으로 작성한다.


Listing 10. 오브젝트 작성
pdadmin sec_master> object create /OSSEAL/Server.in.ibm.com/File/home/db2ins95\
	/sqllib/adm/db2sysc "Db2 process" 3 ispolicyattachable yes			 

그런 다음, Listing 11과 같이 DB2 인스턴스 사용자 db2ins95와 루트 사용자에게 프로세스를 종료시키는 권한을 부여하지 않는 정책을 작성한다.


Listing 11. 정책 작성
pdadmin sec_master> acl create db2-acl
pdadmin sec_master> acl modify db2-acl set user root T[OSSEAL]
pdadmin sec_master> acl modify db2-acl set user db2ins95 T[OSSEAL]

그러면 DB2 인스턴스 사용자 db2ins95와 루트 사용자에게 종료 권한 비트 "k"를 부여하지 않도록 ACL이 정의된다. 마지막 단계에서는 Listing 12에 표시된 바와 같이 오브젝트를 대상으로 정책을 시행한다.


Listing 12. 오브젝트를 대상으로 정책 시행
pdadmin sec_master> acl attach /OSSEAL/Server.in.ibm.com/File/home/db2ins95\
   /sqllib/adm/db2sysc db2-acl

다시 ps 명령을 실행하여 실행 중인 DB2 프로세스를 표시한다. Listing 13과 Listing 6에 있는 샘플 출력을 서로 비교한다.


Listing 13. DB2 인스턴스 프로세스 표시
[db2ins95@Server root]$ ps -ef | grep db2
root     14366     1  0 Mar19 ?        00:00:29 /opt/ibm/db2/V9.1/bin/db2fmcd
root     28330 28278  0 23:42 pts/1    00:00:00 su db2ins95
db2ins95 28331 28330  0 23:42 pts/1    00:00:00 bash
root     28426     1  0 23:42 pts/1    00:00:00 db2wdog 0
db2ins95 28427 28426  0 23:42 pts/1    00:00:00 db2sysc 0
root     28428 28427  0 23:42 pts/1    00:00:00 db2ckpwd 0
root     28429 28427  0 23:42 pts/1    00:00:00 db2ckpwd 0
root     28430 28427  0 23:42 pts/1    00:00:00 db2ckpwd 0
root     28431 28427  0 23:42 pts/1    00:00:00 db2pmd 0
db2ins95 28432 28427  0 23:42 pts/1    00:00:00 db2gds 0
db2ins95 28433 28427  0 23:42 pts/1    00:00:00 db2licc 0
db2ins95 28434 28427  0 23:42 pts/1    00:00:00 db2ipccm 0
db2ins95 28435 28427  0 23:42 pts/1    00:00:00 db2resync 0
db2ins95 28437 28427  0 23:42 pts/1    00:00:00 db2acd 0 ,0,0,0,1,0,0,0,897d44
 ,14,1e014,2,0,1,11fd0,0x11f90000,0x11f90000,1610000,130003,2,590009
db2ins95 28629 28434  0 23:47 pts/1    00:00:00 db2agent (idle) 0
db2ins95 28951 28331  0 23:52 pts/1    00:00:00 ps -ef
db2ins95 28952 28331  0 23:52 pts/1    00:00:00 grep db2
			 

이제 Listing 14에 표시된 바와 같이 db2ins95나 루트 사용자가 db2sysc 프로세스를 종료하려고 해도 TAMOS를 사용하여 적절한 제어와 정책을 적용했기 때문에 db2sysc 프로세스를 종료할 수 없다.


Listing 14. kill -9는 허용되지 않음
[db2ins95@Server root]$ kill -9 28427
bash: kill: (28427) - Operation not permitted

또한, TAMOS를 이용하여 실제로 kill 명령을 실행하는 사용자를 추적하여 실제로 문제를 일으킨 사용자를 확인할 수 있다. 이러한 추적 기능은 이 기사의 후반부에서 다룬다.

사례 2

또한, DB2 지원과 관련하여 몇 가지 문제점이 보고되었으며 여기서는 고객이 운영 체제 유지보수 활동을 수행하는 과정에서 테이블스페이스 컨테이너를 우연히 삭제했다. 어떤 경우에는 이로 인해 상당 수의 데이터가 손상을 입게 된다. 또한, 이러한 시나리오로 인해 테이블스페이스를 액세스할 수 없게 되기도 한다. 이 섹션에 기술된 예제를 통해 이러한 시나리오를 확인할 수 있다.

사례 1에서와 마찬가지로 이 예제에서도 db2ins95라는 DB2 인스턴스가 있다고 가정한다. 이 시나리오를 시작하기 위해 Listing 15에 표시된 바와 같이 사용자를 SAMPLE 데이터베이스에 연결한다.


Listing 15. SAMPLE 데이터베이스에 사용자 연결
[db2ins95@Server root]$ db2  "connect to sample"

   Database Connection Information

Listing 16과 같이 하나의 컨테이너(cont1)가 있는 테이블스페이스를 작성한다.


Listing 16. 테이블스페이스 작성
[db2ins95@Server root]$  db2 "create tablespace tbsp1 managed by database \
	using (file '/test/cont1' 1000)"
DB20000I  The SQL command completed successfully.

Listing 17과 같이 cont1 테이블스페이스에 table1이라는 테이블을 작성한다.


Listing 17. 테이블 작성
[db2ins95@Server root]$ db2 "create table table1(id int, name varchar(10)) in tbsp1"
DB20000I  The SQL command completed successfully.

그런 다음, Listing 18과 같이 테이블에 샘플 데이터를 일부 삽입한다.


Listing 18. 샘플 데이터 삽입
db2ins95@Server root]$ db2 "insert into table1 values(1,'a'),(2,'b'),(3,'c')"
DB20000I  The SQL command completed successfully.
[db2ins95@Server root]$ db2 "select * from table1"

ID          NAME
----------- ----------
          1 a
          2 b
          3 c

  3 record(s) selected.    [db2ins95@Server test]$ db2 connect reset
DB20000I  The SQL command completed successfully.

테이블스페이스를 우연히 삭제하는 경우에 어떤 현상이 발생하는지 시험하기 위해 Listing 19와 같이 rm 명령을 실행한다.


Listing 19. 테이블스페이스 컨테이너 삭제
[root@Server ~]# rm -rf /test/cont1

그러면 Listing 20에 표시된 바와 같이 사용자가 데이터베이스에 다시 연결하여 테이블에 액세스하려고 하면 오류가 발생한다.


Listing 20. 오류를 리턴하는 액세스 시도
[db2ins95@Server test]$ db2 connect to sample

   Database Connection Information

 Database server        = DB2/LINUX 9.1.5
 SQL authorization ID   = DB2INS95
 Local database alias   = SAMPLE

[db2ins95@Server test]$ db2 "select * from table1"

ID          NAME
----------- ----------
SQL0290N  Table space access is not allowed.  SQLSTATE=55039

테이블스페이스 컨테이너가 삭제되어 테이블에 삽입한 모든 데이터가 손실되었기 때문에 테이블스페이스를 액세스할 수 없게 된다.

TAMOS 활용

그러면 이제, TAMOS를 이용하여 위에서 살펴본 것과 같은 상황에서 사용자가 테이블스페이스 컨테이너를 제거할 수 없도록 하여 잠재적인 데이터 손실로부터 시스템을 보호하는 방법을 살펴보도록 하자.

이 예제에는 단순히 운영 체제에 있는 파일 자원인 컨테이너가 /test 디렉토리에 있다. Listing 21에 표시된 바와 같이 이 파일 자원 아래에 /test/cont1을 위한 오브젝트를 작성한다.


Listing 21. 오브젝트 작성
pdadmin sec_master> object create /OSSEAL/Server.in.ibm.com/File/test/cont1 \
                    "Containers" 2 ispolicyattachable yes		 

그런 다음, Listing 22와 같이 이 오브젝트를 제거할 수 있는 사용자를 차단하는 정책을 작성한다.


Listing 22. 정책 작성
pdadmin sec_master> acl create cont-acl
pdadmin sec_master> acl modify cont-acl set user root T[OSSEAL]rwx
pdadmin sec_master> acl show cont-acl
    ACL Name: cont-acl
    Description:
    Entries:
        User sec_master TcmdbsvaBRl
        User root T[OSSEAL]rwx
        		 

그러면, 루트 사용자에게 읽기, 쓰기 및 실행 권한이 주어지도록 ACL이 정의되지만 삭제 권한 비트 "d"는 부여되지 않는다. 마지막 단계에서는 Listing 23와 같이 오브젝트를 대상으로 정책을 시행한다.


Listing 23. 오브젝트를 대상으로 정책 시행
pdadmin sec_master> acl attach /OSSEAL/Server.in.ibm.com/File/test/cont1 cont-acl
			

이제, Listing 24에 표시된 바와 같이 루트 사용자가 컨테이너를 제거하려고 해도 컨테이너는 제거되지 않는다. 따라서, 컨테이너 삭제로 인한 우연한 데이터 손실을 TAMOS를 이용하여 방지할 수 있게 된다.


Listing 24. 컨테이너 삭제가 허용되지 않음
[root@Server ~]# rm -rf /test/cont1
rm: cannot remove `/test/cont1': Permission denied
			


감사 및 추적

이 섹션에서는 TAMOS를 사용하여 DB2 프로세스와 자원을 대상으로 수행한 조작을 모니터하거나 추적하는 방법을 설명한다.

예를 들면, 상기 사례 1에서 살펴본 시나리오에서는 db2sysc 프로세스를 대상으로 kill -9를 실행했다. 실제로 이러한 상황이 발생하면 누가 이러한 조치를 수행했는지 알고 싶을 것이다. TAMOS에서 제공하는 정교하고 세밀한 감사 레벨을 이용하면 이와 같은 기능을 수행할 수 있다.

TAMOS에서는 세 가지 레벨의 감사를 이용할 수 있다.

  • 사용자
  • 자원
  • 글로벌

다음 예제에서 자원 레벨의 감사를 확인할 수 있다. 사례 1에서 기술한 바와 같이 Listing 25에 있는 정책이 사용자의 시스템에 적용되었다고 가정한다.


Listing 25. 사례 1의 정책
pdadmin sec_master> object show /OSSEAL/Server.in.ibm.com/File/home/db2ins95\
	/sqllib/adm/db2sysc
Name: /OSSEAL/Server.in.ibm.com/File/home/db2ins95/sqllib/adm/db2sysc
    Description:
    Type: 3 (Executable)
    Is Policy Attachable: Yes
    Extended Attributes:
    Attached ACL: db2-acl
    Attached POP: 
    Attached AuthzRule:

    Effective Extended Attributes:
    Effective ACL: db2-acl
    Effective POP: 
    Effective AuthzRule:

상기 정책에서는 ACL db2-acl을 사용하여 db2sysc가 종료되지 않도록 한다.

이제, Listing 26과 같이 보호된 오브젝트를 대상으로 수행한 모든 조치를 감사하는 스펙을 사용하여 POP을 작성한다. 이렇게 하면 사용자에게 db2sysc 프로세스를 종료할 권한이 있는지 여부와 관계없이 DB2 자원을 대상으로 SIGKILL이 실행되는 경우, TAMOS에서 이를 추적하게 된다.


Listing 26. POP을 작성하여 모든 조치를 감사
pdadmin sec_master> pop create track-user
pdadmin sec_master> pop modify track-user set audit-level all
			 

Listing 27에 표시된 바와 같이 POP을 해당 오브젝트에 적용하여 오브젝트를 대상으로 정책을 시행한다.


Listing 27. 오브젝트를 대상으로 정책 시행
pdadmin sec_master> pop attach /OSSEAL/Server.in.ibm.com/File/home/db2ins95\
	/sqllib/adm/db2sysc track-user

Listing 28과 같이 ps 명령을 실행하여 DB2 프로세스를 표시한다.


Listing 28. DB2 인스턴스 프로세스 표시
[db2ins95@Server root]$ ps -ef | grep db2
root     14366     1  0 Mar19 ?      00:00:33 /opt/ibm/db2/V9.1/bin/db2fmcd
root     19969 18669  0 11:59 pts/2  00:00:00 su db2ins95
db2ins95 19970 19969  0 11:59 pts/2  00:00:00 bash
db2ins95 20051 19970  0 11:59 pts/2  00:00:00 ps -ef
db2ins95 20052 19970  0 11:59 pts/2  00:00:00 grep db2
db2ins95 29476     1  0 00:05 ?      00:00:00 /home/db2ins95/sqllib/bin/db2bp 29389A2077
root     30183     1  0 00:14 ?      00:00:00 db2wdog 0                       
db2ins95 30184 30183  0 00:14 ?      00:00:00 db2sysc 0                       
root     30185 30184  0 00:14 ?      00:00:00 db2ckpwd 0                      
root     30186 30184  0 00:14 ?      00:00:00 db2ckpwd 0                      
root     30187 30184  0 00:14 ?      00:00:00 db2ckpwd 0   
			 

그러면 Listing 29과 같이 사용자가 db2sysc 프로세스를 강제 종료하려고 해도 이 프로세스는 종료되지 않는다.


Listing 29. kill -9는 허용되지 않음
		
[db2ins95@Server root]$ kill -9 30184
bash: kill: (30184) - Operation not permitted
			

Listing 30는 kill -9를 실행하려는 시도가 있은 후, audit.log 파일에 로그된 결과 항목에 대한 예이다. 사용자가 프로세스를 강제 종료할 수 있게 허용되었다고 하더라도 이러한 조치는 무시되지 않고 추적된다. 또한, TAMOS에서 제공하는 pdosaudview 유틸리티를 사용하여 감사 보고서를 확인할 수 있다.


Listing 30. audit.log 스냅샷
	
			*** START OF NEW RECORD ***

Timestamp                                Tue 23 Mar 2010 11:59:25 AM EST
Audit Event                              An authorization decision was made.
Audit View                               Deny
Audit Reason                             Resource Audit
Audit Resource Type                      File
Accessor Name                            root
Accessor Effective Name                  db2ins95
Audit Action                             Check Access
Audit Permissions                        kill
Audit Qualifier                          Checking resource access control policy.
Policy Branch Name                       Server.in.ibm.com
Protected Object Name                    File/home/db2ins95/sqllib/adm/db2sysc
System Resource Name                     /home/db2ins95/sqllib/adm/db2sysc
Accessor Process ID                      19970
Running Program System Resource Name     /bin/bash
Audit Outcome                            Success
Audit Uniqifier                          0

위에 기록된 내용을 통해 시스템 자원 /home/db2ins95/sqllib/adm/db2sysc를 대상으로 kill 명령이 실행되었다는 것을 알 수 있다. 또한, Accessor Effective 필드를 통해 kill을 실행한 사용자가 db2ins95라는 사실을 확인할 수 있다.


결론

이 기사에서는 IBM Tivoli Access Manager for Operating Systems(TAMOS) 솔루션을 살펴보았다. 또한, TAMOS를 설치하고 구성하는 방법에 대한 개요와 UNIX와 Linux 운영 체제에서 TAMOS를 사용하여 DB2 프로세스와 자원을 보호하는 방법을 살펴보았다. TAMOS의 개념을 이해하면 기본 운영 체제에서 제공하는 보안 기능을 기반으로 사용자의 시스템 자원을 더 잘 보호할 수 있게 된다.


참고자료

교육

토론

필자소개

Aditi Prasad photo

Aditi Prasad는 Associate Software Engineer이다. 현재, 인도 푸네에 있는 IBM India Software Lab에서 Tivoli Security Product를 담당한다.

Sinha Nishant photo

Nishant Sinha는 인도 푸네에 있는 IBM India Software Lab의 DB2 고급 기술 지원 분석가로 전세계의 IBM DB2 고객을 지원하는 업무를 담당한다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=Information Management, Tivoli
ArticleID=497515
ArticleTitle=Tivoli Access Manager for Operating Systems를 사용하여 DB2 자원 보호하기
publish-date=04222010
author1-email=aditiprasad@in.ibm.com
author1-email-cc=
author2-email=nishant_sinha@in.ibm.com
author2-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.