2010년 5월 29일 토요일

태산불사토양 하해불택세류(泰山不辭土壤 河海不擇細流) [사기, 이사열전]


泰山不辭土壤 河海不擇細流 


태산(太山: 泰山)은 한 줌의 흙도 양보하지 않아 저렇게 커졌으며 하해(河海)는 한 줄기 세류(細流)도 가리지 않아 저렇게 깊어졌습니다. 왕자(王者)는 어떤 백성도 물리치지 않기 때문에 덕을 천하에 밝힐 수 있는 것입니다.

사기 '이사열전'

 

 

(사견) 위 글은 이사의 출세를 탐탁치 않게 생각하고 있던 진의 대신들과 왕족들의 타국인 추방론을 반박하기 위한 글에 포함된 문장이다. 문장 자체만 보면 더할 나위 없이 좋은 문장이라고 생각한다. 하지만 이사는 6경(六經)이 가르치는 그 근본을 알면서도 주군의 결점을 보완하는 공명정대한 정치를 하지 않았고 높은 지위에 있으면서도 2세황제에게 아첨하는 글을 올리는 따위의 비굴한 모습을 그의 말년에 보이게 되었다. '인간 최대의 치욕은 비천한 것이며 최대의 비통은 곤궁한 것'이라며 부귀와 영리를 좆으며 진황제를 위해 유세하는 그의 초창기 모습을 보면 마지막에 오형(五刑; 먹물 들이고 코 베고 다리 자르고 귀 베고 혀 자르는 형벌)을 갖추어 받고 시장 바닥에서 허리를 잘려 죽는 그의 최후는 어찌보면 예견할 수 있는 일이 아닌가 한다. 위 문장 또한 그가 마지막 판단을 달리했다면 부귀 영리만을 좆은 이의 문장이 아닌 천하 일통에 중추적인 역할을 한 명승상의 문장으로 기억될 수 있을 것이라 생각한다.

2010년 5월 26일 수요일

Sysinternals Suite를 간편하게... - Windows System Control Center

 윈도우 파워유저들에게 Sysinternals Suite는 윈도우 시스템에 문제가 생겼을 때 장애 원인을 찾을 때 아주 유용한 툴일 것이다. 하지만 50여가지가 넘는 툴들을 사용하기에는 불편하다. 몇몇 툴들은 커맨드 기반의 툴들이기 때문에 실행할 때마다 도스창을 띄워야한다. 일부 필요한 툴들만 설치하여 사용한다면 큰 문제는 없지만 혹시 모를 일을 대비하여 전부 설치하여 사용하려는 이들에게 편리한 인터페이스에 대한 희망은 일종의 사치인걸까? ㅋ

Sysinternals Suite를 간편하게 사용할 수 있도록 도와주는 툴이 있어 소개해보도록 한다. Sysinternals Suite뿐 아니라 Nirsoft Utilities도 간편하게 사용할 수 있는 인터페이스를 제공하며 업데이트도 간편하게 할 수 있다.

Windows System Control Center라는 툴은 위 Sysinternals Suite와 Nirsoft Utilities를 단일 인터페이스에서 사용할 수 있도록 하는 툴이다. 프로그램은 이곳에서 다운 받아 설치한다. 설치버전과 포터블 버전이 제공되므로 원하는 버전을 받아 설치하자.

설치후 가장 먼저 할 일은 Sysinternals Suite와 Nirsoft Utilities를 받아오는 것이다. 메인 화면의 오른쪽 상단의 Updates 클릭하자.


창이 뜨고 프로그램이 설치된 버전과 최신 버전을 점검할 것이다. 설치되어 있는 툴이 없기 때문에 Current Version 컬럼에는 버전 정보가 나타나지 않을 것이다. 점검이 완료되면 하단의 Install 버튼을 클릭하여 설치하도록 하자.


메인 화면은 아래와 같이 좌측에는 트리구조가 우측에는 툴 리스트가 간단한 도움말과 함께 나타날 것이다. 섹션별로 툴이 정리되어 있으니 필요한 툴을 찾아 실행할 수 있다.


참고 자료







2010년 5월 25일 화요일

Fedora 13 Release. Rock it!

원래 일정에서 일주일 지연되어 오늘 릴리즈되었네요. 지금 다운받고 있습니다. Fedora 13 Alpha 릴리즈
에서 개선 사항을 살펴보았으므로 자세한 설명은 패스....

2010년 5월 16일 일요일

nohup을 대체하는 간단한 팁 - screen

nohup은 로그아웃을 하더라도 프로세스가 계속 실행될 수 있도록 하는 툴이다. 밤새 프로세스를 돌리거나 시간이 오래 걸리는 작업을 할 때 유용하게 사용된다. 하지만 다시 로그인 하여 프로세스를 foreground로 가져올 수 있는 방법이 없어 사용자 응답을 기다리는 프로세스의 경우 응답을 줄 수 있는 방법이 없다는 단점이 있다. 이 때 nohup이 아닌 screen을 사용하여 이를 극복하는 방법을 알아보도록 하자.

screen은 screen manager with VT100/ANSI terminal emulation로서 가상 터미널이라고 지칭할 수 있다. screen을 사용하기 위해 패키지를 설치하도록 하자.

 #apt-get install screen

 
설치가 완료되면 터미널 상에서 아래와 같이 screen을 실행하도록 하자.

 $screen -S screen_name

 위 명령은 screen_name이라는 이름으로 가상 터미널을 생성한다. 에러 없이 실행되면 clear 명령을 실행한 것과 같이 기존 화면의 메시지가 다 사라지고 프롬프트만이 뜰 것이다. 이제 원하는 명령을 실행하도록 하자. 예를 들면, 커널 컴파일과 같이 시간이 오래 걸리는 것이면 좋을 것이다.

이제 터미널을 종료하거나 Ctrl+a를 누른 후 d를 누른다. 이는 현재 screen 화면을 로긴 셀과 detach하라는 명령이다. 새로운 터미널을 열어 다시 아래와 같이 명령을 실행하면 위에서 실행한 화면을 다시 볼 수 있을 것이다.

 $screen -x screen_name

 
하지만 실행 후 시간이 오래되었기 때문에 screen_name이 잘 기억이 나지 않을 경우는 어떻게 찾을 것인가? 아래의 명령을 실행하면 기존 생성된 가상 터미널들을 표시한다.

