현재 리눅스/유닉스(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 가 정상적으로 동작합니다.
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 |