롤 기반의 접근 제어 (RBAC) 는 솔라리스8 부터 제공되는 기능 입니다. 이제는 솔라리스8, 9, 10 에서도 이용하실 수 있습니다. 간단히 정희하자면 RBAC 은 비 root 권한의 유저가 작업, 혹은 스크립트등을 슈퍼 유저 권한으로 수행할 수 있도록 해주는 보안 툴입니다. 예를 들어 몇몇 서버를 재부팅해야 하는 작업을 부여 받은 대리인이 있다고 가정합시다. RBAC 은 보통 슈퍼 유저 권한이 필요한 이 작업을 대리인이 수행할 수 있도록 권한을 설정하는데에 사용될 수 있습니다. 이 작업은 첫째로 유저를 생성하고 혹은 기존 유저를 사용할 수도 있습니다. 그 다음엔 롤 과 프로파일을 생성하고 프로파일을 롤에 지정합니다. 프로파일이 적절한 롤에 지정된 다음에 롤은 이제 운영체제 사용자에게 지정됩니다. 프로파일은 실행하고자 하는 스크립트나 작업과 연관 될 것입니다.
대부분의 시스템 관리자는 Sudo 와 친숙합니다. Sudo 는 RBAC 의 기능과 비슷합니다. 시스템 관리자로써 필자는 사용자들에게 이런 질문을 받습니다, "Sudo 를 사용할 수 있지 않나요?" 혹은 종종, "Sudo 가 이러한 서버들에 설정되어 있지 않나요?, 그렇지 않다면 앞으로 그렇게 될까요?" Sudo 는 훌륭한 툴입니다, 그러나 여기에는 한가지 문제점이 존재 합니다 -- Sudo 는 썬이 지원하는 소프트웨어 제품이 아닙니다. 만약 여러분이 구현에 어려움을 겪거나 시스템이 정상동작하는데에 방해를 준다면 여러분의 서포트 계약하에서 도움을 받을 수 있는 길은 전혀 없습니다. 네이티브 솔라리스 RBAC 은 여러분이 Sudo 와 비슷한 작업을 원하지 않는 써드파티 소프트웨어를 설치하지 않고서도 수행할 수 있도록 해 줍니다.
이 글의 목적은 어떠한 시스템 관리자도 빠르게 RBAC 을 사용 할 수 있도록 기능의 기본적인 이해와, RBAC 의 내부동작에 관한 쿡북을 제공하는데에 목적이 있습니다. 필자는 여러분이 시작하는데에 도움을 줄 두가지 실제 시나리오를 가지고 설명합니다. 3번째 섹션은 썬에서 제공하는 몇몇 프로파일의 간략한 소개와 어떻게 구현되어 있는지에 대한 설명을 제공 합니다. 필자는 각 파일이 어떤 것인지 자세한 설명을 하지 않고 RBAC 을 생성하고 설정하는 것으로 바로 들어갈 것입니다. 여러분들은 계속 읽어 나감에 따로 천천히 이해할 수 있으리라고 생각합니다. 필자가 마지막에 쓴 참고자료는 매우 훌륭한 정보의 집합이고 대부분 docs.sun.com 에서 찾으실 수 있습니다.
여러분이 롤 과 계정을 생성하는데에 있어서 수정해야할 중요한 6가지 파일들이 존재 합니다. 여러분은 이 파일들에 익숙해 져야 합니다. 왜냐하면 몇몇을 수동으로 수정할 것이기 때문입니다. 다른 대부분의 설정 파일들과 마찬가지로 타이핑 오류는 RBAC 의 일부 혹은 전체의 기능에 오류가 생기도록 할 것입니다. 필자는 롤을 설정할때 항상 이러한 파일들을 자주 확인해 줄 것을 권장드립니다. 여러분은 또한 제공되는 예제에서 /usr/bin/rolemod 와 /usr/bin/usermod 을 자주 쓰는 것을 볼 수 있으실 겁니다. 이 커맨드도 멘 페이지나 썬의 온라인 문서를 통해서 친숙해지기를 권장합니다. 만약 새로운 유저를 만든다면 /usr/bin/useradd 또한 여러분이 친숙해져야할 커맨드 입니다.
이 문서의 예제는 이러한 롤과 계정을 초기에 설정할때 필자가 작성한 문서의 일부 입니다. 실제 롤, 계정, 유저 이름, 스크립트들은 여러분의 환경에 맞게 바뀔 수 있습니다. 이러한 예제들은 솔라리스8, 9, 10 을 운용하는 서버에서 테스트 되었습니다. 각각의 서로 다른 솔라리스 버전은 RBAC 설정 파일의 항목이 서로 상이 합니다. 그러므로 여러분의 서버와 운영체제 버전에따라서 더 많이 혹은 적은 항목을 보실 수 있으실 겁니다.
RBAC 을 여러분의 환경에서 설정하고자 할때 수정해야할 파일들은 다음과 깉습니다. 처음의 4개 파일은 RBAC 데이타베이스 파일로 알려져 있습니다. 파일에 특별한 순서는 없습니다.
1. /etc/security/auth_attr 2. /etc/security/prof_attr 3. /etc/security/exec_attr 4. /etc/user_attr 5. /etc/passwd 6. /etc/shadow
위의 1번 파일에 대한 참고 사항: /etc/security/auth_attr f파일은 예제에서는 사용되지 않습니다. 이것은 필자가 오직 맞춤형 롤(custom role) 만을 다루기 때문입니다. auth_attr 데이타베이스는 일반적으로 특정 프로파일이 롤들에 지정되었을때와 솔라리스 관리 콘솔(SMC) 가 RBAC 을 이용해서 동작하도록 설정되었을때에만 수정 됩니다.
시작하기 전에 어떠한 유저, 롤, 그리고 스크립트가 사용될지에 대해 인식하는 것은 큰 도움이 됩니다. 대부분의 경우 유저는 이미 존재할 것이고 롤과 스크립트는 생성되어야 할 것입니다. 여러분의 고유의 이름들을 아래와 같이 정리 합니다:
User: _________________________ Rolename: _________________________ Location of Script: _________________________ Profile Name: _________________________
시나리오 첫번째
로컬 IT 환경에서 우리는 솔라리스를 운용하고 있는 여러대의 서버 상의 어플리케이션을 관리하는 유저를 자깁니다. 대부분의 경우 이러한 어플리케이션 프로세스들은 한주에 수번 정도 시작되고 종료됩니다. 왜냐하면 이러한 프로세스들은 일반적으로 root 에 의해 시작되고 소유되기 때문에, 이들은 root 혹은 슈퍼유저 권한을 가진 사용자에 의해 정지 되어야만 합니다. 종종 시스템 관리자는 몇시간에서 몇일 까지 작업을 수행 하지 못할 수도 있기 때문에 사용자의 생산성이 떨어지게 됩니다.
우리의 유저에 적합한 좀 더 낳은 솔루션을 생각해 봤을때, RBAC 이 가장 적합합니다. 절대적으로 이 방법은 유저가 좀 더 효율 적으로 일 할 수 있도록 도와주고 유저와 시스템 관리자가 개입된 워크로드를 좀 더 쉽게 수행할 수 있도록 합니다. 이 예제에서 어플리케이션의 이름은 Harvest 입니다. Harvest 는 테스트 환경에서 개발 환경 혹은 프로덕션 환경으로 데이타와 소프트웨어를 이동시켜 주는 상용 소프트웨어입니다. 유저는 다음의 유저로 어플리케이션을 관리 합니다: harvest. 필자는 다음과 같은 작업을 수행할 것입니다:
- 롤 계정 생성하기.
- 롤 계정 패스워드 설정하기.
/etc/security/prof_attr파일을 수정하고 프로파일의 설명과 프로파일 생성하기./etc/security/exec_attr을 수정해서 프로파일이 무슨 작업을 할지 정의하기./usr/bin/rolemod을 사용해서 새로운 프로파일을 새로운 롤 계정에 연관시키기.- 사용자에게 롤 ㅜㅊ가하기.
이제 시작해 봅시다.
예제:
솔라리스 롤 기반 접근 제어 (RBAC) 를 이용하여 일반적은 비 root 권한의 유저가 Harvest Agent 를 시작하고 정지할 수 있도록 해 봅시다.
Rolename: harvasst Username: harvest Profile Name: Harvest
1. 여러분의 환경을 위해 정의된 이름을 사용하여 롤을 생성 합니다:
# roleadd -u 2000 -g 10 -d /export/home/harvasst -m harvasst
롤 계정에 패스워드를 지정합니다.
# passwd harvasst
2. 프로파일을 생성하여 유저가 Harvest agent 를 시작및 정지 할 수 있도록 합니다.
/etc/security/prof_attr 파일을 수정하고 아래의 라인을 삽입합니다:
Harvest:::Permit stop and start of Harvest agent:
파일을 저장하고 종료 합니다.
3. 다음 단계는 /etc/security/exec_attr 파일에 실행 속성 항목을 생성하는 것입니다. 이 것은 태스크 혹은 스크립트를 실행할때 지정된 uid 를 가진 사용자가 실행 할 수 있는 권한을 지정합니다. 줄의 처음에는 프로파일을 지정해야 함을 주의하시기 바랍니다.
주의: 파일에는 7개의 항목이 존재 하고 각각은 콜론에 의해 구분되어 있습니다; 이번에는 오직 첫번째, 두번째, 세번째, 여섯번째, 일곱번째 항목 만이 사용됩니다.
/etc/security/prof_attr 파일을 수정해서 다음의 라인을 삽입합니다:
Harvest:suser:cmd:::/etc/init.d/harvestagent:uid=0
4. rolemod 커맨드를 이용해서Harvest 를 추가하고 모든 [1] 프로파일을 롤에 다음과 같이 지정합니다:
# rolemod -P Harvest,All harvasst
5. rolemod 커맨드는 /etc/user_attr 파일을 수정합니다. 수정이 제대로 되었음을 확인합니다.
# more /etc/user_attr harvasst::::type=role;profiles=Harvest,All harvest::::type=normal;roles=harvasst
여기서 여러분은 간단히 harvasst 롤이 harvest 유저 계정에 지정되었음을 확인하실 수 있습니다. 이제 Harvest 프로파일은 harvasst 롤에 지정되었습니다.
6. usermod 커맨드를 이용해서 롤 계정을 harvest 유저에 지정합니다.
# usermod -R harvasst <username>
주의: 위에서 서로 다른 의미를 지닌 Harvest 를 어떻게 롤과 프로파일을 생성할때 사용하였는지를 조심해서 생각해 보시기 바랍니다. 이러한 이름들은 대소문자가 구분됩니다. 그러므로 트러블 슈팅시에 참고하시기 바랍니다.
축하합니다! 여러분의 첫번째 롤을 RBAC 을 이용하여 생성하였습니다. 여러분이 방금 수정한 파일들을 살펴 보고 유저에게 이것을 넘기기 전에 몇몇 테스트를 수행해 봅시다.
이제 여러분은 사용자에게 이 새로운 롤을 어떻게 사용하는지에 대해 알려주어야 합니다.
유저를 위한 사용법:
적절한 계정으로 로그인 해야 합니다 (우리의 경우는 harvest).
아래와 같이 Harvest agent 롤로 유저 변경 합니다:
$ su - harvasst Password: <enter password>
인증이 완료 되면 다음과 같이 agent 를 시작시킵니다:
$ /etc/init.d/harvestagent start
agent 를 정지하기 위해서:
$ /etc/init.d/harvestagent stop
프로세스의 상태는 다음과 같이 확인합니다:
$ ps -ef | grep harvest
롤에서 빠져 나와서 본래 유저로 돌아가기 위해 exit 을 입력합니다.
이 예제는 유저가 슈퍼유저의 작업을 실행할 수 있도록 하는 롤을 RBAC 을 이용하여 생성하는 방법을 보여준 예제 입니다.
시나리오 두번째
RBAC 의 다음 예제에서 필자는 Oracle 유저가 일반적으로 root 가 소유하고 있는 몇몇 웹 서버 로그 파일들을 롤 오버 하는 스크립트를 수행할 수 있도록 설정하려고 합니다. 이 스크립트는 rollover_logs.sh 라고 하고 디스크 드라이브의 공간을 정리하기 위해 웹서버가 정지되고 다시 시작되는 주말 관리작업시에 일반적으로 DBA 에 의해서 사용 됩니다. 준비작업으로 필자는 스크립트를 테스트 했고, oracle:dba 소유 권한을 지웠고 root 로 대체 했습니다. 소유 권한을 바꿈으로써 스크립트가 수정될 수 없도록 하였습니다. 이 작업은 종종 예상치 못한 때에 수행되기도 하기 때문에 DBA 는 휴가중에도 이 것을 실행할 수 있는 접근 권한을 가져아 합니다. 이 스크립트에 대한 자세한 내용은 이후에 제공합니다.
이 예제는 완전히 다른 롤 이름과 유저 계정 그리고 서로 다른 디렉토리에 위치한 각각의 스크립트에 대한 특수한 프로파일을 생성한다는 것 외에 이전의 과정과 매우 유사 합니다. 필자는 orassist 를 롤 이름으로 사용했고 이 롤을 Oracle 유저 계정에 지정하였습니다. Oracle_Assistant 가 프로파일의 이름이고 Oracle 유저에 의해 어떠한 스크립트가 실행될지를 지정 합니다. 만약 다른 스크립트가 있었고 다른 디렉토리에 존재 했었다면, 필자는 Oracle_Assistant 를 이용하여 다른 프로파일을 만들었을 것이고 /etc/security/exec_attr 파일에 새로운 스크립트의 위치를 추가해 주었을 것입니다. 복수개의 작업 혹은 스크립트를 동일한 프로파일 이름 하에 지정하는 것은 일반적인 방법입니다. 단지 exec_attr 일 내에서 서로 다른 줄로만 구분되면 됨을 기억하시 바랍니다.
Rolename: orassist Username: oracle Profile Name: Oracle_Assistant
1. 롤 이름을 취향에 맞게 선택하고, roleadd 를 이용해서 롤을 생성합니다:
# roleadd -u 2100 -g 10 -d /export/home/orassist -m orassist
롤 계정에 패스워드를 지정합니다.
# passwd orassist
2. 프로파일을 생성해서 oracle 유저가 지정된 장소의 스크립트들을 실행할 수 있도록 합니다.
/etc/security/prof_attr 파일을 수정하고 아래의 줄을 삽입합니다:
Oracle_Assistant:::Permit Oracle user to run Oracle scripts:
파일을 저장하고 종료 합니다.
3. 다음 단계는 /etc/security/exec_attr 파일에 실행 속성 항목을 생성하는 것입니다. 이 것은 태스크 혹은 스크립트를 실행할때 지정된 uid 를 가진 사용자가 실행 할 수 있는 권한을 지정합니다. 줄의 처음에는 프로파일을 지정해야 함을 주의하시기 바랍니다.
주의: 파일에는 7개의 항목이 존재 하고 각각은 콜론에 의해 구분되어 있습니다; 이번에는 오직 첫번째, 두번째, 세번째, 여섯번째, 일곱번째 항목 만이 사용됩니다.
아래와 같이 실행 속성 항목을 /etc/security/exec_attr 에 추가 시켜 줍니다:
Oracle_Assistant:suser:cmd:::<location of script>:uid=0
4. Oracle_Assistant 를 추가하고 모든 [1] 프로파일들을 롤에 추가 시켜 줍니다:
# rolemod -P Oracle_Assistant,All orassist
5. rolemod 커맨드를 이용하여 /etc/user_attr 파일을 수정 합니다. 수정이 제대로 이루어 졌는지 확인해 봅니다.
# more /etc/user_attr oracle::::type=normal;roles=orassist orassist::::type=role;profiles=Oracle_Assistant,All
여기서 여러분은 orassist 롤이 oracle 유저 계정에 지정되었음을 확인하실 수 있습니다. Oracle_Assistant 프로파일은 이제 orassist 롤과 연관되어 졌습니다.
6. usermod 커맨드를 이용하여 롤 계정을 oracle 유저에 지정합니다:
# usermod -R orassist <user_name> <-- insert oracle here.
스크립트를 root 가 소유하고 있고 몇번의 테스트를 거쳤기 때문에 안심하고 이것을 다른 유저에게 알려 줄 수 있습니다. 필자는 지속적으로 RBAC 을 이용하여 슈퍼유저 권한이 필요한 이들에게 도움을 줄 것입니다. 롤과 스크립트를 실행하는데 필요한 접근 권한을 얻는 방법에 대해 설명하였습니다.
유저를 위한 사용법:
적절한 계정으로 로그인 해야 합니다 (여기서는 oracle). 아래와 같이Oracle Assistant 롤로 유저 변경 합니다:
$ su - orassist Password: <enter password>
인증이 완료 되면 다음과 같이 스크립트를 시작시킵니다:
$ /<location of script>/rollover_logs.sh
롤에서 빠져 나와서 본래 유저로 돌아가기 위해 exit 을 입력합니다.
롤 비활성화 하기
롤은 사용자 계정과 유사 합니다. 인증을 위해서는 패스워드가 필요 합니다. 롤 기능은 간단히 롤 계정을 비활성화 하거나 잠금으로써 비활성화 시킬 수 있습니다. 한가지 방법은 /etc/shadow 파일의 암호화된 패스워드 필드에 "LK" 를 삽입하는 것입니다.
예제:
orassist:LK:12937:7:56:7:::
스크립트 예제 (시나리오 두번째에서 사용됨)
#!/bin/ksh
# set today's date extension
cleandate=`date '+%c%m%d' | awk '{ print $5 }'`
echo $cleandate
#
# Roll over logs: save copy with current date
# create new ( empty ) file
#
#
# rename Apache logs must be done by root
#
cd <APACHE_HOME>/Apache/Apache/logs
cp access_log access_log.$cleandate
echo > access_log
cp error_log error_log.$cleandate
echo > error_log
cp ssl_request_log ssl_request_log.$cleandate
echo > ssl_request_log
솔라리스에서의 프로파일
다음이자 마지막 섹션에서는 솔라리스에서 기본적으로 제공되는 몇가지 RBAC 프로파일들에 대해 설명합니다. 여러분은 손쉽게 새로운 롤을 생성할 수 있고 이러한 롤을 기존의 프로파일에 추가하여서 여러분의 유저들, 초급 관리자들 혹은 백업 관리자들을 위한 특수한 조합을 생성하실 수 있습니다.
여러분의 위의 예제를 따라 해보셨기 때문에 아마 /etc/prof_attr 의 긴 목록을 이미 보셨을 것입니다. 이러한 프로파일들은 시스템 관리를 위해 만들어 졌습니다. prof_attr 과 exec_attr files 을 비교해 보면 어떠한 프로파일이 어떠한 작업을 위해 만들어 졌는지 쉽게 아실 수 있으실 겁니다. 대부분의 IT 데이타 센터는 다양한 컴퓨터 룸 오퍼레이터를 두고 다양한 서버와 메인프레임에서 벌어지는 작업들을 모니터링 합니다. 이러한 사람들은 종종 데이타 백업 과정에 관여 합니다. 이러한 경우가 새로운 롤을 만들어서 그들이 백업과 테잎 관련 커맨드를 수행할 수 있도록 롤을 생성하는데에 있어서 적합한 경우 입니다. 예를 들어 시스템 관리자는 bkadmin 이라고 불리는 새로운 롤을 만들어서 이것을 Media Backup 프로파일에 추가해서 (아래의 예처럼) bkadmin 이 tar 파일에 대한 접근이나 테잎의 마운트 언마운트 권한을 가지도록 할 수 있습니다.
$ more /etc/security/exec_attr | grep Backup Media Backup:suser:cmd:::/usr/bin/mt:euid=0 Media Backup:suser:cmd:::/usr/sbin/tar:euid=0 Media Backup:suser:cmd:::/usr/lib/ufs/ufsdump:euid=0;gid=sys
유용한 또 다른 프로파일은 바로 Printer Management 프로파일 입니다. 이 프로파일은 사용자가 프린터와 프린터 디바이스들을 관리하는데에 있어서 아용되는 프린터 관련 커맨드들의 다양한 그룹을 접근할 수 있도록 합니다. 롤을 생성하고 이 프로파일 그룹을 유저에게 지정함으로써 시스템 관리자의 워크로드를 덜어 줄 수 있습니다.
$ more /etc/security/exec_attr | grep Printer Printer Management:suser:cmd:::/etc/init.d/lp:euid=0;uid=0 Printer Management:suser:cmd:::/usr/bin/cancel:euid=lp;uid=lp Printer Management:suser:cmd:::/usr/bin/lpset:egid=14 Printer Management:suser:cmd:::/usr/sbin/accept:euid=lp;uid=lp Printer Management:suser:cmd:::/usr/lib/lp/local/accept:uid=lp Printer Management:suser:cmd:::/usr/sbin/lpadmin:egid=14;uid=lp;gid=8 Printer Management:suser:cmd:::/usr/lib/lp/local/lpadmin:uid=lp;gid=8 Printer Management:suser:cmd:::/usr/sbin/lpfilter:euid=lp;uid=lp Printer Management:suser:cmd:::/usr/sbin/lpforms:euid=lp Printer Management:suser:cmd:::/usr/sbin/lpmove:euid=lp Printer Management:suser:cmd:::/usr/sbin/lpshut:euid=lp Printer Management:suser:cmd:::/usr/sbin/lpusers:euid=lp Printer Management:suser:cmd:::/usr/bin/lpstat:euid=0 Printer Management:suser:cmd:::/usr/lib/lp/lpsched:uid=0 Printer Management:suser:cmd:::/usr/ucb/lpq:euid=0 Printer Management:suser:cmd:::/usr/ucb/lprm:euid=0
유닉스의 대부분의 작업이나 스크립트들 처럼 어떤 작업을 수행하는데에는 항상 여러개의 방법이 존재 합니다. 이것은 롤과 프로파일을 생성하는데에 있어서도 마찬 가지 입니다. 만약 여러분이 솔라리스 관리 콘솔(SMC) 과 친숙하고 사용하고 있다면 여러분은 GUI 툴을 이용해서 사용자와 롤을 수정 및 생성하실 수 있습니다. 여러분의 롤을 관리하는데에 활용될 수 있는 또 다른 여러가지 롤 관리 커맨드들도 존재 합니다. 온라인에서 볼 수 있는 썬의 문서는 이러한 방법을 활용하는데에 필요한 모든 추가 정보들을 제공하고 있습니다.
[1] All (All Rights) 프로파일에 대한 설명. All 프로파일은 현재 다른 롤에 지정되어 있지 않은 모든 커맨드에 대한 접근 권한을 제공합니다. 롤 생성시에 필자는 All 프로파일을 넣지 않을 수 있었습니다. 이렇게 함으로써 지정된 롤만을 수행할 수 있도록 할 수 있습니다. 유저에게 다양한 유연성을 제공하기 위해 필자는 항상 all 프로파일을 사용해왔습니다. 여러분의 롤과 프로파일을 디자인할때에는 조심하시기 바랍니다.
참고자료
솔라리스 5.8, 5.9 멘 페이지: useradd, usermod, rolemod
저자에 관하여
Kristopher March 는 솔라리스와 HP-UX 운영체제에서 인증된 시스템 관리자 이고, EDS 에서 유닉스 시스템 관리자로 Virginia Richmond 에 있는 군수 보급품 센터에서 일하고 있습니다. Kristopher 는 다수의 대용량 유닉스 서버를 지원하고 있고 다양한 프로젝트에 관여되어 있습니다. 그는 DSCR 의 재해 복구 계획 및 디자인 작업에 참여하고 있고 엔터프라이즈 스토리지 기술에 관심을 가지고 있습니다.
이 글의 영문 원본은
Custom Roles Using RBAC in the Solaris OS
에서 보실 수 있습니다.
"관리자코너" 카테고리의 다른 글
- 썬 버추얼 데스크탑 커넥터 1.0(베타)을 사용한 VDI 데모 구축 (댓글 0개 / 트랙백 0개) 2008/01/23
- 솔라리스 부트 매니저를 이용한 부트 디스크 미러링 방법 (댓글 1개 / 트랙백 0개) 2005/09/23
- 솔라리스 10 5/08 릴리스의 새로운 기능 (댓글 0개 / 트랙백 0개) 2008/06/11
- Solaris 10의 컨테이너를 이용하여 보안을 향상시키는 방법 - Part 1 of 2 (댓글 1개 / 트랙백 0개) 2005/10/23
- 설정 파일 관리 베스트 프랙티스 (댓글 0개 / 트랙백 0개) 2008/05/19
- The Zone Manager 스크립트 (댓글 1개 / 트랙백 0개) 2005/11/23
- 스크립트를 이용한 자동화된 시스템 체크 (댓글 0개 / 트랙백 0개) 2008/06/16
- 플래시 어카이브로 부터 솔라리스10 Branded 존 설치하기 (댓글 0개 / 트랙백 0개) 2008/08/19
- xVM DomU 지원을 솔라리스 라이브CD 배포판에 추가하기 (댓글 0개 / 트랙백 0개) 2008/12/05
- 솔라리스 레디 애플리케이션 및 솔루션 (댓글 0개 / 트랙백 0개) 2008/03/13
댓글을 달아 주세요