$screen -list

There is a screen on:

        2231.proc_name  (05/17/2010 11:23:03 AM)        (Detached)

1 Socket in /var/run/screen/S-iprize.


이렇게 screen을 사용하면 실행 중간에 사용자 응답을 요구하는 프로세스도 간단한 명령으로 쉽게 접근하여 작업을 계속 진행할 수 있다.

2010년 5월 12일 수요일

[GNS3]GNS3 0.7.1 Release


지난 4월 29일 0.7.1이 릴리즈되었습니다. 어느새.. 이번 버전에서는 작은 버전업이 되었으며 몇가지 버그와 개선이 이루어졌다고 합니다.

개선 사항

  • Qemuwrapper (option to listen on a IP/host and port).
  • Basic support for external hypervisors.
  • Some improvement for projects under GNS3 (still work to do).
  • Many small bugs fixes (graphical, cloud connection etc.)

다운로드 : http://downloads.sourceforge.net/gns-3/GNS3-0.7.1-win32-all-in-one.exe?download

2010년 5월 10일 월요일

시스코 장비에서 AAA를 사용할 수 있도록 FreeRADIUS 설정하기

1. AAA란?

접근 제어는 네트워크 서버에 접근이 허용된 사용자, 이들 사용자에게 허용된 서비스 등을 제어하는 한 방법이다. Authentication, authorization, accounting (AAA) 네트워크 보안 서비스는 라우터나 액세스 서버의 접근을 제어하는 프레임 워크를 제공한다.

본 포스트에서는 앞서 소개한 FreeRADIUS를 이용하여 시스코 장비의 접근 제어에 적용하는 방법을 살펴보기로 한다. 사용된 랩 환경의 다이어그램은 아래와 같다. 또한 실재 장비를 사용하지 않으며 서버는 VMware를, 네트워크 장비는 GNS3를 사용하여 구현해보도록 한다.


이 포스트를 위해 준비해야할 것들은 FreeRADIUS 서버를 구동할 우분투 서버, 시스코 라우터(3745 IOS version 12.4(15)T13)을 구동할 GNS3 등이다. 위 서버와 GNS3를 물리적으로 분리된 머신에 설치할 수도 있지만 단일 머신에 설치할 수도 있다. 여기서는 단일 머신에 설치하였다.

인증을 위한 사용자 정보는 유닉스 계정정보(/etc/passwd)의 사용자 정보를 이용하며 시스코 장비 설정에 필요한 옵션들을 설정하는 방법도 살펴볼 것이다.

2. FreeRADIUS 설치 및 설정

설치하는 방법은 앞서 포스트에서 살펴보았듯이 명령어 한 줄로 완료된다. 물론 루트권한으로 실행하는 것을 잊지 않도록 하자.

 #apt-get install freeradius


이제 RADIUS에 시스코 장비에 대한 정보를 알려주어야 한다. 보통 라우터나 스위치는 고정 IP 주소를 사용하기 때문에 일반 클라이언트와는 달리 - 일반 클라이언트는 서브넷 전체를 할당한다 - 특정 IP 주소(192.168.111.4)에 대한 설정을 추가한다. /etc/freeradius/clients.conf을 열어 아래 설정을 추가하도록 하자.

client 192.168.111.4 {

secret = cisko_auth shortname = R1 nastype = cisco }

 이제 FreeRADIUS가 운영되고 있는 리눅스 서버에 라우터용 사용자 계정을 추가하도록 하자.

# useradd cisco

# passwd cisco

Enter new UNIX password:

Retype new UNIX password:

passwd: password updated successfully

 
이제 FreeRADIUS에 시스코를 장비에서 인증을 위한 추가 정보를 설정하도록 한다. 이와 관련된 정보는 Cisco IOS와 RADIOS를 참고하기 바란다. /etc/freeradius/users를 열어 아래 설정을 추가하자.

 cisco Auth-Type := System

Service-Type = NAS-Prompt-User, cisco-avpair = "shell:priv-lvl=15"
 
위 설정은 시스코 장비에게 로컬 유저 cisco를 사용자 로그인을 위해 사용하며 cisco-avpair 속성을 통해  enable 로그인 privilege level이 15가 됨을 나타낸다.

3. 라우터 구성하기

위에서 설명했듯이 라우터 3745를 사용한다. GNS3에서 라우터 이미지 설정하는 방법은 [GNS3] 간단한 토폴로지 만들기를 참고하기 바란다. GNS3를 관리자 계정으로 실행하자. GNS3 화면이 나타나면 아래와 같이 라우터와 Cloud를 구성한다.


VMware의 가상 호스트와 통신을 위해 Cloud의 인터페이스를 VMware의 vmnet8과 연결하도록 하자.


Generic Ethernet NIO로 VMnet8을 선택한 후 반드시 Save를 하도록 하자. 그 후 아래 OK 버튼을 클릭하여 설정 화면을 빠져나가자.


툴바의 'Add a Link' 버튼을 클릭한 후 'Manual'을 선택하여 각각 인터페이스에 링크를 추가하도록 하자. 본 포스트에서 라우터의 Fast Ethernet 0/0를 사용할 것이다.


이제 라우터에 콘솔로 연결하여 인터페이스와 AAA 설정을 하도록 하자.

우선 Fast Ethernet 0/0에 IP 주소를 할당하자.

Router(config)#interface fastethernet 0/0

Router(config-if)#ip address 192.168.111.4 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#do ping 192.168.111.111 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.111.111, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 4/11/24 ms Router(config-if)#exit Router(config)#
 
aaa 설정을 입력하자.

Router(config)#aaa new-model

Router(config)#aaa authentication login default group radius local

Router(config)#aaa authorization exec default group radius if-authenticated

Router(config)#aaa accounting exec default start-stop group radius

Router(config)#radius-server host 192.168.111.111 auth-port 1812 acct-port 1813

Router(config)#radius-server key cisko_auth

Router(config)#^Z

 
이제 기본적인 설정은 완료되었다. 텔넷으로 라우터에 접속하여 위에서 생성한 계정(cisco)을 이용해 로그인해보자.

#telnet 192.168.111.4

Trying 192.168.111.4...

Connected to 192.168.111.4.

