모든 데이터베이스 관리 시스템은 승인되지 않은 액세스와 수정이 이루어지지 않도록 데이터를 보호할 수 있어야 한다. 이점은 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 프로세스에 대한 조작을 추적하고 모니터하는 방법
엔터프라이즈 관점에서 보면 UNIX와 Linux 운영 체제는 보안상에 몇 가지 문제점이 있다. TAMOS를 이용하면 UNIX와 Linux 운영 체제의 운영 체제 레벨에서 액세스를 제어하여 이러한 문제점을 처리할 수 있다. TAMOS는 중앙화된 정책 관리 기술을 통해 승인되지 않은 액세스를 차단하고 민감한 데이터와 자원에 대한 액세스를 모니터한다.
TAMOS는 UNIX나 Linux 운영 체제에 적합한 일련의 디먼과 커널 확장 및 제어 파일로 구현된다.
TAMOS 커널 확장은 모든 시스템 호출을 가로챈다.
그 후에는 중앙화된 권한 부여 디먼인 pdosd가 시스템 호출이 요청되는 과정에서 모든 권한 부여 결정에 참여한다.
그림 1에 있는 순서도를 통해 TAMOS가 커널 레벨에서 시스템 호출을 가로채어 보안 계층을 구현하는 방법을 확인할 수 있다.
그림 1.TAMOS 커널 인터셉션을 나타내는 샘플 순서도
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 설치 화면
그림 3. 권장 시스템 설정
설치 과정은 설치 마법사를 통해 진행되며 설치 마법사가 해당 LDAP 서버를 사용하여 TAM Runtime을 설치하고 구성하는 과정을 안내한다.
자동 모드 설치에서는 응답 파일을 사용하여 프로그램을 자동으로 설치한다. 기본 설치에서는 해당 운영 체제에서 제공하는 기본 소프트웨어 설치 유틸리티를 사용한다. 자세한 설치 지시사항은 이 기사 마지막 부분의 참고자료 섹션에 링크되어 있는 "TAMOS Installation Guide"를 참고하기 바란다.
이 섹션에서는 기본 설치를 수행한 후, 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가 적용되어야 한다.
다음 예제를 통해 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를 이용하여 처리하는 방법을 살펴본다.
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를 이용하여 상기와 같은 시나리오를 방지할 수 있는 방법을 확인할 차례이다.
먼저, 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 명령을 실행하는 사용자를 추적하여 실제로 문제를 일으킨 사용자를 확인할 수 있다. 이러한 추적 기능은 이 기사의 후반부에서 다룬다.
또한, 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를 이용하여 위에서 살펴본 것과 같은 상황에서 사용자가 테이블스페이스 컨테이너를 제거할 수 없도록 하여 잠재적인 데이터 손실로부터 시스템을 보호하는 방법을 살펴보도록 하자.
이 예제에는 단순히 운영 체제에 있는 파일 자원인 컨테이너가 /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의 개념을 이해하면 기본 운영 체제에서 제공하는 보안 기능을 기반으로 사용자의 시스템 자원을 더 잘 보호할 수 있게 된다.
교육
- TAMOS Installation Guide"에는 다양한 플랫폼에서 TAMOS 6.0을 설치하고 구성하는 데 필요한 자세한 지시사항이 포함되어 있다.
-
TAMOS Administration Guide"에는 TAMOS를 통해 보호할 수 있는 자원과 정책에 관한 정보가 포함되어 있다.
- DB2 Infocenter에는 DB2와 그 기능을 사용하는 방법이 기술되어 있다.
-
Auditing UNIX/Linux System Use with Tivoli Access Manager for Operating Systems and Tivoli Compliance Insight Manager Redpaper에는
TAMOS를 사용하여 Linux와 UNIX 시스템을 감사하는 것과 관련된 세부사항이 기술되어 있다.
토론
- 포럼에 참여하기.
- developerWorks 포럼 & 블로그를 통해 developerWorks 커뮤니티에 참여하자.

