본문 바로가기

Basic Theory/Linux

심벌릭 링크(Symbolic/Soft Link)란?

현재 리눅스/유닉스(Linux/Unix) 를 다루어 본 적이 있는 분들이라면 알고 있을 내용이지만


'심벌릭링크(Symbolic Link)가 뭔가요? 먹는건가요?' 라고 고개를 갸우뚱 거릴수 있는 분들

윈도우(Windows)를 사용하는 대부분의 일반 PC유저들은

심벌릭 링크 = '바로가기' 라고 생각하면 쉬울 것이다. 


여기서 산넘어 산으로 '바로가기'라는 단어를 모르는 분들이 있을 수 있다.


그 분들을 위해 '바로가기' 에 대해 간단한 설명을 해보자.

바탕화면에 임의의 아이콘(아이콘명이 Jack2 라고 하자)을 선택한 뒤 마우스 오른쪽 버튼을 클릭하면 '바로가기 만들기(S)' 이런 메뉴를 볼 수 있다. 





이 메뉴를 선택하면 'Jack2의 바로가기'라는 단축아이콘이 생성된다. 이 단축아이콘이 바로 '바로가기' 파일인 것이다.





원래 C:\ 에서 부터 폴더를 타고타고 들어가서 해당 경로의 파일을 실행해야 되는 수고를 

바탕화면에서 그 파일을 바로 실행할 수 있게 되는 것이다. 우리가 윈도우 바탕화면에서 사용하고 있는 웹브라우저(Chrome, Firefox, IE 등) 아이콘이 대표적인 예라고 할 수 있다.


이처럼 '바로가기' 단축아이콘을 심벌릭(소프트) 링크라고 생각하면 쉽게 이해할 수 있을 것이다.


이제 어떤 개념인지 전체적인 큰 그림은 본 상태이니 

리눅스 환경에서 사용하는 심벌릭 링크에 대해서 이야기 해보려고 한다.


Symbolic Link Example)

Fedora release 13 (Goddard)

Kernel 2.6.34.9-69.fc13.i686 on an i686 (3)

login: jack2

Password:

Last login: Wed Aug  8 02:13:00 from 192.168.40.1


[jack2@localhost ~]$ cd test

=> 홈 아래에 있는 test 로 이동을 합니다.


[jack2@localhost test]$ ls -l ./symsym2

-rwxrwxr-x. 1 jack2 jack2 4681 Aug  8 03:25 ./symsym2

=> test 안에 symsym2 라는 실행파일을 확인 할 수 있었습니다. 

(참고로 symsym2 는 제가 테스트 용도로 작성한 파일입니다.)


[jack2@localhost test]$ ./symsym2

Symbolic Link 가 정상적으로 동작합니다.

=> symsym2 파일을 실행하면 Symbolic Link 가 정상적으로 동작합니다. 라는 문구가 출력됩니다.


[jack2@localhost test]$ pwd

/home/jack2/test

[jack2@localhost test]$ cd ~

[jack2@localhost ~]$ pwd

/home/jack2

=> 현재 작업경로를 /home/jack2 로 이동했습니다.

 

[jack2@localhost ~]$ ln -s /home/jack2/test/symsym2 SymTestOK

=> ln 명령어와 -s 옵션을 이용해서 심벌릭링크를 걸어주었습니다.

원본파일은 /home/jack2/symsym2 이고 링크된 파일은 SymTestOK 


[jack2@localhost ~]$ ls -l SymTestOK

lrwxrwxrwx. 1 jack2 jack2 24 Aug  8 03:31 SymTestOK -> /home/jack2/test/symsym2

=> 확인한 결과 정상적으로 링크가 된 것을 확인 할 수 있었습니다.

[jack2@localhost ~]$ ./SymTestOK

Symbolic Link 가 정상적으로 동작합니다.

=> 실제 실행한 결과 symsym2가 동작하는 것을 확인할 수 있었습니다.

이처럼 심벌릭링크를 이용하면 파일을 접근할 때 Full-Path를 찾아가는 일 없어지겠죠? 윈도우의 '바로가기' 단축아이콘에 빗댄 이유도 이해가 되시죠?


Symbolic link는 위와 같이 매우 편리하게 이용할 수 있으나, 위험성을 많이 내포하고 있다. 유닉스에 존재하는 일반적인 버그에 수시로 나타나는 것이 바로 이 Symbolic link인데, 왜 그런지 그 이유를 살펴보도록 한다.


예를 들어서, 어떤 프로그램이 hello라는 파일을 열어서, 그곳에 무언가를 써준다고 가정한다. 이때 만약 당신이 Permission이 된다면, hello라는 파일을 지우고나서, symbolic link로 'ln -s ~xxx/.rhosts hello' 라고 해두면 어떻게 되겠는가? 그 프로그램이 실행되면 hello라는 파일을 여는데, hello는 ~xxx/.rhosts라는 파일에 링크되어 있으므로, 그 프로그램은 ~xxx/.rhosts를 열어서 쓰게 된다. (물론 잘만 프로그램을 짜면 그런 일을 없앨 수 있다.)


이러한 단적인 예제가 elm 에 존재하는 autoreply라는 버그였는데, 그것은 setuid root되어 있고, /tmp에 arep.???? 라는 666 mode의 파일을 생성한다. 그러면, 그 생성되는 파일을 없애고(unlink), symbolic link를 /.rhosts(root의 .rhosts)로 연결시켜버린다. 그러면 실행하면서 /.rhosts라는 파일에 "+ +"정도가 들어가게 하기만 하면, 만사 OK(or BAD?)가 된다.


'Basic Theory > Linux' 카테고리의 다른 글

[Linux] VM ware에 설치된 Fedora13 에 Telnet 으로 접속하기  (0) 2012.07.18
setUID란?  (0) 2012.06.26