Escape character is '^]'.



User Access Verification


Username: cisco

Password:


Router#

 

2010년 5월 9일 일요일

Cisco IOS와 RADIUS

Cisco IOS와 RADIUS[footnote]http://wiki.freeradius.org/Cisco[/footnote]

Cisco 장비는 매우 널리 사용되고 있지만 IOS가 돌아가는 Cisco 장비의 설정은 처음 접하는 이들에게는 쉽지 않은 과제이다. 이 문서는 가장 일반적인 설정 옵션들을 설명하며 Cisco 장비를 RADIUS와 함께 운영될 수 있도록 하는 데 있다.

Shell Access
RADIUS를 인바운드 쉘 요청(telnet & ssh)의 인증을 위해 사용하고자 한다면 아래와 같은 항목을 users 파일에 추가하여야 한다.

 youruser Cleartext-Password := "somepass"

              Service-Type = NAS-Prompt-User
 
위 설정으로 youruser는 시스코 장비에 첫번째 레벨 권한으로 접근할 수 있을 것이다. 하지만 설정 변경이나 더 상위 단계의 접근 권한을 위해서는 enable을 실행하여야 할 것이다.더 자세한 사항은 시스코 사이트의 Configuring Basic AAA on an Access Server [footnote] http://www.cisco.com/en/US/tech/tk59/technologies_tech_note09186a0080093c81.shtml[/footnote]를 참고하기 바란다.

Enable 모드
글로벌 Enable 비밀번호
시스코 장비에서 enable (혹은 enable 15)를 실행할 때 시스코 장비는 RADIUS 인증 요청 $enable15$를 발생한다. enable 2를 실행할 경우에는 '$enab2$' 요청을 보내며 enable 3에 대해서는 '$enab3$' 등을 요청할 것이다.
RADIUS 서버에 이들 사용자들이 enable 권한을 가질 수 있도록 비밀번호와 함께 설정하여야 한다.

  $enable15$   Cleartext-Password := "someadminpass"

             Service-Type = NAS-Prompt-User
 
User Privilege Level
특정 사용자에게 인증 응답으로 privilege level (enable 모드로 15이다)을 보내어 해당 사용자가 로그인시 자동으로 privilege level이 되도록 설정할 수 있다. 이를 위한 설정 옵션이 cisco-avpair = "shell:priv-lvl=15"이다.
설정을 위해서는 users 파일에 다음과 같은 항목을 추가한다.

 youruser   Cleartext-Password := "somepass"

           Service-Type = NAS-Prompt-User,
           cisco-avpair = "shell:priv-lvl=15"
 
더 자세한 사항은 시스코 사이트의 "How to Assign Privilege Levels with TACACS+ and RADIUS" [footnote]http://www.cisco.com/en/US/tech/tk59/technologies_tech_note09186a008009465c.shtml[/footnote]를 참고하기 바란다.


Command Authorization
TACACS+ 표현식을 Cisco-AVPair Vendor-Specific 표현식으로 변환하는 매핑법이 있다고 주장한다. 예를 들어 아래 표현은 priv-lvl을 변환한다.

cisco-avpair = "shell:priv-lvl=15"

 
"cmd"와 "cmd-arg" TACACS+ 속성은 명령어 인증이 필요하다. TACACS+ 명령어에 대한 정보는 Cisco 사이트 http://www.cisco.com/en/US/products/ps6350/products_configuration_guide_chapter09186a00804fe2d8.html에서 확인할 수 있을 것이다.

cisco-avpair = "shell:cmd=show"

 
위 옵션은 "show"명령어를 인증하는 방법이다.

IOS 12.x
시스코 버전 12.x에서 다음의 AAA 설정 명령이 권장된다.

aaa new-model

aaa authentication login default group radius local
aaa authentication login localauth local
aaa authentication ppp default if-needed group radius local
aaa authorization exec default group radius local
aaa authorization network default group radius local
aaa accounting delay-start
aaa accounting exec default start-stop group radius
aaa accounting network default start-stop group radius
aaa processes 6
 
위 설정은 대다수의 radius 서버와 궁합이 잘 맞는다. 중요한 설정 중 하나는 다음 항목이다.
   

aaa accounting delay-start

 
이 설정은 PPP negotiation 과정에서 IP 주소가 할당될 때까지 Accounting Start 패킷을 보내지 않고 기다리도록 하는 명령이다.

Common RADIUS Directives
IOS에서 설정 명령을 입력할 때 여러가지 방법이 존재한다. 단일 설정 명령으로 입력할 수도 있으며 각각의 명령문으로 입력할 수도 있다. 아래에서 그 방법을 소개하도록 한다.

Config Sample #1
아래 설정은 두 개의 RADIUS서버를 가정하며 각각 IP 주소가 192.168.1.10, 192.168.1.11이다. 아래 예에서 RADIUS 서버와 공유키를 단일 설정문으로 입력할 것이며 모든 요청은 Loopback0 인터페이스에서 발생하는 것으로 설정한다. 또한 RadiusServers 그룹을 생성하며 RADIUS 서버 두 개를 이들 그룹에 포함할 것이다.

 conf t

aaa new-model
radius-server host 192.168.1.10 auth-port 1812 acct-port 1813 key Cis$ko
radius-server host 192.168.1.11 auth-port 1812 acct-port 1813 key Cis$ko
ip radius source-interface Loopback0
aaa group server radius RadiusServers
 server 192.168.1.10 auth-port 1812 acct-port 1813  
 server 192.168.1.11 auth-port 1812 acct-port 1813  
 exit
aaa authentication login default group RadiusServers local
exit
 
위 예에서는 password-encryption 서비스가 구동되어 있을 것으로 가정한 것이어서 공유키는 암호화되어 저장될 것이다. 또한 RADIUS 서버와의 통신이 실패할 경우를 대비해 로컬에 로그인 정보를 생성할 것을 권장한다.

Config Sample #2
아래 설정은 두 개의 RADIUS서버를 가정하며 각각 IP 주소가 192.168.1.10, 192.168.1.11이다. 아래 예에서는 각각 분리된 설정으로 RADIUS 서버를 지정하고 공유기를 입력한다.

conf t

radius-server host 192.168.1.10
radius-server key Cis$ko
radius-server auth-port 1812
radius-server host 192.168.1.11
radius-server key Cis$ko
radius-server auth-port 1812
 
