본문 바로가기

HOW TO HACK/Basics

해커라면 알아야 할 리눅스 기초-6 : 파일, 디렉토리 권한 조회 및 변경

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


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


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


# 잘못된 정보를 발견하면 댓글로 알려주시면 감사하겠습니다.



이번 포스팅에서는 파일 및 디렉토리의 권한을 확인하는 방법과 이 권한을 변경하는 몇 가지 방법과 관련된 

명령어를 다뤄볼 것이다.


Step 1 : 권한 조회


리눅스에서 파일이나 디렉토리의 권한을 확인해보기 위해서는 지난 글에서 소개한 글에서 소개한 ls 명령어를 사용하면 된다. 아직 해당 글을 읽어보지 않았다면 아래 링크를 통해 읽어보길 권한다.


"해커라면 알아야 할 리눅스 기초-2 : 디텍토리 이동,디텍토리/파일 생성,도움말


ls 명령어를 아무 옵션도 없이 그냥 사용하면 파일명과 디렉토리명만 나온다.

권한정보를 포함한 기타 다른 정보를 확인하려면 -l 옵션을 사용해야 한다.


자 그럼, 권한에 대한 설명을 위해 이번에도 어김없이 /usr/share/nmap 디렉토리로 이동하고,

ls 명령어를 -l 옵션과 함께 사용해보자.


# ls -l 



/usr/share/nmap 디렉토리안에 있는 파일과 디렉토리의 목록을 보여준다.

권한, 파일 및 디렉토리 소유자, 소유그룹, 파일용량 및 생성/수정시간, 그리고 파일이나 디렉토리명을

확인할 수 있다.


여기서 파일인지 디렉토리인지는 맨 앞에 나온 권한정보(-rw-r--r-- 요렇게 생긴...)를 보면 알 수 있다.

권한정보의 맨 앞자리의 값이 파일은 하이픈(-)으로 표시되면, 디렉토리는 d로 표시된다.


또한, 파일이나 디렉토리에 설정된 권한 역시 권한정보를 통해 확인 할 수 있다.

위의 스크린샷에서 보이는 scripts 디렉토리의 권한정보는 어떻게 나와있나?



보시다시피 drwxr-xr-x 이다.

맨앞의 d는 파일/디렉토리 여부를 나타내는 값이고, 이것을 제외하고 보자면

총 9자리인데 이걸 3자리씩 끊어서 봐야 한다. 

3자리씩의 그룹은 각각 소유자 / 그룹 / 전체(그외 사용자들)의 권한을 나타낸다.


다른 사람의 블로그에 잘 표현한 그림이 있어 빌려 왔다.


(그림 출처 : http://blog.naver.com/pk920207/110146983473)


scripts 디렉토리의 권한을 3자리씩 보면 rwx와 r-w, 그리고 또 r-w이다.

즉, script 디렉토리에 부여된 각 사용자들에 대한 권한은 아래와 같이 설명할 수 있다. 


소유자권한 : 읽기(r), 쓰기(w), 실행(x) 모두 가능

그룹권한 : 읽기(r), 실행(x)만 가능, 쓰기(w) 불가

전체권한 : 읽기(r), 실행(x)만 가능, 쓰기(w) 불가



Step 2 : 권한 변경 (chmod)


권한변경을 하기 위해 사용되는 명령어로는 chmod 명령어가 있다. 

chmod 명령어를 사용하려면 이에 맞는 권한 표현 방식을 먼저 알아야 한다.

chmod 명령어에서는 각 읽기,쓰기,실행 권한을 아래와 같이 숫자로 표현한다.


읽기(r) : 4

쓰기(w) : 2

실행(x) : 1


위의 표현방식대로 보자면 Step 1에서 살펴본 scripts 디렉토리의 권한(rwxr-xr-x)은  

소유자권한은 rwx로 421... 4+2+1=7 이고, 그룹 및 전체권한은 r-x로 401... 4+1 = 5 이다.

즉, 755가 되는 것이다.


그럼, scripts 디렉토리의 권한을 소유자와 그룹은 읽기,쓰기,실행 모두 가능하고, 전체는 읽기만 가능하도록

변경해보도록 할 것이다.


소유자, 그룹 : 읽기(r),쓰기(w),실행(x) 모두 가능 = 4+2+1 = 7

전체 : 읽기(r)만 가능 = 4


즉, 변경될 권한은 774이고, chmod 명령어를 통해 변경을 해보자.


# chmod 774 scripts 



스크린샷에서 보이는 바와 같이 ls -l 명령을 통해 rwxrwxr--로 변경되었음을 확인할 수 있다.

모든 사용자에게 모든 권한을 열어주려면 chmod 777 scripts 명령어로 하면 될 것이다.


지금까지 설명한 777 방식말고도 chmod를 이용해서 다른 방식으로도 가능하다.

소유자(u), 그룹(g), 전체(o) 즉, UGO를 사용한 방법이다. 

권한 추가와 제거는 '+'와 '-'기호를 사용하고, '=' 기호는 지정된 권한으로 셋팅한다.


예를 들어 설명하자면 위에서 변경된 scripts 디렉토리의 권한 중 

그룹에서 쓰기 권한을 제거하기 위한 표현 방식은 g-w 이다.

전체사용자에게 쓰기와 실행 권한을 추가하려면 o+wx를 사용하면 된다.


# chmod g-w scripts

# chmod o+wx scripts


위의 명령어처럼 각각 실행해도 되고, 아래 명령어처럼 한 줄로 입력해도 상관없다.


# chmod g-w,o+wx scripts



그룹에서 쓰기(w) 권한이 제거되었고, 전체에는 쓰기(w)와 실행(x) 권한이 추가되었다.


기존 권한을 무시하고 지정된 권한만 새로 셋팅하는 방식은 = 기호를 사용한다.

scripts 디렉토리의 권한을 다시 원상복귀시키기 위해 이 방법을 사용해보자.

원래대로 변경하려면 전체에게 부여된 권한을 읽기(r), 실행(x) 권한만 부여하면 된다.


# chmod o=rx scripts



이 포스팅을 작성하기 전의 권한대로 변경되었다.

여기저기서 알게된 쓸만한 해킹툴을 리눅스에 새로 설치하고,

권한을 변경할 때 이 글에서 배운 것을 적절히 써먹길 바란다.<끝>