본문 바로가기

HOW TO HACK/Basics

해커라면 알아야 할 리눅스 기초-16 : 파일 링크(하드링크, 심볼릭링크) 생성, 삭제 (ln)

# 본 게시글은 작성자 본인의 스터디한 내용을 바탕으로 작성된 글입니다.


# 본 게시글에는 일부 잘못된 정보가 포함되어있을 수 있습니다.


# 이 글을 열람하는 것은 위 사항에 동의하는 것으로 간주합니다.


# 잘못된 정보에 대한 예의바른 태클 및 지적질 적극 환영합니다.


안녕하세요. Mr. Rootable입니다.

이번에는 리눅스에서 파일 링크를 생성하는 법을 알아보겠습니다.

리눅스는 그 파일구조가 윈도우와는 많이 다르고, 디렉토리 구조가 어떻게 생겨먹었는지는 리눅스 포스팅시리즈의 첫번째 글에서 이미 배운바 있습니다. 아래 링크에서 다시 한번 읽어보세요.


 해커라면 알아야 할 리눅스 기초-1 : 시작하기


우리는 GUI(Graphic User Interface)환경이 아닌 CLI(Command Line Interface)환경인 터미널을 통해 리눅스를 다루는 법을 배우고 있죠.

GUI환경이라면 마우스로 까닥까닥 클릭만 하면 됩니다. 하지만 터미널에서는 디렉토리명이나 파일명을 직접 타이핑해야 합니다. 손가락이 피곤하겠죠? 물론 자동완성 기능인 탭(Tab)키를 활용하기도 합니다.



먼저 리눅스의 파일시스템 구조부터 간단히 알아보죠.

리눅스 파일시스템은 계층구조로 되어있으며, 아래 세 가지의 섹션을 가지고 있습니다.


  • 슈퍼블록(Superblock)
  • Inode 테이블(Inode Table)
  • 데이터블록(Data Blocks)


슈퍼블록은 파일시스템의 크기 등의 파일시스템 전체에 대한 정보를 갖고 있습니다. 

Inode 테이블은 파일시스템내의 파일이나 디렉토리를 가리키는 Inode를 저장하고 있는 테이블입니다.

모든 파일은 고유의 Inode를 갖고 있으며, (파일이름에 부여되는 고유 번호는 Inode Number입니다.) 이 Inode에는 파일의 생성일시/수정일시, 크기, 위치, 권한, 소유자 등의 정보가 기록되어있습니다. 파일의 이름은 기록되어있지 않습니다.

데이터블록은 Inode에 포함되며, 파일의 데이터가 저장되는 블록입니다.


그럼, 리눅스에서 파일 링크는 어떻게 만들까요?

파일링크는 바로 하드링크와 심볼릭(소프트)링크 두 가지 방법으로 만들 수 있습니다.

하드링크는 원본파일의 Inode를 꼽사리로 함께 사용하고, 심볼릭링크는 하드링크와 다르게 새로운 Inode를 생성해 원본파일과 연결됩니다. 즉, 원본파일의 Inode는 직접 안건드리는거죠.

여기서 두 방식의 가장 큰 차이점이 생깁니다. (아래 그림을 함께 보세요.)


  • 하드링크(Hard Link)

원본파일의 Inode를 공유하여 원본파일 데이터와 직접 연결됩니다. 따라서 원본파일이 손상되거나 없어지더라도 원본파일의 데이터에 접근할 수 있습니다.


  • 심볼릭링크(Symbolic Link)

새로운 Inode를 만들어 원본파일을 가리키는 포인터와 연결되고, 원본파일의 Inode를 통해 원본파일 데이터에 접근합니다. 즉 원본파일이 손상되거나 없어지면 원본파일을 찾아가지 못하고, 원본파일이 변경되면 변경된 원본파일을 찾아가게 됩니다.




지금부터 링크를 조회하고 소개해드린 두 가지 방법으로 만드는 법을 소개할게요.