Shared Secret Encryption
IOS에 password-encryption 서버스가 존재하는 것을 모두 알고 있을 것이다.

service password-encryption

no service password-encryption
 
시스코 명령어 레퍼런스 사이트[footnote]http://www.cisco.com/en/US/products/sw/iosswrel/ps5207/products_command_reference_chapter09186a00801a7fa1.html#wp1204790[/footnote]
를 통해 알 수 있듯이 실제 암호화 작업은 현재 설정이 작성되거나 비밀번호가 설정될 때 진행된다. 비밀번호 암호화는 비밀번호 모두에 적용되며 사용자 비밀번호, 인증키 비밀번호, privilege 명령어 비밀번호, 콘솔 및 virtual terminal line 접근 패스워드 등이 이에 해당한다. 이 명령은 허가되지 않은 사용자가 현재 설정 내의 비밀번호는 열람하는 것을 방지한다.
password encryption이 활성화되면 비밀번호가 암호화되어 표시된다.
주의 이 명령은 높은 수준의 네트워크 보안 수준을 보장하는 것은 아니다. 이 명령을 사용하더라도 추가적인 보안 대책을 강구하여야 한다.
한가지 주의할 점은 password encryption 서비스를 사용하더라도 FreeRADIUS clients.conf 파일에 암호화된 비밀번호를 사용하지 않도록 한다. 이는 동일한 공유키로 간주되지 않는다.

Nested Accounting

아래 설정 명령은 두번째 accounting 개시 메시지를 보내며 이는 총 사용량 카운터에 문제를 발생할 것이다.

aaa accounting nested

 
시스코 장비는 사용자가 인증될 때, 그리고 PPP 세션이 시작될 때 Accounting Start 패킷을 발생한다. 그리고 PPP 세션이 끝날 때와 콜이 끊어질 때 Accounting Stop 패킷을 보낸다. 이 때문에 RadiusReport와 같은 프로그램이 이 이벤트를 두 개의 연결 시도로 보며 총 사용시간을 거의 두 배로 산출할 것이다. nested 명령어를 사용하지 않음으로써 PPP가 사용될 때 Accounting Stop 패킷을 Accounting Start 패킷을 발생한 후 바로 다음 발생하여 위와 같은 중첩 현상을 제거한다. 이는 사용자 사용량을 정확하게 모니터링하고자 하는 조직에 아주 유용할 것이다. 자세한 처리 과정에 관해서는 http://www.cisco.com/en/US/products/sw/iosswrel/ps1834/products_feature_guide09186a00800801bc.html를 참고하기 바란다.

Unique Acct-Session-Id's
IOS 버전 12.2 이상(버전 12.1(4.1)T는 숨은 명령어로 가능하다)
시스코 장비에서 RFC 2866를 만족하기 위해서는 혹은 중복된 Acct-Sessions-Id 값 생성을 멈추기 위해서는 아래 명령어를 입력하여야 한다.

radius-server unique-ident 1

 
이제 Acct-Session-Id는 256번을 재부팅하더라도 중복되지 않을 것이다. 이 명령을 입력한 후 시스템에 적용하기 위해서는 재부팅해야한다. 그렇지 않을 경우 명령 입력 후 10분 후에 아래 메시지가 뜰 것이다.

%RADIUS-3-IDENTFAIL: Save of unique accounting ident aborted.

IOS 11.x
시스코 IOS 11.1 버전에서 RADIUS 서버와의 통신을 위해서는 보통 아래와 같이 사용한다.

aaa new-model

aaa authentication ppp radppp if-needed radius
aaa authorization network radius none
aaa accounting network wait-start radius
 
IOS 11.3에서 사용자의 IP 주소가 radutmp 파일이 저장되고 radwho를 통해 볼 수 있게 하기 위해서는 아래 명령을 입력하여야 한다.

aaa accounting update newinfo

 
주의 : 11.3 버전 이후에서는 아래 명령을 사용해야 한다.

radius-server attribute 8 include-in-access-req

 
이는 IOS 11.3에서는 처음 'Start' accounting 패킷을 보낼 때 IP 주소를 보내지 않기 때문이다. 'update newinfo'를 설정해주면 account 'Alive' 패킷을 보내어 정보를 업데이트할 것이다. 또한 로그 파일에서 "deplicates" 관련 로그를 볼 수 있을 것이다. 이는 다음과 같은 명령으로 해결될 수 있다.

aaa accounting network wait radius

radius-server timeout 3
 
Ascend Style
Ascend 스타일 속성을 활성화하기 위해 추천하지는 않지만 non-standard 키워드를 추가한다.

radius-server host X.Y.Z.A auth-port 1812 acct-port 1813 non-standard

 

Cisco VSAs
시스코 디버깅 로그에서 Cisco-AVPair 속성을 보기 위해서는 아래 명령을 추가한다.

radius-server vsa accounting

 
Static Loopback IP
시스코 36/26 (아마도 3600 혹은 2600 시리즈를 지칭하는듯)에서는 시리얼, 이더넷 등에 할당된 IP 주소를 RADIUS 클라이언트 소스 주소로 선택한다. 따라서 클라이언트가 인증된 머신이 아니라는 이유로 RADIUS 서버가 Acsess 요청을 무시할 수도 있다. 따라서 시스코 장비에서 고정된 주소를 사용하도록 다음 설정을 추가하도록 한다.

ip radius source-interface Loopback0

 
그리고 라우터의 루프백 인터페이스를 아래와 같이 설정한다.

interface Loopback0

ip address 192.168.0.250 255.255.255.255
 
IP 주소를 실제 사용하는 것으로 사용하기 바란다. 만일 루프백 인터페이스를 사용하고 싶지 않을 경우에는 IP 주소가 할당된 인터페이스 중 하나에 source-interface를 설정할 수 있다.

Problems
몇몇 보고서에 의하면 Aironet 1200 series AP는 RADIUS를 완전하게 지원한다.

아래 문서들도 참고하기 바란다.

2010년 5월 7일 금요일

Radius를 이용한 ssh 인증 서버 구축하기

