우리는 소위 “인터넷 중독”이 문제가 되는 세상에 살고 있습니다. 그 만큼 인터넷이 우리 생활과 점점 밀접하게 연관되고 있다는 것을 나타내는 것이 아닐까요? 자 그럼 이제 웹( Web )에 대해서 알아보도록 하겠습니다.
[그림 1] 웹이란 무엇인가?
웹은 기본적으로 거미줄을 뜻하는 영어 단어입니다. 그렇다면 왜 거미줄을 뜻하는 단어가 인터넷을 통칭하는 단어로 쓰이게 되었을까요? 그것은 네트워크끼리 연결된 인터넷을 거시적으로 봤을 때 나타납니다. 인터넷은 수 많은 컴퓨터들과 네트워크들로 이루어져 있습니다. 복잡하게 얽힌 모습이 마치 거미줄 같다고 하여 웹이라는 명칭이 붙게 된 것입니다.
2. 웹과 HTML
이러한 웹에서는 지금도 수 많은 데이터들이 오가고 있습니다. 여러분이 인터넷을 켜고 포털사이트에 접속을 하면 포털의 웹서버에서 여러분의 컴퓨터( 정확히 말하면 웹브라우저 )로 HTML이라는 파일이 전송되게 됩니다. 그렇다면 이제 HTML의 가장 원초적인 역할도 어느정도 설명이 됩니다. HTML은 Hyper Text Mark-up Language의 약자로 마지막 단어의 Language에서 알 수 있듯이 언어입니다. 즉 인터넷에서 서버와 클라이언트가 대화 할 때 사용되는 언어라고 할 수 있습니다.
[그림 2] 웹브라우저와 서버의 대화
다시한번 HTML을 이용한 웹 서버와 웹 브라우저의 대화 순서를 알아 보도록 하겠습니다.
[그림 3] 서버로의 접속
1) 먼저 여러분은 웹 브라우저를 통해서 어떤 사이트에 접속을 하게 됩니다. 이 사이트는 도메인이라는 인간이 알기 쉬운 문자열을 갖고 있습니다. ( 인간은 숫자보다는 문자열에 익숙하죠. 문자열에는 의미가 있기 때문입니다. ) 이 도메인은 ip주소라는 유일한( 이론상으론... )번호로 매핑이 됩니다. 웹 브라우저는 이 ip주소를 이용하여 웹 페이지가 필요하다는 요청을 합니다.
[그림 4] 요청한 서버의 응답
2) 이러한 요청을 받은 웹서버는 브라우저가 요청한 페이지 파일( html파일 )과 해당 파일에서 필요로하는 리소스들 ( 음악이나 동영상과 같은 미디어 파일이나 플래시 파일과 같은 기타 요소들 )을 웹 브라우저로 전송합니다.
[그림 5] 브라우저의 해석 및 화면 출력
3) 웹 페이지 파일과 리소스들을 받은 웹 브라우저는 HTML파일을 해석합니다. ( 파싱을 한다고 하나요?? ) HTML을 해석한 다음 표준에 의해 정의된 대로 화면에 출력을 해 줍니다. HTML파일 자체는 <HTML> </HTML>이나 <embed> </embed>와 같은 특정한 의미를 갖고 있는 태그들과 내용들로 이루어져 있습니다. 이런 의미들을 해석하고 우리에게 익숙한 웹페이지를 보여주는 작업을 브라우저가 하게 됩니다.
4) 해석을 마친 웹 브라우저는 해당 웹 페이지를 사용자에게 보여주게 됩니다. 이 때 보여지는 화면이 우리에게 익숙한 웹 페이지의 형태를 갖고 있습니다.
[그림 6] 여러 브랜드의 브라우저
위에서 HTML을 웹 서버와 웹 브라우저가 대화에 사용하는 언어라고 정의했습니다. 다른 측면에서 HTML을 정의한다면, “웹 페이지를 구성하는 뼈대”라고 할 수 있습니다. 웹 서버와 브라우저의 대화 과정의 3번째 과정에서 HTML을 브라우저가 해석하는 단계가 있습니다. 이런 해석 방법은 w3c에 의해서 관리되고 있습니다. ( 표준이라고 하죠. 웹 브라우저라는 제품은 하나의 회사에서만 만드는 것이 아니라 여러 회사에서 각기 다른 제품을 만들기 때문에 표준이 필요하게 되었습니다. 만일 표준이 없다면 굉장히 혼란스러운 상황이 도래하게 되겠죠. )
[그림 7] W3C 의 홈페이지
HTML에 대해서 어떠한 측면의 정의를 사용하던 웹을 공부하기 위해서 HTML을 공부하는 것이 많은 도움을 주는 것은 사실입니다.
컴퓨터를 바꾸시려는 분들이나 컴퓨터에 관심이 많으신 분들이라면 RAM이라는 단어를 들어 보셨을 겁니다. RAM은 ( Random Access Memory )의 줄인 말로 CPU가 직접 접근 할 수 있는 유일한 메모리입니다. ( 물론 캐싱 기법을 사용한다면 캐시 메모리도 추가가 되겠지만 말입니다. ) 컴퓨터 성능을 논 할 때 ( 주로 스펙이라는 말로 컴퓨터를 평가 할 때 ) CPU 클럭 속도와 더불어 가장 많이 사용되는 것이 메모리의 용량입니다.
[그림 1. 다나와 견적에서 볼 수 있는 메모리의 용량 ]
메모리 용량과 더불어 항상 따라다니는게 DDR이라는 용어입니다. 최근 DDR2에서 DDR3로 넘어가는 추세라고 하던데, 도대체 DDR이란 무엇을 말하는 것인지 궁금해 집니다.
[그림 2. SDR SDRAM ]
1. SDR SDRAM
우선 DDR을 논하기 전에 SDR이라는 것을 논해야 합니다. SDRAM이라는 단어는 IT관련 뉴스나 메모리에 관심있으신 분들이라면 들어 보셨을 겁니다. 위키피디아에서 SDR SDRAM을 다음과 같이 정의하고 있습니다.
SDRAM, 에스디 램은 Synchronous Dynamic Random Access Memory 의 약자이다. SDRAM 은 DRAM 의 발전된 형태이며 보통 DRAM 과는 달리 제어 장치 입력을 클록펄스(Clock Pulse)와 동시에 일어나도록 하는 동기식 DRAM이다.DDR SDRAM의 보급으로 SDR SDRAM이라는 관례적인 명칭이 주어졌다. SDR은 Single Data Rate 의 약자이다. 이 의미는 기존의 SDRAM 이 각 클록펄스가 상승 또는 하강하는 시점에서 한번만 정보를 전송하는 것에서 나온 명칭이다
SDR SDRAM은 SDRAM의 가장 기본적인 표준으로 ( Single Data Rate SDRAM )의 약자입니다. Single이라는 단어에서 알 수 있듯이 한번에 하나의 커멘드( 명령어 )나 한 워드의 데이터만 주고 받을 수 있는 구조입니다. 전형적인 클록 주파수는 100 혹은 133MHz 입니다.
[그림 3] DDR SDRAM
2. DDR SDRAM
하지만 산업이 발전하고 고객들의 요구 수준이 높아지면서 SDR SDRAM의 속도의 한계가 드러나게 됩니다. 그래서 나온 것이 DDR SDRAM 입니다. DDR은 Double Data Rate의 약자로 Double이라는 단어에서 느껴지듯이 SDR 에 비해서 두 배의 속도를 나타냅니다. DDR SDRAM 에 대해서 위키피디아는 다음과 같이 정의하고 있습니다.
Double Data Rate synchronous dynamic random access memory (or also known as DDR SDRAM) is a class of memory integrated circuits used in computers. It achieves nearly twice the bandwidth of the preceding single data rate (SDR) SDRAM by double pumping (transferring data on the rising and falling edges of the clock signal) without increasing the clock frequency.
With data being transferred 64 bits at a time, DDR SDRAM gives a transfer rate of (memory bus clock rate) x 2 (for dual rate) × 64 (number of bits transferred) / 8 (number of bits/byte). Thus, with a bus frequency of 100 MHz, DDR SDRAM gives a maximum transfer rate of 1600 MB/s.
직역을 하자면 “DDR SDRAM은 컴퓨터에서 사용되는 집적회로의 한 종류이다. 이것은 클록 주파수의 증가 없이 더블 펌핑 ( Rising Edge와 Falling Edge 두 부분에서 모두 데이터를 전송함 ) 을 이용하여 SDR SDRAM에 비하여 거의 2배의 대역폭을 구현한다.
한번에 64 Bits의 데이터가 전송 된다고 할 때, DDR SDRAM의 전송률은 다음과 같이 계산된다. ( 메모리 버스 클록율 ) * 2 ( 더블 펌핑 ) * 64 ( 전송되는 비트의 수 ) / 8 ( 바이트당 비트의 수 ). 따라서 100 MHz의 버스 주파수를 가지고 있다고 할 때, DDR SDRAM은 최대 1600MB/s의 전송률을 나타낸다. “
SDR SDRAM이 한 클록당 하나의 명령어를 전송할 때( Rising Edge나 Falling Edge 둘 중 하나에서 전송이 일어난다고 함 ) DDR SDRAM은 Rising Edge와 Falling Edge 두 부분에서 전송을 하기 때문에 최대로 2배의 전송률이 나타나게 됩니다.
3. DDR2
기술의 발전을 야기 시키는 것은 항상 더 나은 기술의 요구입니다. DDR이 SDR에 비해서 2배의 대역폭을 가져( 이론 상으로는… ) 속도가 빠르다곤 하지만 사용자의 평가 기준은 또 높아져서 더 개선된 ( 혹은 더 빠른? ) 메모리를 요구하기 시작했습니다. 그래서 등장한 것이 DDR을 개선한 DDR2 입니다.
[그림 4] DDR2 SDRAM
DDR2에 대해서 위키피디아는 다음과 같은 정의를 하고 있습니다
DDR2 SDRAM is a double data rate synchronous dynamic random access memory interface. It supersedes the original DDR SDRAM specification and the two are not compatible. In addition to double pumping the data bus as in DDR SDRAM, (transferring data on the rising and falling edges of the bus clock signal), DDR2 employs an I/O buffer between the memory and the data bus so that the data bus can be run at twice the speed of the memory clock. The two factors combine to achieve a total of 4 data transfers per memory clock cycle.
With data being transferred 64 bits at a time, DDR2 SDRAM gives a transfer rate of (memory clock rate) × 2 (for bus clock multiplier) × 2 (for dual rate) × 64 (number of bits transferred) / 8 (number of bits/byte). Thus with a memory clock frequency of 100 MHz, DDR2 SDRAM gives a maximum transfer rate of 3200 MB/s.
Since the memory clock runs at half the external data bus clock rate, DDR2 memory operating at the same external data bus clock rate as DDR will provide the same bandwidth but with higher latency, resulting in inferior performance. Alternatively, DDR2 memory operating at twice the external data bus clock rate as DDR may provide twice the bandwidth with the same latency (in nanoseconds). The best-rated DDR2 memory modules are at least twice as fast as the best-rated DDR memory modules.
한글로 옮겨 보면
“ DDR2 SDRAM은 double data rate synchronous dynamic random access memory 인터페이스이다. DDR2는 기존의 DDR SDRAM 스펙을 대신하며 이 둘은 호환되지 않는다. (즉, DDR2와 DDR 메모리는 함께 사용될 수 없다. )
DR SDRAM에서 사용된 더블 펌핑 데이터 버스와 더불어 DDR2는 2배의 메모리 클록 속도를 사용하기 위하여 I/O( 입출력 )버퍼를 사용하였다. 따라서 DDR2는 SDR에 비하여 4배의 속도를 낸다. ( 더블 펌핑에서 * 2 , I/O 버퍼에서 * 2 )
데이터가 단위 시간당 64비트로 전송된다고 할 때, DDR2 SDRAM의 전송률은 다음과 같이 계산된다. “( 메모리 클록율 ) * 2 ( 버스 클록 멀티플라이어 ) * 2 ( 더블 펌핑 ) * 64 ( 단위 시간당 비트 전송 ) / 8 ( 바이트당 비트 수 ). 예를 들면 메모리 클록이 100MHz인 DDR2 SDRAM의 경우 최대 3200MB/s 의 속도를 낼 수 있다.
이 처럼 새로운 기술을 사용하여 DDR2는 DDR보다 이론상으로 최대 2배의 속도 향상을 가져왔습니다. 표준에 의하면 DDR은 200MHz부터 400MHz까지의 동작을 보입니다. 반면 DDR2는 그 보다 2배 높은 400MHz부터 800MHz까지 동작하는 것으로 보고 있습니다.
또 한 하드웨어의 인터페이스라고 할 수 있는 핀의 갯수에서도 차이가 납니다. 초기 DDR모델은 184핀인데 비해서 DDR2는 240핀입니다.
[그림 5] DDR3 SDRAM
4. DDR3
최근에 바뀌고 있는 트랜드가 바로 DDR2에서 DDR3로 넘어가는 것입니다. DDR3는 이론적으로 DDR2의 2배의 속도를 냅니다. DDR3에 대해서는 추후에 다시 포스팅을 하도록 하겠습니다.
5. DDR2 vs DDR3
최근 두 개의 DDR 램을 선택해야 하는 경우가 많이 발생합니다. DDR2와 DDR3는 호환이 안 되기 때문에 둘 중 하나를 선택해야 하는데, DDR2는 이미 시장이 확보되어 있고 저렴한 메인 보드들이 나와 있기 때문에 가격이 낮습니다. 하지만 이제 생산을 잘 안하기 때문에 메모리의 가격은 꾸준히 상승하고 있죠. DDR3는 아직까지 호환되는 보드가 많지 않고, 가격이 DDR2에 비해서 비쌉니다.
[그림 7] DDR2와 DDR3의 전력 소모량 비교
소모 전력을 보면 좀 더 빠르게 동작하는 DDR3 1067의 경우 DDR2 800 보다 적은 전력으로 동작하는 것을 볼 수 있습니다.
[그림 8] DDR3와 DDR2의 모습 비교
겉 모습을 보시면 핀의 배열이 있고 그 중간에 움푹 들어간 노치의 위치가 다른 것을 볼 수 있습니다.
DDR2건 DDR3건 얼마나 기존의 하드웨어와 잘 호환이 되는지가 중요합니다. 다나와에서 아이쇼핑하다가 문득 궁금해서 포스팅을 하게 되었습니다.
일상에서 우리는 정렬 문제를 굉장히 많이 접합니다. 마구 섞여 있는 카드를 번호 순서로 오름차순으로 정렬을 하고자 하는 문제를 해결 한다고 해봅시다. 가장 보편적인 방법은 가장 작은 숫자의 카드를 찾은 후 옆에 차례대로 배열을 하기 시작하는 겁니다. A 카드를 찾아서 옆에 놓고 2 카드를 찾아서 그 옆에 놓고 그 다음엔 3.. 그다음엔 4.. 이런식으로 하나씩 작은 숫자를 찾아서 정렬된 배열을 만들어 나가는 방법입니다. 이런 방법을 선택 정렬이라고 합니다.
1. 선택 정렬 알고리즘 선택 정렬 알고리즘을 서술하면 다음과 같습니다. 우선 int 형의 배열을 정렬하는 것으로 하고 정렬할 대상의 갯수는 n개로 하겠습니다.
* Selection Sort Algorithm
1. i = 0
2. i가 n - 2가 되면 종료
3. 배열의 i항부터 n - 1항까지 조사를 하여 최소값을 저장
4. 저장한 최솟값과 i항과 교환
5. i 를 1 증가시키고 2단계로 돌아간다.
거의 본능적인 알고리즘과 같다고 보시면 됩니다. 그럼 직접 정렬되는 과정을 보면서 설명을 해드리겠습니다. 먼저 정렬될 대상이 되는 문자열은 HACKINDATASTRUCTSTRUCTSTUDY 라는 문자열을 정렬한다고 하겠습니다.
그러면 선택정렬 알고리즘은 다음과 같은 순서로 정렬을 하기 시작 할 것입니다.
21글자를 정렬하는데 21한 단계가 필요함을 볼 수 있습니다.
* 선택정렬의 분석
알고리즘의 분석은 두가지를 주로 분석합니다. 비교 횟수와 교환 횟수가 그것입니다. 선택정렬은 대다수의 시간이 비교 시간에 소요됩니다. i 번째 단계 ( 0 번째 단계에서 n - 1단계 까지 ) 에서는 비교 횟수가 n - 1 번입니다. 풀어서 말하면 n개의 요소를 정렬하는데에 첫번째 단계에는 n - 1 번, 그 다음에는 n - 2 번 ... 뒤에서 2번째에는 2번, 마지막은 1번 비교를 합니다. 1,2,3 ... n-1 을 더하는 공식은 n(n-1)/2이므로 선택정렬은 n(n-1)/2 번의 비교횟수를 갖게 됩니다.
다음으로 교환 횟수인데, 최악의 경우 n 번의 교환을 하게 됩니다 .( 각 단계에서 한번의 교환만 일어나기 때문이죠. ) 최선의 경우는 0번의 교환을 하게 됩니다.
이 처럼 선택정렬의 가장 큰 장점은 최악의 경우와 최선의 경우의 차이가 그리 크지 않다는 점입니다. 시간 복잡도는 O(N * N)을 갖게 됩니다. 또 한 교환 횟수가 적기 때문에 레코드의 크기가 큰 데이터를 정렬 할 때 힘을 발휘 할 수 있습니다.
* 선택정렬의 개선 알고리즘 자체가 굉장히 단순하기 때문에, 개선의 여지는 없지만 For 문으로 이루어진 반복문의 내부를 기계어나 어셈블리어로 작성을 한다면 조금더 빨라 질 수 있습니다.
Vi 에디터를 사용하면서 불편한 점이 굉장히 많았습니다. 그래서 한결 사용하기 편한 VIM 에디터를 우분투에 설치하는 방법을 배워 보도록 하겠습니다.
* VIM 설치
$ sudo apt-get install vim
위 명령어를 입력해 줍니다. 참 쉽죠~~
필요한 패키지를 인터넷이 연결되어 있다면 다운로드 받아서 설치를 하기 시작합니다. 설치가 완료되었으면 vim의 설정을 변경하여 보겠습니다.
* VIM 설정 변경 vim 설정 파일은 /etc/vim/vimrc과 ~/vimrc 에 있습니다. /etc/vim/vimrc 는 글로벌 설정으로 해당 서버를 사용하는 모든 유저에게 설정이 되는 파일이고, ~/vimrc는 해당 디렉토리를 홈 디렉토리로 하는 로컬 유저의 설정이 저장되는 파일입니다.
다음 명령어를 입력하여 몇가지 설정을 바꿔주도록 하겠습니다. ( 이것은 옵션으로 디폴트 값으로 사용하셔도 됩니다. )
$ sudo vi /etc/vim/vimrc
처음 설치가 되었을때에는 옵션이 몇가지 업습니다. 보다 좋은 기능들을 활용하기 위해서 다음과 같은 옵션들 중에 필요한 것만 골라서 적어 넣어주겠습니다. ( vi 사용법을 모르시는 분은 인터넷을 검색하여 보시기 바랍니다. i 를 누르면 입력 모드로 전환이 됩니다. )
set tabstop=4 // "Tab"을 눌렀을 때 4칸으로 이동합니다.
set cindent // "C언어 스타일"의 들여쓰기를 사용합니다.
set autoindent // 자동으로 들여쓰기를 합니다.
set smartindent // 좀 더 똑똑한 들여쓰기 옵션을 사용합니다.
set background=dark // 화면 배경을 Dark로 어둡게 합니다. 이 때 light로 하면 밝아집니다.
set number // 행 번호를 보여줍니다.
set visualbell // 경고음 대신 화면을 번쩍입니다.
set ruler // 화면 우측하단에 (행, 열) 번호를 보여줍니다.
set nowrapscan // 단어 검색시 문서 처음으로 돌아가지 않는다.
set nobackup // 백업을 생성하지 않습니다.
hlsearch // 검색어 강조 기능을 사용합니다.
syntax on // 구문 강조 기능을 사용합니다.
filetype on // 파일 종류에 따른 강조기능을 사용합니다.
저는 다음과 같은 옵션들을 사용하였습니다.
그럼 가장 유명한 프로그램인 "Hello, World" 프로그램을 예제로 작성하여 보겠습니다.
굉장히 알록 달록하게 보입니다. 기존의 vi 에디터는 메모장 처럼 그냥 텍스트만 보여줬지만 vim을 설치하고 몇가지 옵션을 주니 그리 떨어지지 않는 개발 환경이 되었습니다.
텔넷이란 인터넷 상에서 원격 호스트 컴퓨터에 접속 할 수 있는 프로토콜로 쉽게 말해서 다른 컴퓨터에서 여러분의 우분투 서버에 원격으로 접속 할 수 있도록 해주는 프로그램(?)을 말합니다. 텔넷을 사용하면 서버에 연결된 키보드가 아닌 터미널 환경에서 키보드로 명령을 입력하고 시스템을 관리 할 수 있게 됩니다.
먼저 다음의 명령어를 입력합니다.
$ sudo apt-get install xinetd
먼저 여러분의 컴퓨터에 xinetd라는 데몬을 설치 할 것입니다. 이 데몬은 eXtended InterNET Daemon의 약자로 인터넷 기반의 연결을 관리해주는 역할을 합니다. 자세한 내용은 위키피디아를 참조하시기 바랍니다.
xinetd가 설치 되었으면 다음 명령어를 입력합니다.
$ sudo apt-get install telnetd
이제 xinetd에 관한 설정을 바꿔주겠습니다. 다음 명령어를 입력합니다.
$ vi /etc/xinetd.conf
vi 에디터를 이용해서 xinetd의 설정파일을 열었습니다. 이제 설정파일에 다음의 내용을 추가해 주도록 하겠습니다.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
자 이제 xinetd의 설정이 바뀌었습니다. 설정을 바꿨으니 적용이 되도록 xinetd를 재시작 해 주도록 하겠습니다. 다음의 명령어를 입력합니다.
$ sudo /etc/init.d/xinetd restart
이제 텔넷이 설치 되었습니다. [시작] -> [실행] 에서 다음과 같은 형식으로 입력하면 텔넷을 이용해서 접속을 할 수 있습니다.
해킹에는 두 가지가 있습니다. Local 해킹과 Remote 해킹입니다. Local 해킹은 해킹하고자 하는 서버에 루트( root ) 권한이 아닌 일반 계정을 가지고 있을 때, root 권한을 얻으려고 시도 하는 것을 말합니다. 반면 Remot 해킹은 자신이 해킹하고자 하는 서버에 아이디가 없을 때, 아이디를 얻고자 시도하는 것을 말합니다.
이 중에서 가장 중요하다고 할 수 있는 것이 Local 해킹입니다. root 권한을 얻은 순간 여러분은 해당 시스템을 손에 넣은 것이 됩니다. 즉, 해킹이란 정상적인 방법이 아닌 방법으로 root 권한을 얻는 것을 말합니다.
SetUID 라는 개념이 여기에서 등장합니다. 지난번 트레이닝의 마지막에 물음표를 남겼었습니다. 분명 비밀번호를 관리하는 shadow라는 파일은 root 계정에게만 읽기 권한이 있었습니다. 하지만 만일 내가 내 비밀번호를 바꾸려고 시도 할 때 어떤 일이 발생 할 까요? 권한이 root에게만 있기 때문에 root가 아닌 나는 나의 비밀번호를 바꿀 수 없게 됩니다. 하지만 실제 시스템에서는 내가 내 비밀번호를 바꿀 수가 있습니다. 어떻게 된 일까요?
여기에서 SetUID의 필요성이 나타납니다. SetUID는 일시적으로 자신의 ID를 바꾸는 것을 의미합니다. shadow에 접근하기 위해서 일시적으로 UID를 root로 바꾸는 것을 허용해야 합니다. 이를 이용해서 해킹을 시도 할 수 있습니다.
이런 SetUID가 없다면 root는 매우 바빠져야 할 것입니다. 패스워드를 바꾸고자 하는 유저가 많을 때, SetUID를 사용하지 않다면 root는 매번 해당 유저의 패스워드를 바꿔줘야 하는 일이 발생합니다. 이러한 SetUID는 shadow 파일에만 걸리는 것이 아닙니다. 리눅스의 여러 파일들이 이런 SetUID를 가지고 있습니다. 일반 유저가 이러한 파일을 다루면서 잠시 SetUID를 빌리고 어떠한 버그를 이용해서 SetUID를 유지, 즉 root권한을 획득하게 되면 시스템은 여러분의 것이 됩니다.
이런 버그에는 "버퍼오버플로우", "포맷 스트링 어택", "링크 버그" 등이 있다고 합니다.
그럼 수 많은 리눅스 파일중에 SetUID가 걸려있는 파일은 어떻게 찾을까요?
$ ls -al /usr/bin/passwd
위 명령어를 입력해보면, /usr/bin/passwd 에 대한 권한 정보들이 나옵니다. 그 중에 익숙하지 않은 것이 있습니다. 바로 "S"라는 글자입니다. 바로 이 녀석이 SetUID를 의미하는 문자입니다. s가 유저의 실행부분에 걸려있기 때문에 다음과 같이 해석 할 수 있습니다. "모든 유저는 이 파일을 실행 할 때, SetUID를 이용해서 root의 권한을 얻게 된다. "
$ find / -perm -4000
위 명령어의 의미는 "/" 폴더의 하위 폴더에서 -perm 퍼미션에 SetUID가 있는 파일을 찾아라" 라는 뜻입니다.
-perm 퍼미션과 일치하는 파일을 찾는다. -name 이름과 일치하는 파일을 찾는다. -user 유저와 일치하는 파일을 찾는다. -group 그룹과 일치하는 파일을 찾는다.
이런 것들을 이용해서 여러분은 root권한을 얻으려고 노력할 것입니다. 이제 과정은 없습니다. 여러분이 배우는 하나하나가 여러분의 해킹 기술에 피와 살이 될 것입니다. 해커의 세계에 오신것을 환영합니다. 앞으로 레벨을 높여서 엘리트 해커가 되어 봅시다. !!
이번 시간에는 리눅스의 권한에 대해서 배워 보았습니다. 리눅스는 여러 유저들이 동시에 서버에 접속해서 자신이 할 일을 하는 운영체제입니다. 한 유저의 파일과 정보를 다른 유저로부터 보호하기 위하여 권한이라는 개념이 등장했습니다. 리눅스를 사용하면서 Permission Denied ( 접근 거부 )라는 메시지를 많이 볼 수 있습니다. 이는 자신에게 권한이 없는 파일에 접근을 했을 때 볼 수 있는 메시지 입니다.
리눅스에는 4가지 사용자 분류가 있습니다. 1) 유저 : 로그인한 사용자 각각을 의미합니다. 2) 그룹 : 한명 이상의 유저는 비슷한 유저들끼리 그룹을 형성 할 수 있습니다. 예를 들어 ABC라는 동아리 회원들은 각각 유저이면서 ABC라는 그룹원이 됩니다. 3) 아더 : 유저와 그룹을 제외한 다른 사람들을 의미합니다. 4) 루트 : 루트는 시스템의 관리자로 모든 권한을 갖습니다. 모든 파일과 정보를 접근할 수 있습니다.
여러분의 등록정보를 볼 수 있는 명령어가 있습니다.
$ id
이 명령어를 입력하면 여러분의 uid와 gid 등 계정에 대한 정보들을 볼 수 있습니다. id 명령으로 알 수 있는 정보들을 나열하면,
uid : 유저 아이디; 유저를 식별하는 번호입니다. 컴퓨터는 문자열보다는 숫자를 더 좋아하기 때문에 사용합니다. gid : 그룹 아이디; 유저가 포함되어 있는 그룹의 식별 번호입니다. groups : 그룹 ; 자신이 포함되어 있는 그룹입니다.
리눅스 시스템에서는 각 파일마다 권한을 등록 할 수 있습니다. 그럼 각 파일들의 권한을 볼 수 있는 명령어는 무엇일까요? 이미 알고 있듯이 "ls"명령어입니다.
$ ls -al 파일이름
위 명령어를 입력하면 해당 파일에 대한 상세한 정보가 나오고, 해당 파일의 정보중에 권한에 관련된 정보가 있습니다.
맨 처음 표시되는 rwxrwxrwx가 바로 권한을 나타내는 정보입니다. r은 읽기 권한이고 w는 쓰기 권한, x는 실행권한을 나타냅니다.
다시 보시면 rwx가 세번 반복되는 것을 볼 수 있습니다. 첫번째 rwx는 유저의 권한, 그룹의 권한, 아더의 권한을 나타냅니다. 파일마다 소유한 유저와 그룹이 존재한다는 것을 유추해 낼 수 있습니다.
해당 파일을 소유한 유저는 trainer9라는 부분에 나타나고, 그룹은 trainer10이라는 부분에 나타납니다.
$ ls -al /etc/shadow
위 명령어를 입력해서 shadow 파일에 대한 정보를 보도록 하겠습니다. shadow 파일은 사용자의 비밀번호를 저장해 놓는 파일입니다.
권한을 보면 유저 권한에 읽기 권한만 지정이 되어 있는 것을 알 수 있습니다. 이 파일의 유저는 root입니다. 즉, 이 파일은 root만 읽기 권한을 갖고 있습니다. 여기서 의문점은 비밀번호를 교체 할 때 권한 설정은 어떻게 되는 것일까요? 이 물음의 해답이 바로 해킹의 출발점입니다. 곰곰히 생각해 보시기 바랍니다.
이번 시간에는 리눅스 환경에서 C언어 프로그래밍을 하는 법에 대해서 알아 보았습니다. C언어를 이용한 프로그래밍에는 여러 단계가 필요합니다.
첫 번째 단계는 텍스트 에디터를 이용해서 원시코드를 작성하는 단계입니다. 여러분이 흔히 보는 C언어 소스들이 이에 해당합니다. 윈도우 환경에서는 NotePad, EditPlus 등의 텍스트 에디터나 Turbo C, Visual Studio 등의 IDE(Integrated Development Environment )에서 제공하는 텍스트 에디터를 사용했습니다. 리눅스 환경에서 가장 많이 사용하는 에디터는 vi 에디터와 그 업그레이드 버젼이라고 할 수 있는 vim 에디터가 있습니다.
여기에서는 cat 과 리디렉션을 이용한 텍스트 파일을 만드는 방법을 사용하도록 하겠습니다. 리디렉션이란 “방향을 바꾼다.”라는 의미입니다. Cat 명령어는 파일의 내용은 터미널이나 콘솔로 출력하는, 즉 모니터로 출력해주는 명령어입니다. 하지만 리디렉션을 이용하여 출력 내용을 모니터가 아닌 파일로 저장 할 수가 있습니다.
$ cat > test.txt
위 명령어를 입력하게 되면, 일단 커서가 깜빡이며 입력을 대기 하게 됩니다. 내용을 입력해 넣고 마지막으로 [Ctrl] + D 를 누르면 내용이 test.txt 라는 파일로 저장이 됩니다. 이 때, 중요한 특성이 있습니다. 리디렉션 명령어 “>”는 무조건 덮어쓰기 모드로 동작을 하게 됩니다. 즉, 위 명령어를 입력하면 기존에 있던 test.txt 파일에 덮어 쓰게 되어 이전에 있던 내용은 모두 지워지게 됩니다. 이어쓰기 모드로 리디렉션을 하기 위해서는 “>>”을 이용하면 됩니다. “>>”을 이용하면 기존에 있던 내용의 끝에서부터 이어 쓰기를 시작합니다. ( 즉, EOF 위치부터 내용이 추가 되기 시작합니다. )
다음과 같은 명령어를 쳐서 C언어 프로그램을 만듭니다. ( 사실은 원시 소스코드를 만드는 것입니다. )
$ cat > program.c int main(){ int a=10.b=20; printf("10+20=%d",a+b);}
위 소스코드를 입력하신뒤 [Ctrl] + D 를 누르시면 화면에 출력되어야 할 내용들이 파일로 저장이 되어 C 파일을 만들었을 겁니다. ( 직접 ls 명령어를 사용하여 확인하셔도 됩니다. ) C언어를 배우신 분이나 프로그래밍 경험이 있으신 분이라면 쉽게 이해를 할 수 있는 소스코드입니다. ( 10과 20을 더하는 프로그램입니다. )
이제 이 소스 파일을 목적 파일로 컴파일 해 보도록 하겠습니다. 소스파일을 목적 파일로 컴파일 하는 명령어는 다음과 같습니다.
$ gcc -o 생성될파일 원시소스파일
[생성 될 파일에는 컴파일 후 생성될 목적파일( 실행파일 )의 경로와 이름을 지정해 주시면 되고, 원시소스파일은 컴파일이 될 파일의 경로를 적어주시면됩니다. 위에서는 program.c가 되겠습니다. ]
gcc -o program.exe program.c 를 입력하여 위에서 작성한 소스파일인 program.c 를 목적 파일 program.exe로 컴파일 하도록 합니다. 아무런 추가 메시지가 뜨지 않는다면 컴파일은 성공적으로 끝난 것이 됩니다. ls를 사용하여 파일이 생성되었는지 확인합니다.
마지막으로 컴파일 한 파일을 실행하는 연습을 해 보도록하겠습니다. 이에는 상대경로와 절대 경로를 이용하는 방법 2가지가 있는데, 일단 절대 경로를 이용한 실행 방법은 만들어진 파일의 절대 경로를 입력하면 됩니다. 예를 들면 /home/trainer8/program.exe 를 입력하면 해당 파일이 실행됩니다.
두번째로 상대경로를 이용한 실행 방법입니다. gcc를 이용하여 컴파일을 하는 경우는 대부분 현재 폴더에 컴파일 결과를 저장하게 됩니다. 현재 폴더에 있는 파일을 실행하기 위해서는 "./파일이름"을 입력하면됩니다. 위의 경우에는 ./program.exe 를 입력하면 됩니다. 이 때, "/"앞의 "."은 "현재"라는 의미입니다. 즉 ./program.exe는 현재 폴더의 program.exe 라는 의미입니다.
리눅스에서 C언어를 이용하여 프로그래밍하고 컴파일하는 기초적인 방법에 대해서 배웠습니다. 앞으로 리눅스 환경에서 프로그래밍 경험을 많이 쌓아야 겠다는 생각이 드는 트레이닝이었습니다.
C언어의 기능 중에 조건부 컴파일이라는 기능이 있습니다. 그 이름에서 알 수 있듯이 어떤 조건을 만족 시키면 컴파일을 하고, 만족하지 않으면 무시해버리는 기능입니다. 이때 사용하는 지시자에는 #if, #elif, #else, #endif, #ifdef, #ifndef 등이 있습니다.
형식은 다음과 같습니다.
#if 수식1 실행 코드1
#elif 수식2 실행 코드2 . . . # else 실행 코드 n
#endif
형식이 C언어의 if 문의 사용법과 같습니다. 해당 if 문이나 elif 문의 수식이 참이라면 해당 실행코드를 컴파일하고 다른 #if 들은 무시해버립니다. ( 일반 if 문과 같은 방식입니다. )
예제를 들어 설명을 해드리겠습니다. 다음과 같은 소스를 컴파일 해보도록 하겠습니다.
이제 저장을 하고 컴파일을 하고 실행을 해보도록 하겠습니다.
CONDITION 을 1로 정의 했기 때문에 #if 조건에 true가 되어 해당 소스 코드가 선택되어 컴파일 된 것을 볼 수 있습니다. 만일 CONDITION을 0으로 정의 했다면 False가 출력이 되었을 겁니다.
다음으로 #ifdef 를 알아보도록 하겠습니다. #ifdef는 "define되었는가"를 조건으로 받는 전처리기입니다. 즉, 해당 매크로가 #define 명령어로 정의되어 있다면 그 부분을 컴파일하고 그렇지 않으면 컴파일 하지 않는 것을 말합니다.
예제를 보도록 하겠습니다. 다음 소스코드를 타이핑하도록 합니다.
이 소스를 컴파일하고 실행해보도록하겠습니다.
위에 #define 을 사용해서 DEFINE 이라는 매크로를 정의했으므로, 해당 소스코드가 컴파일되어 실행이 되게 됩니다.
이번 시간엔 파일의 압축에 대해서 알아봤습니다. tar와 gzip이 그것인데, 리눅스에서는 압축을 할 때, 하나의 파일 밖에 압축하지 못 한다고 합니다. 여러개의 파일을 압축하기 위해서는 압축 할 파일들을 하나의 파일로 묶고, 그 파일을 압축 명령어를 통해서 압축해야 합니다.
tar 명령어는 여러개의 파일을 하나의 파일로 묶어서 관리하는 명령어 입니다.
$ tar cvf 합칠파일 합쳐질파일들 [ tar 명령어는 합쳐질파일들을 합칠파일로 묶어 주는 명령어입니다. cvf는 옵션으로 c : create 새로운 파일을 생성합니다. v : view 압축이 되거나 풀리는 과정을 보여줍니다. f : 파일로 백업을 합니다.
이렇게 하나로 묶인 파일은 .tar 라는 확장자를 갖게 됩니다. ]
$ tar xvf 풀릴파일
[ 풀릴파일을 해당 디렉토리에 풀어 냅니다. ]
이 때, tar는 단지 파일들을 하나로 묶어 줄 뿐 용량의 감소, 즉 압축은 일어나지 않습니다. 오히려 파일정보를 담고 있어야 하기 때문에 용량이 늘어나게 됩니다.
압축을 담당하는 명령어는 gzip이라는 명령어입니다. 윈도우의 winzip과 비슷한 녀석인데, 리눅스 버젼이라고 생각하셔도 됩니다.
$ gzip 파일이름
[선택한 파일을 압축합니다.]
$ gzip -d 파일이름
[선택한 파일을 압축 해제 합니다.]
gzip으로 압축을 하면 .gz 의 확장자를 갖는 파일이 생성됩니다. tar로 파일들을 하나의 파일로 묶고 gzip으로 압축했다면 파일 확장자는 .tar.gz 가 될 것입니다.
오늘 배운 간단한 압축 명령어와 파일을 묶는 명령어는 파일 관리에 많이 사용되고 특히 업데이트를 할 때, 많이 사용되기 때문에 잘 알아두시기 바랍니다.
리눅스에서 모든 정보는 파일로 기록이 됩니다. 가장 중요하다고 할 수 있는 정보인 각 사용자의 비밀번호 정보도 역시 리눅스 어딘가에 파일로 저장이 됩니다. 지난 시간에배웠던 $ cat /etc/passwd 라는 명령어를 기억 하실 겁니다. 이번 단계에서는 그 때 출력 되었던 내용들을 분석해보는 단계입니다.
현기증이 나기 시작합니다. 저 많은 문자들은 도대체 무엇을 의미한단 말일까요? 어지러워 하지 마시기 바랍니다. 저것들이야 말로 유저들의 정보들이니까요. 이제 하나하나 분석해 보도록 하겠습니다.
위의 내용을 잘 살펴 보면, 콜론 ( ‘ : ‘ ) 을 이용해서 7가지 항목들을 구분하고 있습니다. 각각 의미하는 바를 설명해 드리겠습니다.
1. root
- 첫 번째 쓰여 있는 항목은 사용자의 아이디입니다. 리눅스 시스템에 처음 로그인을 할 때, 아이디를 적고 비밀번호를 적는데, 그 때 사용하는 아이디를 말합니다.
2. x
- 두 번째 쓰여 있는 항목은 해당 사용자의 비밀번호를 말합니다. 하지만 대부분 암호화가 되어 있어 그대로 사용하면 효과가 없는 문자열입니다. 하지만 해커들은 그 암호를 풀기 때문에 더 강화된 보안 수준을 위해서 비밀번호들만을 따로 떼어서 /etc/shadow 라는 파일로 만들어서 관리를 하게 됩니다. 이 파일은 root 계정만 접근을 할 수 있습니다.
3. 0
- 세 번째 쓰여 있는 항목은 해당 사용자의 사용자 번호를 말합니다. 컴퓨터 시스템은 문자열 보다는 숫자에 더욱 빠르게 반응합니다. Sky0123, kin345 등과 같은 문자열 보다는 1( 1번 사용자), 2(2번 사용자)와 같이 사용자에게 고유의 번호를 할당해서 관리하는게 더 효율적일 수가 있습니다. 세 번째 필드는 바로 그 사용자 번호를 말합니다.
4. 0
- 세 번째에 이어서 네 번째도 0 이라는 숫자가 있습니다. 리눅스 시스템에는 사용자와 함께 그룹이라는 개념이 있습니다. 나중에 배우겠지만 각 사용자는 어떤 그룹에 속해 있습니다. ( 기본적으로 자기 자신과 같은 이름의 그룹에 속하게 됩니다. ) 그 그룹들을 구별하기 위해서 사용되는 필드입니다.
5. Admin
- 5번째 필드는 해당 사용자의 이름입니다. 특별히 지정을 해주지 않으면 채워지지 않습니다. 로그 인에 사용되는 ID와는 다른 내용입니다.
6. /root
- 6번째 필드는 해당아이디의 홈 디렉토리를 말합니다. 홈 디렉토리란 로그인에 성공했을 때, 시작하게 되는 일종의 바탕화면과 같은 개념의 디렉토리입니다.
7. /bin/bash
- 7번째 필드는 해당아이디가 로그인에 성공하게 되면 실행되는 프로그램을 말합니다. 주로 쉘 프로그램이 됩니다.
앞으로 배워감에 따라서 이 같이 어지러운 파일들을 많이 보게 됩니다. 어지러워 하지 마시고 차근차근 분석하는 습관을 기르시기 바랍니다. 이 정도에 어지러워 하면 나중에 멀미합니다 ;;;
해킹이란 무엇일까요? 해킹의 주요한 목적중에 하나가 바로 정보를 빼내는 것입니다. 공격할 서버의 정보를 수집하여 취약점을 찾아내고 그 곳을 공격하는게 순서일텐데요. 여러분이 접속해 있는 서버의 정보들을 알아내는 명령어들을 배워보도록 하겠습니다.
$ whoami [ 직역하면 "나는 누구인가?" 정도가 되겠네요. 현재 서버가 알고 있는 여러분의 정보를 알려줍니다.]
$id [ 더 자세한 여러분의 정보를 알려줍니다. ]
다음으로는 궁극의 다른 유저 비밀번호 알아내는 명령어를 배워보도록 하겠습니다. 물론 실제 운영체제에서는 접근 권한이 없기 때문에 열수는 없습니다만 해킹에 성공하여 root 권한을 얻고 나면 이 명령어를 실행해서 비밀 번호를 알아 낼 수 있습니다.
$ cat /etc/passwd [ cat 명령어는 파일이름을 받아서 화면에 내용을 출력해주는 명령어입니다. 위 명령어에서는 /etc/passwd라는 파일의 내용을 출력해주는데, 이 파일이 이 시스템에 있는 유저들의 비밀번호가 저장되어있는 파일입니다.]
나머지 명령어들도 알아보도록 하겠습니다.
$ uname -a [ 현재 접속해있는 서버의 커널 버젼을 말해줍니다. 인터넷 커뮤니티에는 리눅스 커널 버젼에 따른 취약점이 배포되어 있습니다. 운이 좋게도 해당 시스템이 구버젼의 커널을 사용하고 그 취약점이 알려져 있다면 생각보다 손쉽게 시스템에 침투 할 수 있습니다. ]
$ cat /etc/*release [ 리눅스는 많은 버젼들이 있습니다. 우분투 리눅스도 있고, 레드햇 리눅스도 있고 수세, 젠투 등등 많은 리눅스 들이 있는데, 이 서버는 어느 버젼을 사용하고 있는지 말해줍니다. ]
$ rpm -qa [ 레드햇 계열의 리눅스에서 설치되어 있는 패키들의 정보를 알아낼수 있는 명령어 입니다. 이 정보들을 보고 해킹이 가능한지 여부에 대해서 알 수 있다고 합니다. ]
$ cat /etc/cpuinfo
[ 현재 서버의 CPU 정보를 나타냅니다. ]
이렇게 타겟 서버에 대한 정보를 획득하는 명령어들을 배웠습니다. 물론 많은 수의 정보들은 여러분으로부터 은폐되어 있습니다. 대부분 root 권한을 얻어야 볼 수 있는 것들입니다. 여러분의 리눅스에서 실습해 보시기 바랍니다.
리눅스를 조금이라도 만져보신 분들이라면 루트 디렉토리 아래에 많은 디렉토리들이 있는 것을 보셨을 겁니다. 각각 디렉토리들은 고유의 역할이 있고, 중요한 디렉토리들입니다. 해커가 되기 위해서는 이런 디렉토리들을 빠삭하게 알고 있어야 겠죠. 이번 트레이닝에서는 중요한 몇개의 디렉토리만을 알아보도록 합니다.
bin : 기본적인 명령어들이 존재하는 디렉토리입니다. 앞서 배웠던 ls, rm 등의 명령어의 내용이 저장되어 있습니다.
boot: 리눅스를 부팅시키기 위한 프로그램들과 운영체제의 핵심인 커널이 들어 있는 디렉토리입니다.
dev : 리눅스에 부착되어 실행되고 있는 하드웨어들의 정보들이 저장되어 있는 곳입니다.
etc : 리눅스에 설치되어 있는 프로그램들의 설정파일이나 리눅스 자체의 설정파일들이 들어있습니다. 비밀번호라든지 유저 정보들도 들어있는 중요한 디렉토리입니다.
home : 일반적인 유저들이 기본 위치가 저장되어 있는 디렉토리입니다.
lib : 라이브러리 파일들이 존재하는 디렉토리입니다.
mnt : mount 명령어를 통해서 마운트 시킨 하드웨어가 저장되는 곳입니다.
proc : 프로세스들이 파일의 형태로 저장되는 곳입니다.
root: 최종 관리자인 root의 홈 디렉토리입니다.
sbin : 기본 명령어들을 제외한 시스템 관리 명령어들이 저장되는 곳입니다.
tmp: 임시 파일을 저장하는 디렉토리로 누구나 접근이 가능한 디렉토리입니다.
usr: 많은 응용프로그램들이 저장되는 장소입니다.
var : 프로세스가 실행되는 동안 생성되는 임시 파일들이 저장되는 곳이며 운영체제의 로그파일이 저장되는 곳이기도 합니다.
이번 과정은 그냥 암기 과정이었습니다. 하지만 기본적인 암기이기 때문에 반드시 외워야 하는 것들입니다. 제가 다니는 대학교 과정 리눅스/유닉스 수업에서도 디렉토리의 역할에 대한 문제를 시험문제로 냈었습니다. 반드시 외우고 다니시기 바랍니다.
Trainer3 에서는 좀 더 재미있는 명령어를 배우게 됩니다. 바로 네트워크 명령어 인데요. 대부분 리눅스들은 서버 컴퓨터에 설치가 되고 다수의 유저가 접속해서 사용하게 됩니다. 즉, 네트워크의 개념을 포함하게 되는데요. 이 네트워크를 이용한 재미있는 명령어를 배우게 됩니다.
새로 배우는 개념이 두가지 있습니다. 바로 콘솔과 터미널이라는 용어인데요. C언어를 이용해서 프로그래밍을 해 보신 분들이라면 콘솔이라는 단어에 익숙하실 겁니다.
콘솔( Console ) Local Computer에 Linux나 Unix 등의 OS를 설치하고 그 OS에 접속했을때 "콘솔을 통해 접속했다."라고 함
터미널( Terminal ) Remote Computer에 설치되어 있는 Linux나 Unix같은 OS에 원격 접속을 했을때 "터미널을 통해 접속했다." 라고 함
다음으로 현재 서버에 어떤 유저들이 접속해 있는지를 볼 수 있는 명령어입니다.
$ w [ 현재 어떤 유저들이 서버에 접속해 있는가를 나타내는 명령어]
USER : 어떤 ID를 가진 유저가 로그인 상태에 있는지 나타냅니다. TTY : 해당 유저가 콘솔을 통해 접속했는지, 터미널을 통해 접속했는지 나타냅니다. 콘솔이라면 tty로 터미널이라면 pts로 표현되며 터미널을 통해 접속한 유저가 많으면 순서대로 "/번호" 가 붙어 구별할 수 있습니다. FROM : 해당 유저가 접속한 컴퓨터의 IP주소를 나타냅니다. LOGIN : 해당 유저가 로그인한 시간을 나타냅니다. IDLE : 해당 유저가 마지막 명령을 내린뒤 흐른 시간입니다. JCPU : 각 유저가 CPU를 사용한 지연 시간을 말합니다. PCPU : WHAT 필드에 있는 명령이 지연된 시간을 말합니다. WHAT : 현재 사용자가 어떤 형태의 명령을 내리는지 말합니다.
사용자의 정보를 볼 수 있는 명령어도 있습니다. finger 명령어가 그것인데, 원격에서 많은 유저의 정보를 볼 수 있기 때문에 보안상 골칫거리가 될 수도 있다고 하네요. 삭제하는 것이 바람직하다고 하는데 지금은 배우는 단계이기 때문에 사용해 봅니다.
$ finger 사용자 ID [ 해당 유저에 대한 정보를 보여줌, -l 옵션을 이용해서 상세 정보를 볼 수 있음]
자신의 터미널을 확인하는 명령어도 있습니다. 동시에 여러명의 유저가 터미널에 접속하게 되면 순서대로 번호가 부여가 되는데, 자신이 몇번인지 알아볼때 유용합니다.
$ tty [현재 자신의 터미널 정보를 보여주는 명령어]
물론 접속한 서버의 네트워크 상태를 볼 수 있는 명령어도 있습니다. 서버의 ip주소를 알수 있습니다. MS-DOS의 ipconfig 명령어와 유사합니다.
$ ifconfig [서버의 ip정보를 알 수 있다.]
서버에 동시간대에 접속해 있는 유저에 대해서 알게 되었으니 이제 그 유저에게 메시지를 보내는 명령어를 배웁니다.
$ write ID /dev/pts/해당유저의pts번호 [ 해당 ID의 유저와 채팅을 합니다.]
다음으로 서버에 접속해 있는 모든 유저에게 메시지를 전달하는 이른바 브로드캐스팅 명령어에 대해서 배웁니다.
$ wall 메시지 [ 메시지에 해당되는 문자열을 해당 서버에 접속해 있는 모든 유저에게 보낸다 ]
자 이번 레벨도 마무리를 지었습니다. 역시 복습은 잊지 마시구요.. 다음으로 넘어가도록 하겠습니다.
해커스쿨이라는 사이트에서 해킹 연습을 시작하시려는 분들에게 여러가지 문제를 주고 있네요. FTZ( Free Tranning Zone )이라는 서비스를 하면서 해킹의 기본기들을 익힐 수 있습니다. 해커스쿨 FTZ에 접속하는 방법을 알려드리겠습니다. 저는 텔넷을 이용해서 FTZ에 접속을 하겠습니다.
[시작]->[실행]을 해서 다음을 입력합니다.
telnet ftz.hackerschool.org
그러면 이제 FTZ에 접속이 되었습니다.
이제 글을 잘 읽어 보시고 FTZ를 수료하시기 바랍니다. 저도 하나하나 수료해 나가면서 포스팅을 하겠습니다.
나중에 크래커 vs 크래커 라는 주제로 다른 포스팅을 한번 할텐데요. 해커레벨이 어떻고, 크래커와 다르고 어떻고를 떠나서 한 시스템에 허락받지 않고 침투하는 건 똑같지 않을까요? 다만 의도가 White하냐 Black하냐에 따라서 분류를 하는것일 뿐이겠지요.
해커가 되기위해서는 범법의 경계를 아슬아슬하게 넘나 들어야만 하는 것 같습니다.
워렌버핏을 아십니까? 워렌버핏이라고하면 "투자의 귀재", "세계 2위부자" 라는 수식어가 항상 따라다닙니다. 부자가 되고 싶어하는 많은 사람들이 그의 습관과 가치관을 배우기 위하여 그에 대해 기술한 책들을 보고 그의 투자를 벤치마킹합니다.
투자란 무엇일까요? 사람들은 저마다의 자원, 혹은 밑천을 가지고 태어납니다. 부모에게 물려받은 우수한 유전자로 머리가 좋을 수도 있고, 잘 생긴 얼굴을 갖고 태어날 수도 있으며, 부
모가 일구어 놓은 재산을 가지고 태어날 수도 있고, 어쩌면 하늘이 돕는 행운을 가지고 태어 날 수도 있고, 가장 중요한 "노력"이라는 것을 가지고 태어날 수도 있습니다. 투자란 이런 자원들을 적재적소에 할당하고 배치시키는 것을 말합니다. 단돈 100달러로 주식투자에 입문해서 연간 매출액 400억 달러에 이르는 투자회사를 운영하고 있는 훌륭한 투자가로 성공한 워렌버핏에게 부자가 되는 방법 몇가지를 배워 보겠습니다.
자기 자신을 행운아라고 생각한다. 세상이 뜻 대로 되지 않으십니까? 마음 대로 되는 일이 없어서 불행하다고 생각하십니까? 모든 것을 포기하고 싶습니까? 그런 맘이 들때마다 한숨 돌리고 주변을 돌아보시기 바랍니다. 세상에는 나보다 좋은 환경에 사는 사람도 있지만 나보다 안 좋은 환경에 사는 사람들도 많이 있습니다. 사실 두손 두발 멀쩡하게 태어난 것도 엄청난 행운이며, 세상의 빛을 본것도 엄청난 행운입니다. (수천만마리의 정자 중에 선택된 하나의 정자가 바로 우리 들입니다 .) 특히 버핏이 태어난 시기는 그 유명한 대공황 직후의 시기였습니다. 먹고 살기 어려워서 아이를 갖기를 꺼려했는데 그 중에서 태어난 것입니다.
흔히 성공하는 사람들의 성격 중에 대표적인 것이 "긍정적"이라는 것입니다. 현재 주변 환경들을 비관적으로 쳐다 보지말고 긍정적으로 보는 자세야 말로 성공을 위해서 꼭 필요한 것이 아닌가 합니다.
"The [banks] are a toad, and they think we're a princess..." by Esthr
좋아하는 일, 하고 싶은 일에 최선을 다한다.세상에서 가장 행복한 사람은 바로 하고 싶은 일을 하고 사는 사람이 아닐까 생각합니다. 그 정도로 현실과 이상사이의 차이는 큽니다. 워렌버핏은 돈버는 일을 좋아 했습니다. 어려서부터 콜라캔의 가격차이를 가지고 장사를 했고, 그렇게 모은 돈으로 핀볼게임기를 사서 이발소에 설치해 돈을 벌기도 하는 등, 사업을 하고 싶어 했고, 돈 버는 일을 좋아 했습니다. 어짜피 고수의 길에 들어서게 되면 자신이 하고 싶은일, 좋아하는 일이 아니라면 최고의 자리에 오르기가 힘이 듭니다. 어린 분들이라면 자기가 좋아하는 일이 무엇인지 정확히 파악하는데 주력을 하시고, 나이가 있으신 분들이라면 지금 하시는 일을 좀 더 즐겁게, 즐기면서 하는게 정답이 아닐까 생각합니다.
다른 사람의 좋은 습관을 자기 것으로 만든다.벤치마킹이라는 것이 있습니다. 성공한 사람이나 주변에서 좋은 평을 듣고 있는 사람들의 습관들을 연구해서 따라해 보는 것도 하나의 방법입니다. 친구들에게서 인기가 많은 친구들을 잘 관찰하여, 장점 목록이나 부러운점들을 목록으로 만들어 봅니다. 만일 친구의 말 솜씨가 장점이고 부럽다면, 그 친구의 말투를 따라 해 보는 것도 좋은 방법입니다.
주변에 장점을 가진 친구가 없다면, 단점을 가진 친구를 관찰해 보는 것도 좋은 방법입니다. 말을 좀 가볍게 내 뱉는 ( 소위 싸가지 없다는.. ) 친구가 있다면, 어느 순간에 그 친구가 어떤 말을 해서 기분이 나빳는지를 기억해서 여러분들이 그 상황에 있을 때는 그런 말을 안 하는 식으로 벤치마킹을 하면 됩니다. ( 타산지석 이라고도 하죠. )
1달러 우습게 보지 말라. 워렌버핏 뿐만아니라 많은 부자들을 보면 굉장히 검소한 생활을 하고 있음을 볼 수 있습니다. 물론 평범한 서민들보다는 훨씬 많은 지출을 하고 있지만, 그 지출내역은 상당히 계획적입니다. 일반 사람들이 무심코 쓰게 되는 천원 한장도 부자는 꼼꼼하게 체크를 하고 계획적으로 사용합니다.
또한 돈에 대한 욕심도 일반인보다 훨씬 강합니다. 길거리에 100원짜리가 떨어져 있을 때, 그 동전을 줍는 사람은 일반인이 더 많을 까요? 아니면 부자가 더 많을 까요? 사람에 따라 다르겠지만 대부분의 부자들은 길거리에 떨어져 있는 100원짜리 동전을 보면 주워 가져 갑니다. ( 자수성가한 사람들을 보면 말이죠. )
단돈 천원이 얼마 안되는 돈이라고 생각 할 수 있지만 천원은 천원 그 이상의 의미를 담고 있는 것이 아닐까요? 돈에 대한 기본적인 태도를 볼 수 있습니다.
때가 올 때까지 참고 기다린다.워렌버핏은 가치투자의 대명사입니다. 데이트레이딩이라는 말이 있습니다. 주식 거래를 할 때, 하루에도 몇 번씩 거래를 하는 방식입니다. 빨리빨리를 외치는 한국인들에게는 익숙한 거래 방식일지도 모릅니다. 하지만 워렌버핏은 철저하게 분석하여 신중하게 결정을 내리고 한번 투자하면 몇년이고 묵혀둡니다.
이는 비단 주식투자에만 한정되지는 않을 것입니다. 많은 사람들이 "기다림"에 너무 인색한 경향이 있습니다. 시험을 볼 때도 당장 성적이 안오르면 조바심을 내고 안절부절 못 합니다. 성공의 길, 부자의 길 중 하나는 인내심이 아닐까요?
워렌버핏에게서 배울점은 너무나도 많이 있는 것 같습니다. 그는 매우 검소한 생활을 하고 있었으며, 전 재산의 대부분을 자선 단체에 기부를 하기도 했습니다. 부자가 되고 싶으신 분들이라면 워렌 버핏을 연구해 보는 것도 좋겠습니다.
성공하고 싶은 많은 사람들은 자기계발 서적, 성공학 강의, 다큐멘터리 등을 많이 보면서 성공하는 "방법"을 배우고자 합니다. 실제로 성공학 강의나 성공에 관한 서적이 베스트 셀러에 오르는 모습을 보면 이러한 사실을 잘 알 수 있습니다. 특히 IMF 이후 완전한 무한 경쟁 시대에 접어 들게 되면서, 자기 계발이라는 단어가 많은 사람들의 가슴속에 자리매김 하면서 이런 현상은 점점 가속화하고 있습니다.
하지만 성공학 강의를 하는 사람들이 꼭 사회적으로 성공한 것은 아닙니다. 성공하는 방법에 대해서 잘 알고 있는 사람들이 실제로 성공하지 못 하는 경우가 비일비재합니다. 왜 이런 현상이 나타나는 것일까요? 성공에 대해서 누구보다 많이 연구하고, 공부하는 사람들이 오히려 성공하지 못 하는 것은 왜 일까요?
그런 부류의 사람들은 성공을 하기 위한 대부분의 방법론적인 지식은 많이 알고 있습니다. 하지만 가장 중요한 것을 하지 않고 있습니다. 바로 "행동"입니다. 머리 속으로만 존재하는 성공은 의미가 없습니다. "부뚜막의 소금도 넣어야 짜다"라는 속담이 있습니다. 성공에 대한 많은 것을 알고 있지만 정작 가장 중요하고, 가장 힘든 행동을 하지 않는다면 말짱 도루묵이 되고 맙니다.
故 정주영 회장님
故 정주영 회장님의 유명한 말씀이 있습니다. "해보기나 했어?" 그렇습니다. 우리는 성공에 대한 많은 것을 알고 있습니다. 어떻게 해야 하는 지는 잘 알고 있습니다. 하지만 어떻게 하지를 않습니다.
엘리트를 논할 때 항상 등장하는게 1%라는 숫자 입니다. 그 만큼 우리에게 1%는 되기를 원하고 많은 사람들이 목표로 두고 있는 대상입니다. 이 책은 1%가 되는 법에 대한 책이라기 보다는 "성공한 사람들과 평범한 사람들 사이에는 1%의 차이 밖에 없다."라는 의미를 담고 있습니다.
이 책은 7 가지 챕터로 구성되어 있습니다.
1. 준비 : 미래의 고수여 성공을 준비하라. 2. 이상 : 꿈꾸는 자의 꿈은 이미 현실이다. 3. 전문성 : 잘하는 것에 몰입하라.
4. 역경 : 광야로 나가 눈비를 맞아라. 5. 성실 : 지름길은 없다. 6. 스타일 : 대중과 함께 호흡하라. 7. 노력 : 끝없는 노력으로 고지를 지켜라.
7가지 중에서 몇가지 마음에 와 닿는 구절과 챕터들을 소개해 드리겠습니다. ( 전부 써드리면 저작권 침해에 해당 될 테니 간단히 소개만 해드리는 쪽으로 하겠습니다. )
먼저 준비입니다. 여러분은 어떤 준비를 하고 계신가요? 취업을 앞둔 대학생들은 취업을 준비하기 위해서 어학 점수와 자격증, 학점등을 준비하고, 승진을 준비하는 직장인들은 실적이나 자격증, 대인관계 등을 준비 할 지도 모릅니다. 이렇듯 우리는 어떤 것을 바라고 원하기 때문에 준비라는 작업을 합니다.
하지만 어떤 부류의 사람들은 "운칠기삼"이라는 말을 들먹이면서 준비를 소홀히 합니다. 운칠기삼이란 모든일의 7할은 운에의해서 좌우 된다라는 뜻입니다. 하지만 운이야 어쩔 수 없더라도 3할의 기 정도는 노력으로 가능합니다.
사실 따지고 보면 운칠기삼이라는 말은 안 맞는 것 같습니다. 운은 준비된 사람에게만 찾아 옵니다. 운이 주는 기회는 준비된 사람만이 잡을 수 있으며, 준비가 안 된 사람은 기회가 찾아 왔는지 조차 모르는게 사실입니다. 자신에게 기회가 찾아 왔음에도 알아 차리지 못하고 운칠기삼이니 운명이니를 논하는게 조금은 불쌍해 보이지 않나요? 준비된 자만이 성공을 거두는 것 그것이 진리입니다.
준비 다음으로 중요한 것이 실행입니다. 많은 성공학 강의를 들어보면 ( 이 중에는 유료 강의도 많이 있습니다. ) 혹은 자기 계발이나 성공에 대한 서적을 읽어보면 "아하! 그렇구나" 하고 머리에 와 닿는 내용이 많지는 않습니다. "그런 것들이 성공의 비밀, 성공으로 가는 길이라면 누구나 성공하지"라고 말하는 분이 있습니다. 물론 그것이 전부라면 세상 모든 사람, 적어도 성공학 강의를 들은 사람들은 모두 성공하겠죠.
하지만 성공하는 부류와 그렇지 못한 부류 사이에 가장 큰 차이점은 바로 실행입니다. 성공하는 사람은 성공하는 방법을 공부나 경험을 통해 알아내어 실천을 합니다. 하지만 실패하는 사람은 항상 핑계를 만들어 실천을 하지 않습니다. 실행의 힘, 그것이 바로 여러분을 성공의 길로 인도하는 힘입니다. 실천을 하기 위한 조건에는 세가지가 있습니다.
1. 충분히 준비 할 것
2. 경험을 쌓을 것
3. 절대 포기 하지 않을 것 입니다. 충분히 준비하고 경험을 쌓아서 절대 포기 하지 않을 때, 자신감이 생기며 그러한 자신감이 있어야 일을 실행에 옮길 수 있습니다. 물론 자신감은 실력이 뒷 받침 되어 있을 때, 유지 됩니다. 매사에 겸손하되 실력에 있어서 만큼은 겸손 하면 안 되는 것입니다.
그리고 특기 입니다. 사람마다 적성이 있습니다. 자신이 어떤 것을 잘 하고 어떤 것을 하면서 즐거워 하는 지를 아는 것도 위의 것들 만큼 중요합니다. 한국의 많은 대학생들을 살펴보면 자신의 전공을 적성이 아닌 점수에 맞춰서 정하는 경향이 있습니다. 전공 보다는 학교를 보고 입학을 해서 정작 중요한 학점은 챙기지 못 하는 경우가 비일비재 합니다.
직장을 선택함에 있어서도 마찬가지입니다. 많은 사람들이 그냥 대기업 대기업 하면서 자신의 전공이나 적성과는 관계없는 일을 하곤 합니다. 하지만 이런 일을 한다면 일의 능률이 떨어짐은 물론이고 나아가서는 스트레스만 받게 될 것입니다. 먼저 여러분이 잘 하는 일을 찾길 바랍니다. 만일 여러분이 잘하는 일이 여러분이 즐거워 하는 일이라면 여러분은 성공 할 수 있는 밑 바탕이 되어 있는 것입니다.
많은 사람들이 현재 상황에 불평을 하곤 합니다. 배경이 나빠서 성공을 할 수 없다고 합니다.
일본의 가전업체 마쓰시타 전기산업의 창업자 마쓰시타 고노스케의 말을 인용해 보자면, "나는 하나님이 주신 세가지 은혜 덕분에 크게 성공할 수 있었다. 첫째, 집이 몹시 가난했기 때문에 어릴 적부터 구두닦이나 신문팔이 같은 고생을 했고, 그사이에 세상을 살아가는데 피룡한 많은 경험을 쌓을 수 있었다. 둘째, 태어났을 때부터 몸이 몹시 약해서 항상 운동에 힘써왔기 때문에 늙어서도 건강하게 지낼 수 있었다. 셋째, 초등학교도 못 다녔기 때문에 세상의 모든 사람들을 나의 스승으로 여기고 누구에게나 물어가며 열심히 배우는 일에 게을리 하지 않았다."
중요한 것은 배경도, 환경도 아닙니다. 중요한 것은 바로 여러분 자신인 것입니다.
부자 되고 싶으신가요? 부자가 되고 싶은 분들에게 추천해드리고 싶은 책이 있습니다. 바로 『식객』으로 유명하신 만화가 허영만의 『부자사전』입니다.
우연히 도서 대여점에서 보게 된 얇지 않은 책( 만화책이기 때문에 두께가 어느 정도 있습니다. )으로 평소 부자에 관심이 많던 제 눈을 끌기에 충분한 책이었습니다. 이 책은 만화가 허영만님이 <한국의 부자들>이란 책을 바탕으로 한 만화책입니다. 다른 재태크, 성공, 부자를 다루는 서적과는 달리 만화책이기 때문에 가볍게 볼 수 있는, 하지만 내용면에서는 결코 떨어지지 않는 그런 책입니다. 의 작가 허영만'>
책을 읽으면서 부자와 안부자( 부자가 아닌 사람 혹은 될 수 없는 사람 )를 비교하며, 부자들은 어떤 사고 방식을 가졌는지를 설명해 주는 방식이 맘에 들과 와 닿았습니다. 많은 부분에서 부자가 될 사람과 그렇지 못 할 사람은 다르게 생각 할 수 있었고, 부자가 된 혹은 될 사람들은 그렇게 될 수 밖에 없다는 것을 느끼게 되었습니다.
돈 많이 벌고 싶죠?
특히 "기회"라는 측면에서 전반적으로 부자와 안부자가 갈렸습니다. 부자는 항상 준비하고 있습니다. 기회가 오면 본능적, 혹은 경험에서 얻은 직감으로 알아 차리고 덥석 낚아 챕니다. 하지만 안부자 들은 기회가 오면 그 제서야 부랴부랴 하기 시작해서 준비가 되었을 때는 부자가 이미 낚아 챘거나 절반을 물어간 상태입니다.
시중에는 많은 자기계발, 성공, 재태크 관련 서적이 잘 팔리고 있어, 부자가 되고 싶은 사람들의 마음을 대변해 줍니다. 하지만 여전히 그들은 부자가 되고 있지 못 합니다. 그 차이를 가르는게 바로 "습관"입니다. 우리는 "일찍일어나는 새가 벌레를 더 많이 잡는다."라는 속담을 어렸을 때 부터 지겹도록 들어왔습니다. 부자는 이 속담의 교훈을 습관으로 만들어 꾸준히 지켰을 뿐이라는 걸 이 책은 말해주고 있습니다.
실패가 우리에게 주는 소중한 교훈은 바로 경험이라는 것입니다. 경험이란 어떤 일을 겪으면서 그 사건 이전보다 좀 더 나아지는 것을 말합니다. 부자들은 이런 경험을 축적하여 자신의 것으로 만들었지만 안부자는 이런 사건들을 머리속에만 담아두어 시간이 지나면 없어지게 되어, 습관이라는 형태로 몸에 배지 않습니다.
글쎄요. 그렇게 쉽지는 않지만 부자로 가는 열쇠는 바로 습관이 아닌가.. 이 책을 읽고 느낀 점입니다.
독서 메모
- 중요한건 생각이 아니다. "습관"이다. 1. 겨울이 오기전에 양털을 깎아라.
-> "빚"도 적절히 활용하면 좋은 수단이다. 일종의 배수진을 치는 행위.
2. 주위에 열성팬을 만들어라.
-> 상사, 동료, 후배에게 제대로 "영업"하라. 그렇지 않으면 반드시 값을 치른다.
"덤비는 적은 물리치 되 일부러 적을 만들지 마라."
3. 신용만이 살 길이다.
-> 사업이나 투자 밑천이 없는 사람은 끊임없는 노력으로 기회를 만들 수 있지만 신용이 없는사람은 기회조차 오지 않는다.
4. 끼, 깡, 끈, 꼴, 꿈을 키워라.
-> 끼 : 성실함, 깡 : 원칙 - 못 먹어도 고는 없다, 끈 : 인맥 - 사람이 기회다. , 꼴 : 낙관 - 아흔이 넘으면 자신의 얼굴에 책임을 져야 한다. 꿈 : 강렬한 집착은 "끼"로 현실화 된다.
5. 낙관적인 삶을 살아라.
-> 감정적이지 말고 평상심을 유지하며 살아라. 허황된 눈가린 낙관론은 좋지 않다.
6. 누구에게나 미래는 두렵다.
-> 미래가 두려워 미래를 위해 부를 쌓다.
7. 독불장군 부자는 없다.
->탑을 수직으로 쌓으면 쉽게 무너지지만 피라미드형으로 쌓으면 매우 안정적이다. 여러 사람에게 도움( 의견 ) 을 받되, 너무 의지하는 팔랑귀는 되지 말아야 한다.
8. 부자가 더 큰 부자가 된다.
-> 돈은 먹이 사슬이다. 물과 돈은 반대로 흐른다. 부자는 자본주의의 최종 포식자.
9. 이미 늦었다는 말은 없다.
-> 돈을 찾아 내는 안목 부터 기르자.
1) 돈쓰는 맛 vs 돈 버는 맛
2) 목표를 정하면 집요하게 끝장을 본다. 사자가 먹이를 잡듯이.
10. 월급쟁이 때 부터 사장의 눈높이에 맞춰라.
-> 지금 앞에 놓인 일이 내 일이라고 생각하고 최선을 다하라.
11. 돈버는 공부 삼각함수보다 ㅓ렵다.
-> 명문대생이라도 돈버는 공부는 따로 해야 한다.
12. 돈 자랑을 하지 않는다.
-> 빈수레가 요란하다. 돈자랑하면 돈 쓸일만 늘어난다.
13. 원칙을 칼처럼 적용하라.
-> "줄돈은 늦게 주고 받을 돈은 빨리 받는다. "
14. 한번 온 기회는 절대 놓치지 않는다.
15. 부지런함은 기본
-> 시간 활용을 극대화
16. 무자비함을 배워라
-> 인생은 전쟁이다. ( 시장에서는 법보다 돈이 우선이다. )
17. 큰 손들의 부동산 투자 노하우.
-> 부동산은 투자의 개념이지만, 재산은 아니다. ( 현금화에 어려움 )
18. 거꾸로 생각하라.
-> 전쟁은 영웅을, 위기는 기회를, 불경기는 부자를 만단다.
*경기 보는 법
1) 신문 광고< 책, 점집, 대출, 약 광고가 주를 이루면 불경기>
2) 주식 관망
3) 신문과 경제 신문을 동시에 봐라
19. 투자에 부화뇌동은 없다.
-> 부화 뇌동 : 줏대 없이 남의 의견에 덩달아 같이 행동
-> 원칙에 맡겨라( 원칙은 깨지면서 배운다. )
20. 돈은 머리가 아닌 발로 벌어라.
-> 머리로 시작해서 발로 끝낸다. 아이디어에서 집중하고 추진한다. 움직이다보면 가닥이 하나 보일 것이다.
새삼 많은 것을 느끼게 하는 책이었습니다. 특히 습관의 중요성은 다시 느끼게 되었습니다. 부자가 되고 싶은 여러분들.. 이 책 강력히 추천합니다. 아, 19세 미만에게는 약간 부적절할 수도 있는 유머들이 중간중간 섞여 있지만 교훈은 거기서 오는게 아니기 때문에.. ㅎㅎ
노래방가면 분위기 띄우기에 딱 좋은 노래가 몇 곡있습니다. 그 중에 체리필터의 "오리날다"는 항상 끼는 노래중 하나입니다. 체리필터의 노래 들이 대부분이 흥겹긴 하지만 특히 오리날다는 흥겨운 멜로디와 특이한 가사로 많은 인기를 끌었죠. 라이브 영상을 찾아서 소개해 드립니다.
이전 앨범에서 낭만고양이로 대중들에게 알려지기 시작했던 체리필터의 인기를 다시 한번 확인 시켜줬던 앨범입니다. 낭만고양이의 느낌을 그대로 이어주며, 더욱더 시원한 느낌을 주는 오리날다가 수록되어 있는 이 앨범에는 달빛소년과 같은 색다른 느낌의 곡들도 수록되어 있습니다.
오리날다의 가사는 특히 많은 느낌을 주었는데요. 날수 없는 새인 오리가 날고 싶어하는 모습은 꿈과 희망을 좇는 우리들의 모습과 많이 닮아 있었습니다. 사랑을 노래하는 대세와 달리 꿈과 희망을 노래하며, 뛰어난 가창력을 선보인 체리 필터의 대표적인 곡인 오리날다는 노래방에서도 낭만고양이와 더불어 분위기 띄우는 곡중 하나로 많이 불리고 있습니다.
이번 영상에서 마지막의 가성으로 애드립 하는 부분은 아무나 따라 할 수 없는 체리필터의 보컬인 조유진의 실력을 보여주는 부분이 아닌가 합니다.
대중들이 쉽게 따라 부를 수 있는 멜로디와 흥겨운 리듬등이 더욱더 이 노래를 사랑 받게 만드는 것 같습니다. 크라잉 넛에 이어서 언더에서 부터 성공한 밴드의 대명사인 체리필터의 실력을 느낄 수 있는 라이브 영상이었습니다.
별다른 내용은 아니고 오늘 집에 가는 길에 웃긴 장면이 있어서 얼른 사진을 찍어 본게 있어서 이렇게 포스팅을 합니다.
아마 버스 운행도중 과열 때문에 멈춰 섰다가 다시 회송해 가는 모양입니다. 버스 안에는 손님이 하나도 없었고, 버스가 정류장에 멈춰 서지도 않았습니다.
그런데 좀 위험해 보이는 건 왜일 까요? 운행 도중에 고장이 안나게 조금만 더 신경 써 줬으면 좋겠습니다. 버스를 많이 타고 다니다 보니 이런저런일이 많이 생기는데, 버스가 고장난 적도 있었고, 버스기사 아저씨들 끼리 싸우는 경우도 있었고, 버스 기사 아저씨가 손님에게 막말하는 경우도 있었고, 버스 오래 타다보면 별 꼴을 다보게 되는 것 같습니다.
영어에서 가장 중요한 요소가 바로 주어와 동사입니다. 여기서 동사는 다시 목적어와 보어의 필요 여부에 따라서 5가지 종류로 나뉩니다. 보어의 필요 여부에 따라 완전 동사와 불완전 동사, 목적어의 필요 여부에 따라 자동사와 타동사로 나뉘게 되며, 이 둘을 조합하여 완전 자동사, 불완전 자동사, 완전 타동사, 불완전 자동사로 나뉘게 됩니다. 여기에 수여 동사를 합하여 동사는 5가지로 나뉘게 되는 것입니다.
동사의 범주
목적어나 보어를 필요로 하지 않으며 동사 단독으로, 혹은 부사구를 동반하여 문장을 형성하는 동사를 말합니다. 이 때, 유도 부사 there로 시작하는 문장( there is ~ )은 주어와 동사를 도치시킵니다.
( 완전 자동사를 사용한 예 2개 )
* 수동의 의미를 지닌 능동형 자동사 - The book reads[sells] well - This pen writes smoothly
* 동명사나 부정사의 능동태가 수동의 의미를 지닌 경우 a. 필요, 요구의 동사( need, want, require 등 ) + 동명사 : ~ 가 요구[필요] 된다. b. be worth ~ing : ~ 할 만한 가치가 있다. c. 부정사 : you are to blame,
보어를 필요로 하는 동사로 보어로 명사, 대명사, 동명사, 부정사, 명사절 등의 명사 역할을 하는 명사 상당어구와 형용사, 분사 등의 형용사 상당어구를 취합니다. 이 때, 명사 보어의 경우 주어와 동격을 이루고 ( "주어 = 보어" 성립 ) 형용사 보어는 주어의 상태를 서술하는 역할을 합니다.
* 완전 자동사로 쓰이는 go, come, fall, run은 보어를 취하여 become의 의미로 쓰이기도 합니다.
go mad : 미치다 go bad : 상하다 run short : 부족해지다. run dry : 고갈 되다 come true : 실현되다 fall asleep : 잠들다
타동사는 동사의 행동 대상이 되는 목적어를 취해서 문장을 성립시키며, 목적어 없이는 문장이 성립되지 않습니다. 목적어는 명사 혹은 명사 상당어구( 동명사, 대명사, 명사구, 명사절 )를 취합니다.
* 타동사의 기능을 하는 동사구
동사구는 동사와 전치사, 부사등으로 이루어 졌으며, 동사의 역할을 합니다. 이런 동사구는 목적어를 취하기 때문에 타동사의 기능을 한다고 볼 수 있습니다. 주의 하실 것은 동사구에서 하나의 요소라도 빠지면 문법적으로 틀리게 되므로 주의 하시기 바랍니다. 예) take care of ~ : 돌보다 pay attention to ~ : ~에 주의를 기울이다
* 자동사로 오인 할 수 있는 타동사
타동사 중에는 우리 말로 번역을 하면서 자동사처럼 느껴지는 동사가 있습니다. 많은 분들이 이런 타동사에 전치사를 붙이는 실수를 하시는데, 이런 타동사는 따로 암기를 해둘 필요가 있습니다. marry : ~와 결혼하다 ( marry with (X)) 단, 수동태 일 때에는 be married to ~ 로 쓰임 enter : ~에 들어가다 ( enter into (X) : 착수하다, 시작하다 ) resemble : ~와 닯다 ( resemble with (X)) leave : ~ 를 떠나다 ( leave from(X)) reach : ~에 도달하다 ( reach to (X)) attend : ~에 출석하다 ( attend to/on (X)) attend to : ~에 주목하다 attend on : ~의 시중을 들다
* 수여 동사로 착각 할 수 있는 타동사
마찬가지로 4형식의 수여동사로 착각 할 수 있는 타동사들도 있습니다. 우리말로 해석하면 『~해주다』로 해석되는 것들인데요. 이 들은 수여동사가 아니기 때문에 전치사를 써줘야 합니다.
explain [ suggest, introduce ] B to A : A에게 B를 설명[ 제의, 소개 ] 하다 provide / supply A with B : A에게 B를 공급하다. = provide / supply B to A prevent / prohibit / keep / stop A from ~ing : A가 ~하는 것을 막다 / 방해하다 rob / deprive A of B : A에게서 B를 빼앗다 remind [ inform, accuse ] A of B : A에게 B를 상기시키다. [ 알리다, 비난하다 ] blame [ thank, punish ] A for B : B때문에 A를 비난하다. [ 감사하다. 처벌하다 ]
수여 동사는 두개의 목적어를 취합니다. 『~에게』로 해석되는 간접 목적어와 『~를』으로 해석되는 직적목적어를 취합니다. 이때, 간접 목적어로는 『~에게』에 해당 되는 사람이나 사물이 오고, 직접 목적어로는 『~를』으로 해석되는 사물이 오게 됩니다.
* 수여 동사의 3형식화
수여 동사의 두 목적어 중 직접목적어는 동사의 행위에 대한 직접적인 대상을 나타냅니다. 그러므로 간접 목적어 보다는 좀 더 직접적인 관계가 있다고 할 수 있습니다. 이 때, 간접 목적어에 전치사를 붙여서 구조적으로 좀 더 안정적이라고 할 수 있는 3형식( S + V + O )의 문장으로 만들 수 있습니다.
예) He gave me a book → He gave a book to me
* 3형식화가 안 되는 동사
수여 동사는 아니지만 2개의 직접 목적어를 취하는 동사( envy, save, cost, forgive )가 있습니다. 이런 형식은 수여 동사로 착각하여 3형식으로 전환 하는 실수를 할 수 있는데, 3형식 전환을 할 수 없습니다.
예) The trip will cost you $2,000 → The trip will cost $2,000 to you (X) : 여행이 cost의 주체가 되는 것은 이상하기 때문입니다.
* 3형식화가 안 되는 동사
수여 동사는 아니지만 2개의 직접 목적어를 취하는 동사( envy, save, cost, forgive )가 있습니다. 이런 형식은 수여 동사로 착각하여 3형식으로 전환 하는 실수를 할 수 있는데, 3형식 전환을 할 수 없습니다.
예) The trip will cost you $2,000 → The trip will cost $2,000 to you (X) : 여행이 cost의 주체가 되는 것은 이상하기 때문입니다.
불완전 타동사는 목적어와 보어를 동시에 취합니다. 이 때, 보어로 명사가 오면 목적어와 목적보어는 동격의 관계를 형성하고, 형용사가 오면 보어는 목적어의 상태를 서술하게 됩니다. 특히 5형식에서 주목해야 할 형식은 바로 사역동사와 지각 동사입니다. 사역 동사와 지각 동사가 문장에서 쓰일 때, 목적어와 목적 보어의 관계가 능동이면 동사의 원형인 원형 부정사가 쓰이게 됩니다. ( 이 때, 동작을 강조하려면 진행형을 쓰기도 합니다. )