Step 1 : (심볼릭) 링크 조회


/bin 디렉토리안을 한번 살펴보죠. /bin 디렉토리는 리눅스에서 가장 필수적인 실행 명령어들이 있는 디렉토리입니다.


# cd /bin

# ls -l



/bin 디렉토리 내부를 보시면 화살표(->) 모양이 있는 파일을 보실 수 있습니다. 

해당 파일들의 파일유형(lrwxrwxrwx 부분의 첫번째 문자)을 보면 하이픈(-)이 아닌 소문자 l로 나와있습니다.

이게 바로 심볼릭링크입니다. 심볼릭링크가 걸려있는 파일사이즈를 보시면 겨우 6byte밖에 되지 않습니다.

즉, 이 파일들은 화살표(->) 뒤의 원본파일에 링크되어있는 포인터라는거죠.

이 심볼릭링크가 걸려있는 파일을 수정하는 것은 사실상 원본파일을 수정하는 것입니다.


Step 2 : 심볼릭링크 만들기 (ln)


자! 그럼 파일링크를 만들어볼까요?

아~ 만들기 전에 먼저 PATH부터 추가를 해야 합니다.

이것도 우리 배웠죠? ^^ 기억안나시는 분은 아래 링크타고 다시 한번 읽어보세요.


 해커라면 알아야 할 리눅스 기초-8 : 환경변수 조회, 추가, 수정


아래의 명령어로 현재 환경변수 내역을 확인해보고 없으면 경로를 추가해줍니다.


# echo $PATH

# PATH=$PATH:/usr/share/metasploit-framework


PATH 설정이 끝났으니 심볼릭링크를 만들어보도록 하겠습니다.

링크를 만들 때 사용하는 명령어는 ln 명령어입니다.


사용법 : ln [옵션] 원본파일 대상파일


옵션으로는 심볼릭링크를 만들 때 -s옵션을 사용한다는 것만 유의하세요.

그럼 우리가 추후에 자주 시용할 메타스플로잇에 심볼릭링크를 걸어볼게요.

메타스플로잇을 실행하기 위한 명령어는 msfconsole 이고, metasploit 명령을 실행해도 메타스플로잇이 실행되도록 해보겠습니다


먼저 메타스플로잇 디렉토리를 들여다보겠습니다.


# cd /usr/share/metasploit-framework

# ls -l



우리가 링크를 걸 msfconsole 파일이 보이네요. 


# ln -s msfconsole metasploit



심볼릭링크가 잘 생성되었네요.

그럼 metasploit 명령으로 진짜 메타스플로잇이 실행되는지 확인해봐야겠죠?


# metasploit



ㅋㅋㅋ 잘 실행됩니다!!!



Step 3 : 하드링크 만들기 (ln)


하드링크도 한번 만들어봐야겠죠???

심볼릭링크를 만들 때와 동일하게 ln 명령어를 씁니다. 단, s옵션(symbolic) 없이 사용해야 해요.


# ln msfconsole msf



msf 하드링크 파일이 만들어졌습니다.

심볼릭링크와는 다르게 그냥 별개의 실행파일로 생성되네요.

하드링크 파일인 msf로 메타스플로잇 실행하면.. 역시 아래 스크린샷과 같이 잘 실행됩니다.




Step 4 : 링크 해제, 삭제 (rm)


생성한 하드링크나 심볼릭링크를 삭제하기 위해서는 rm 명령어를 사용하면 됩니다.


사용법 : rm 대상파일


즉, 아래와 같이 명령어를 실행하면 앞서 만들었던 하드링크와 심볼릭링크가 모두 삭제됩니다.


# rm metasploit

# rm msf



깔끔히 삭제되었습니다. 이상으로 파일링크에 대해 알아봤습니다.

리눅스의 길은 멀고도 험하네요... ㅠ.ㅠ 아직 포스팅할 것들이 많이 있거든요. ㅋㅋ

다음 포스팅에서 또 뵙죠.<끝>