마이크로소프트 윈도우환경에서는 Active Directory라는 기술을 통해 기업 IT 환경에서 사용자 관리를 집중화할 수 있다. 그렇다면 유닉스 환경에서는 집중화된 사용자 관리를 어떻게 구현할 수 있을까? 더 나아가 유닉스, MS 윈도우를 같이 사용하는 환경에서 사용자 관리를 집중화할 수 있는 방법은 없을까? 이를 해결하기 위해 NIS/NIS+, LDAP, Kerberos 등 여러가지 솔루션이 존재한다. 본 포스트에서는 RADIUS를 이용한 리눅스 인증 서버 구현하는 방법을 소개하도록 한다. 참고로 이곳을 방문하면 freeRadius가 동작하는 것으로 확인된 리눅스 배포판을 확인할 수 있을 것이다.

1. RADIUS?
RADIUS를 풀어쓰면 Remote Authentication Dial In User Service이며 집중화된 Authentication, Authorization, Accounting (AAA) 관리를 위한 프로토콜이다. RADIUS는 IETF 표준으로서 광범위하게 사용되고 있으며 다양한 어플리케이션에 통합되어 사용될 수 있다. VPN, 방화벽, 무선 AP, RDBMS 등의 많은 어플리케이션들이 RADIUS 인증 방식을 지원하기 때문에 사용자 인증의 집중화가 가능하다. 때문에 IT 관리자로서 다양한 장비와 서비스를 관리할 때 하나의 계정와 비밀번호로 이들 장비들의 관리를 가능케한다.

단순 텍스트 교환방식을 사용하는 텔넷과 달리 암호화된 통신을 사용하는 ssh이 더 안전하다는 사실은 웬만한 IT 관리자에게 더이상 새롭지 않을 것이다. 이 ssh는 PAM이라는 인증 방식을 통해 사용자 인증을 한다. 사실 현대 유닉스는 사용자 인증을 위해 PAM을 이용하기 때문에 인증 방식을 변경하더라도 시스템 내의 인증 방식을 서버스 개별적으로 변경할 필요가 없다.

일반적으로 리눅스에서는 /etc/passwd에 기반한 사용자 데이터베이스를 관리한다. 본 포스트에서 사용하는 인증 모델도 각 클라이언트에 저장되어 있는 /etc/passwd의 id를 기초로하여 사용자가 입력한 비밀번호가 RADIUS 서버에 저장되어 있는 사용자 비밀번호와 동일한지 비교하여 인증하는 방식이다. 때문에 각 클라이언트마다 uid, gid, 홈디렉토리가 다르다. 이를 극복하기 위해서는 LDAP을 이용한 인증 방식을 사용하여야 한다.

또한 각 클라이언트에 RADIUS 인증 모듈인 pam_radius_auth 라이브러리를 설치하고 인증서버의 정보를 설정하여야 한다.

2. FreeRadius를 사용하여 ssh 사용자 인증하기
2.1 FreeRadius 설치하기
FreeRadius는 리눅스뿐 아니라 여러 플랫폼에서 실행되는 GNU GPL v2 라이센스로 배포되며 BSD 라이센스인 PAM 라이브러리와 함께 동작한다. 본 포스트에서 ssh 사용자 인증을 위해 FreeRadius를 이용하는 방법을 알아보도록 한다. 본 포스트에서 사용된 네트워크 환경은 아래와 같다.


우선 RADIUS 서버로 사용할 리눅스 서버를 준비하도록 한다. 본 포스트에서는 우분투 10.04 Lucid Lynx를 사용하였다. RADIUS 서버인 FreeRadius를 설치하도록 하자.

 #apt-get install freeradius

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  freeradius-common freeradius-utils libdbi-perl libfreeradius2 libltdl7
  libnet-daemon-perl libperl5.10 libplrpc-perl perl perl-base perl-modules
Suggested packages:
  freeradius-ldap freeradius-postgresql freeradius-mysql freeradius-krb5
  dbishell perl-doc libterm-readline-gnu-perl libterm-readline-perl-perl
The following NEW packages will be installed:
  freeradius freeradius-common freeradius-utils libdbi-perl libfreeradius2
  libltdl7 libnet-daemon-perl libperl5.10 libplrpc-perl
The following packages will be upgraded:
  perl perl-base perl-modules
3 upgraded, 9 newly installed, 0 to remove and 34 not upgraded.
Need to get 11.0MB of archives.
After this operation, 8,290kB of additional disk space will be used.
Do you want to continue [Y/n]?

(생략)

Updating default SSL certificate settings, if any...
Adding user freerad to group ssl-cert
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
...............................+.......................+.......+...................+........................................................+............+................+.......+...+...........................................+..................................................................................................................................................+....+.+............+.........+.+.................................+.....+..............+.......+.................................................+.............................................+...................+..............+.............................+..............................................................................................+....................................................................................................................................+........................................................................+........................+....................................+....................+.....................+................................................................................................................................+......................................++*++*++*
 * Starting FreeRADIUS daemon freeradius                                 [ OK ]

Setting up freeradius-utils (2.1.8+dfsg-1ubuntu1) ...
Setting up perl-modules (5.10.1-8ubuntu2) ...
Setting up perl (5.10.1-8ubuntu2) ...

Setting up libnet-daemon-perl (0.43-1) ...
Setting up libplrpc-perl (0.2020-2) ...
Setting up libdbi-perl (1.609-1build1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
root@UAT:/home/iprize#
 
 
 의존성 검사 후 필요한 패키지들을 내려 받아 설치가 완료되면 자신의 네트워크 환경에 맞게 설정을 수정하여야 한다.

2.2 FreeRadius 설정 수정하기
FreeRadius version 2는 사용이 용이하도록 만들어졌다고 하지만 처음 접하는 이들에게는 그다지 쉽지않다. 문서나 관련 자료들이 많이 부족하기 때문이다.

FreeRadius 서버에서 수정할 사항은 RADIUS 인증을 받으려는 클라이언트에 대한 네트워크 대역과 공유키(secret)를  지정하는 것으로 마무리된다. /etc/freeradius/ 디렉토리의 clients.conf를 열어 아래 설정을 추가하도록 하자.

client 192.168.111.0/24 {

        secret          = radius_auth
        shortname       = private-network
}
 

위 공유키(secret)을 기억하도록 하자. 서버와 클라이언트의 공유키가 일치하지 않을 경우 인증이 실패하니 주의하도록 하자.

3 클라이언트 설정
3.1 pam-radius-auth 라이브러리 설치
리눅스에서는 사용자 인증을 위해 PAM (Pluggable Authentication Modules)을 통해 사용자 인증을 한다. 우분투 설치후 기본적으로 사용자 인증을 /etc/passwd /etc/shadow의 데이터베이스를 이용한다. 하지만 RADIUS를 설정하게 되면 /etc/passwd에서 사용자 ID만을 취하고 사용자 비밀번호는 인증서버에서 받아와 비교한 후 로긴을 하게 된다. 이를 위해서는 PAM 설정을 변경하여 인증을 RADIUS를 통하도록 해야 한다. 이에 필요한 라이브러리는 libpam-radius-auth이며 RADIUS 인증을 사용하려는 모든 클라이언트에 설치하도록 한다.

 # apt-get install libpam-radius-auth

 
/etc/pam_radius_auth.conf 파일을 수정하여 PAM에게 RADIUS 서버 정보를 알려주도록 한다. 이때 공유키(shared secret)은 clients.conf 설정 파일에 지정하였던 키와 동일한 것을 적어주어야 한다.

 # server[:port] shared_secret      timeout (s)

192.168.111.111 radius_auth       1
 

3.2 ssh 설정 변경하기
위에서 언급했듯이 ssh는 PAM을 이용해 인증을 한다. RADIUS를 이용해 사용자 인증을 하도록 /etc/pam.d/sshd에 아래 설정을 추가한다. 단 추가할 때 @include common-auth보다 위쪽에 추가하여야 한다. 아래쪽에 추가할 경우 common-auth의 설정이 먼저 적용이 되어 로컬 사용자 정보를 이용하기 때문이다.

 auth sufficient pam_radius_auth.so

 

3.3 사용자 추가하기
클라이언트 머신에 사용할 계정을 추가하도록 한다. 이때 비밀번호를 지정할 필요는 없다.

#adduser -home /home/iprize iprize

 
 
4. Troubleshooting
 -X옵션을 사용하면 FreeRadius를 사용하면서 문제가 발생할 경우 어디가 잘못되었는지 확인할 수 있도록 디버그 모드로 실행된다. freeradius 서버가 실행되고 있으면 멈추고 -X 옵션을 주고 실행하도록 한다. service 명령어를 이용하여 RADIUS 서버를 실행할 경우 -X옵션을 줄 수 없을 것이다. freeradius 실행 파일은 /usr/sbin/ 디렉토리 아래에 있으니 해당 디렉토리로 이동하여 -X 옵션을 주어 사용하도록 하자. 아래 메시지는 인증이 성공하여 정상적으로 로긴하였을 때 나타나는 것이다.
 

  rad_recv: Access-Request packet from host 192.168.111.131 port 6767, id=147, length=91

        User-Name = "iprize"
        User-Password = "testing123"
        NAS-IP-Address = 127.0.1.1
        NAS-Identifier = "sshd"
        NAS-Port = 5742
        NAS-Port-Type = Virtual
        Service-Type = Authenticate-Only
        Calling-Station-Id = "192.168.111.1"
+- entering group authorize {...}
++[preprocess] returns ok
++[chap] returns noop
++[mschap] returns noop
[suffix] No '@' in User-Name = "iprize", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
[eap] No EAP-Message, not doing EAP
++[eap] returns noop
++[unix] returns updated
++[files] returns noop
++[expiration] returns noop
++[logintime] returns noop
++[pap] returns updated
Found Auth-Type = PAP
+- entering group PAP {...}
[pap] login attempt with password "testing123"
[pap] Using CRYPT encryption.
[pap] User authenticated successfully
++[pap] returns ok
+- entering group post-auth {...}
++[exec] returns noop
Sending Access-Accept of id 147 to 192.168.111.131 port 6767
Finished request 0.
Going to the next request
Waking up in 4.9 seconds.
Cleaning up request 0 ID 147 with timestamp +25
Ready to process requests.
 
참고자료
1. freeRADIUS - http://freeradius.org/

2010년 5월 6일 목요일

freeradius를 이용한 인증서버 - 삽질중...

벌써 4일째인가? freeradius를 이용해서 인증서버 구현해보려고 하는데 삽질의 연속이다. 문서도 별로 없고 관련 포스트도 없고... 에고.. 어디서부터 접근해야 하나...


2010년 5월 2일 일요일

우분투 리눅스 설치 자동화에 도전해보다! - Preseeding

HP나 델에서 PC를 구매할 경우 윈도우가 설치되어 있기 때문에 사내 표준 데스크탑 운영체제가 윈도우일 경우 문제가 되지 않을 것이다. 하지만 사내 표준 데스크탑 시스템으로 리눅스를 사용한다면 어떨까? 국내에서 100명 이상이 근무하는 기업들 중 리눅스를 표준 데스크탑 시스템으로 사용하는 기업은 거의 없을 것이라 생각한다. 하지만 외국의 여러 기업들은 리눅스를 사내 표준 데스크탑으로 사용하고 있다. (참고 : 어떤 기업 혹은 단체에서 리눅스를 사용하나?) 100여대 이상의 데스크탑에 운영체제를 설치하는 일을 시간이 오래 걸리는 작업이며 또 단순 작업의 연속일 것이다.

자동화된 설치란 간단하게 말하면 운영체제 설치에 필요한 정보들을 특정 파일에 지정된 형식으로 작성하여 설치 과정에서 작업자의 일련의 입력 과정을 최소화한 방법이라고 할 수 있을 것이다. 운영체제 설치를 자동화하는 방법에는 윈도우에서는 무인 설치, 레드햇의 Kickstart, 우분투의 Preseed 등을 들 수 있다. 본 포스트에서는 우분투 10.04 LTS를 사용하여 자동화된 설치에 대해 알아보도록 한다.

본 포스트의 목적은 설치 대상 컴퓨터에서의 입력 과정을 가능한 최소화하고 더 나아가 동일한 컴퓨터에 적용할 수 있도록 표준화하는 것에 있다. 그리고 Lab환경 구축을 위해 VMware를 사용하였다.

1. 준비

설치 대상 데스크탑에서의 작업을 가능한 최소화하기 위해 CD 혹은 플로피디스켓을 이용한 부팅방법을 지양하고 네트워크 부팅을 이용할 것이다. 이를 위해서는 대상 컴퓨터가 PXE (Pre-boot eXecution Environment)을 지원해야 한다. 지원 여부는 BIOS를 확인해보기 바란다. 참고로 vmware의 가상 머신은 이를 지원한다. 하지만 서버쪽에서는 PXE 부팅을 위해 몇가지 준비해야할 것들이 있다.  

  • DHCP 서버 // 대상 컴퓨터의 IP 주소를 자동으로 할당한다
  • TFTP 서버 // 부팅에 필요한 커널을 내려준다
  • HTTP 서버 // 응답 파일(preseed.cfg)을 내려준다

위 서버들을 설치하기 전에 먼저 vmware에 서버로 사용할 시스템을 설치하도록 하자. 위 서버들을 실행할 수 있는 리눅스 배포판이면 된다. 여기서 편의상 우분투 시스템에 위 서버들을 설치하도록 하자. vmware에 우분투를 설치하는 방법은 따로 설명하지 않을 것이다. (참고 tsimson : [우분투 설치] 3. vmware에 설치)

DHCP 설치 및 설정

위에서 설명하였듯이 DHCP는 호스트에 IP 주소를 자동으로 할당한다. 우분투 시스템에 DHCP 서버를 설치하자. 

#apt-get install dhcp3-server


DHCP의 역할은 호스트에게 가용 IP 대역에서 하나를 할당하는 것뿐 아니라 TFTP 서버주소와 부팅 이미지에 대한 정보를 제공한다. dhcp 설치가 완료되면 /etc/dhcp3/dhcp.conf의 설정을 수정한다.

option domain-name-servers 8.8.8.8, 8.8.4.4 ; // 자신이 사용하는 DNS 서버주소를 사용한다. 본인은 외우기 쉬워 구글의 DNS를 선택하였다

default-lease-time 86400;

max-lease-time 604800;

authoritative;


subnet 192.168.111.0 netmask 255.255.255.0 { // vmware의 nat의 기본 IP 대역

        range 192.168.111.200 192.168.111.253;

        filename "pxelinux.0"; // 우분투 설치 부팅 이미지

        next-server 192.168.111.128; // TFTP 서버 주소

        option subnet-mask 255.255.255.0;

        option broadcast-address 192.168.111.255;

        option routers 192.168.111.2;

}

 
설정을 저장한 후 dhcp 서버를 가동시키자.

 # service dhcp3-server start

 
TFTP 설치 및 설정

주의 : tftp는 접속시 인증과정이 없기 때문에 실제 환경에서 사용할 때는 외부에서 접근이 되지 않도록 주의한다.

TFTP는 Trivial File Transfer Protocol의 약자로 보통 ftp와 유사하지만 일반 ftp와 달리 인증 과정이 없다. 다음 명령을 실행하면 tftp 서버가 설치된다.

 # apt-get install tftpd-hpa

 
tftp 서버를 선택할 때 한가지 주의해야할 사항은 'tsize' 옵션을 지원해야 한다는 점이다. tsize 옵션이 설정되어야 서버가 클라이언트에게 전송되는 파일의 크기를 보낼 수 있다.

설치가 완료되었으면 /etc/default/tftpd-hpa아래와 같이 추가 혹은 수정한다.

TFTP_USERNAME="nobody"

TFTP_DIRECTORY="/var/lib/tftpboot" // 중요 : 반드시 해당 디렉토리를 생성해주여야 한다

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="--secure"


위 tftpboot 디렉토리가 없으면 nobody 권한으로 생성하도록 한다. tftp는 기본적으로 활성 상태가 아니기 때문에 아래 명령으로 활성화시킨다.

 # service tftpd-hpa start

 
명령어 'ss -ua'를 실행하면 tftp 서버가 실행되고 있는지 확인할 수 있다.

 # ss -ua

State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port  

UNCONN     0      0                       *:bootps                   *:*      

UNCONN     0      0                       *:tftp                     *:*      

UNCONN     0      0                       *:mdns                     *:*      

UNCONN     0      0                       *:41714                    *:*      

 
HTTP 서버 설치 및 설정

preseeding 과정에서 웹서버는 설치 대상 컴퓨터에 응답 파일(preseed.cfg)을 전달하기 위해 반드시 필요하다. 따라서 자신이 사용하기 편한 웹서버를 선택하도록 하자.

 # apt-get install apache2


아파치 서버를 설치하면 자동으로 데몬이 구동되어 따로 설정할 것이 없다. 자동화된 설치를 위해서 응답파일(preseed.cfg)를 웹서버 루트 디렉토리(/var/www/)아래에 복사하면 끝이다. 응답 파일 작성은 아래에서 설명하도록 한다.

2. Netbooting에 필요한 파일 설치

우분투 부팅에 필요한 파일들을 우분투 사이트에서 내려 받아 tftp 루트디렉토리에 복사하도록 한다.

# wget http://ftp.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/netboot.tar.gz

# cp netboot.tar.gz /var/lib/tftpboot/


tftp 루트디렉토리로 이동하여 내려 받은 파일의 압축을 푼다.

# cd /var/lib/tftpboot/

# tar zxvf netboot.tar.gz

 
이 시점에서 우분투를 설치할 컴퓨터를 켜면 네트워크로 부팅되며 아래와 같은 화면을 볼 수 있다. 설치 자동화를 위해서는 부팅 파라메터를 추가로 입력해야 한다. 하지만 설치 자동화를 위한 부팅 파라메터가 짧지 않고 수십대의 PC마다 입력하는 것은 시간 낭비일뿐만 아니라 입력 과정에서 실수라도 있으면 부팅을 다시해야 할 것이다. 이를 위해 부팅 화면을 수정하여 부팅 파라메터 입력 없이 설치가 진행되도록 하자.


부팅 화면과 관련된 파일들은 ubuntu-installer/i386/boot-screens/ 아래 존재한다. 설치 자동화를 위해 'Automated Install'이라는 메뉴 항목을 추가할 것이다. text.cfg 파일을 열어 아래와 같이 설정을 추가한다. 'Automated Install' 항목이 가장 상단에 위치할수 있도록 text.cfg의 위쪽에 삽입한다. 

 label automated

menu label ^Automated Install

menu default // 부팅 화면이 나타나면 커서가 이 메뉴에 위치하도록 한다

kernel ubuntu-installer/i386/linux

append auto=true priority=critical vga=normal initrd=ubuntu-installer/i386/initrd.gz url=http://192.168.111.128/preseed.cfg --quiet


 
저장한 후 대상 컴퓨터에서 부팅 화면을 확인해 보면 'Automated Install' 항목이 추가되어 있을 것이다. 



3. 응답 파일(preseed.cfg) 작성하기

응답 파일과 관련된 설정은 매우 다양하며 네트워크 설정, 패키지 선택 등에 대해 선택할 수 있도록 준비되어 있다. 이를 모두 설명하는 일을 매우 괴로운 일이니 넘어가기로 하자. 본인은 우분투에서 제공하는 예제 파일을 기초로 하여 필요한 부분을 수정하여 사용하였다. 우분투 사이트에서 예제를 구할 수 있으며 본 포스트에서 사용한 응답 파일은 아래와 같다. 간단히 설명하면 DHCP로부터 IP을 할당 받고 archive.ubuntu.com에서 ubuntu-desktop 패키지를 내려받아 설치할 것이다.

#### Contents of the preconfiguration file
### Localization
# Locale sets language and country.
d-i debian-installer/locale string ko_KR

# Keyboard selection.
# Disable automatic (interactive) keymap detection.
d-i console-setup/ask_detect boolean false
#d-i console-setup/modelcode string pc105
d-i console-setup/layoutcode string us

### Network configuration
# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto

# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain

# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string


### Mirror settings
# If you select ftp, the mirror/country string does not need to be set.
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string

# Suite to install.
d-i mirror/suite string lucid;

### Clock and time zone setup
# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true

# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string Asia/Seoul

# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true

### Partitioning
# Alternatively, you can specify a disk to partition. The device name must
# be given in traditional non-devfs format.
# Note: A disk must be specified, unless the system has only one disk.
# For example, to use the first SCSI/SATA hard disk:
#d-i partman-auto/disk string /dev/sda
# In addition, you'll need to specify the method to use.
# The presently available methods are: "regular", "lvm" and "crypto"
d-i partman-auto/method string lvm

# If one of the disks that are going to be automatically partitioned
# contains an old LVM configuration, the user will normally receive a
# warning. This can be preseeded away...
d-i partman-lvm/device_remove_lvm boolean true
# The same applies to pre-existing software RAID array:
d-i partman-md/device_remove_md boolean true
# And the same goes for the confirmation to write the lvm partitions.
d-i partman-lvm/confirm boolean true

# You can choose one of the three predefined partitioning recipes:
# - atomic: all files in one partition
# - home:   separate /home partition
# - multi:  separate /home, /usr, /var, and /tmp partitions
d-i partman-auto/choose_recipe select multi

# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true

### Account setup
# To create a normal user account.
d-i passwd/user-fullname string Desktop User
d-i passwd/username string secmaster
# Normal user's password, either in clear text
d-i passwd/user-password password Password1
d-i passwd/user-password-again password Password1

### Package selection
tasksel tasksel/first multiselect ubuntu-desktop

# Individual additional packages to install
d-i pkgsel/include string openssh-server build-essential

### Boot loader installation
# This is fairly safe to set, it makes grub install automatically to the MBR
# if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true

### Finishing up the installation
# Avoid that last message about the install being complete.
d-i finish-install/reboot_in_progress note

### X configuration
# X can detect the right driver for some cards, but if you're preseeding,
# you override whatever it chooses. Still, vesa will work most places.
#xserver-xorg xserver-xorg/config/device/driver select vesa

# A caveat with mouse autodetection is that if it fails, X will retry it
# over and over. So if it's preseeded to be done, there is a possibility of
# an infinite loop if the mouse is not autodetected.
#xserver-xorg xserver-xorg/autodetect_mouse boolean true

# Monitor autodetection is recommended.
xserver-xorg xserver-xorg/autodetect_monitor boolean true
# Uncomment if you have an LCD display.
#xserver-xorg xserver-xorg/config/monitor/lcd boolean true
# X has three configuration paths for the monitor. Here's how to preseed
# the "medium" path, which is always available. The "simple" path may not
# be available, and the "advanced" path asks too many questions.
xserver-xorg xserver-xorg/config/monitor/selection-method \
       select medium
xserver-xorg xserver-xorg/config/monitor/mode-list \
       select 1024x768 @ 60 Hz

이제 응답파일을 HTTP 루트디렉토리(/var/www/)에 복사한다. 이제 설치 대상 컴퓨터를 부팅하면 tftp로부터 부팅 이미지를 받고 응답 파일을 읽어 자동으로 패키지를 내려받아 설치할 것이다. 위 응답파일로 진행할 때 파티션 설정을 확인하는 과정에서 사용자 응답을 요구하니 참고하기 바란다. 정식 버전 릴리즈 후 다시 시도해보니파티션 과정에서 사용자 응답없이 진행된다. 아마도 개발과정의 버그가 아닐까 생각한다. 기회가 된다면 버그가 리포트되었는지 찾아보도록 해야겠다.

설치 후 추가 패키지를 설치하고자 한다면 preseed/late_command를 이용하자.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

2010년 5월 1일 토요일

한자오치의 사기교양강의


개인적으로 중국 역사에 관심이 많다. 하지만 학문적 관심이 아닌 개인적인 반면 교사의 역할로서 관심이다. 중국역사에 관한 서적을 처음에는 삼국지부터 시작했지만 삼국지와는 다르게 글쓴이의 각색이 많이 이루어지지 않은 초한서 혹은 사기에 개인적인 관심이 더 간다.

사기교양강의란 책을 읽으면서 느낀점은 중국 역사에 관해서는 문학서와 역사서의구분이 모호하다는 점이다. 한자오치도 본 책을 통해서 밝히듯이 사기의 일부이야기는 그저 이야기로 읽어야지 진실한 역사로 읽을 수 없다고 한다. 이때문에 개인적으로 사기를 재밌게 읽었던 것이 아닐까.

중국역사, 특히 인물에 대해 촌평하자면,

중국역사에는 독한 사람들 너무 많아. 곱게 죽은 사람들 찾기가 힘들판이니...

이상 끝..