우선 리눅스에서 아래와 같이 명령어를 쳐보면 다음과 같이 파일 목록이 나타난다.

$ ls -l

위에서는 Fedora 에서 ll='ls -l'로 alias 지정된 상태에서 출력한 모습인데, 빨간색 네모 칸을 보면 뭔가 기괴한(?) 모습을 보여주고 있다.

저곳의 첫 번째 필드는 파일의 접근을 보여준다.

위의 사진을 예로 들면 drwxrwxr-x 와 같은 이 부분인데 한 번 알아보자.

표현

d r w x r w x r - x

밑줄 친 순서대로 파일 종류, 소유자 권한, 그룹 권한, 기타 사용자 권한을 나타낸다.

파일 종류

  • - : 일반 파일
  • d : 디렉토리
  • s : 소켓 파일
  • l : 링크 파일

소유자/그룹/기타 사용자 권한

  • r : 읽기(read)
  • w : 쓰기(write)
  • x : 실행(execute)

만약, 해당하는 자리에 -로 표시되어 있다면 그 자리의 권한이 없다는 뜻이다.
예를 들면 

rw- : 읽기와 쓰기 권한은 있으나 실행 권한은 없음
r-- : 읽기 권한만 있음

라고 이해하면 된다.

따라서, 예시를 들면

-rw-rw-r-x : 파일이고, 소유자는 읽기, 쓰기 권한 / 그룹은 읽기, 쓰기 권한 / 기타 사용자는 읽기, 실행 권한 가능
dr--rw--r-- : 디렉토리이고, 소유자는 읽기 권한 / 그룹은 읽기, 쓰기 권한 / 기타 사용자는 읽기 권한 가능
-rwxr-xr-x : 파일이고, 소유자는 읽기, 쓰기, 실행 권한 / 그룹은 읽기, 쓰기 권한 / 기타 사용자는 읽기, 쓰기 권한 가능

이렇게 된다.

 

여기서 권한을 부여해주기 위해서는 chmod 라는 명령어를 사용한다.

$ chmod [옵션]<권한모드> <대상 경로>

명령어를 사용할 때는 문자로 표현해서 접근을 지정해주는 방법이 있고, 8진수로 지정해주는 방법이 있다.

위에서 '파일 종류' 와는 상관없이 권한만 신경쓰면 된다.

문자로 표현하는 방법에 대해서 먼저 알아보자면 우선 아래를 참고해보자.

 

1. 문자 표현 방법

 

사용하는 방법은 간단하므로 아래의 예시를 보자

$ chmod u+w test.c # test.c에 소유자에게 쓰기 권한 부여
$ chmod g+r test.c # test.c에 그룹에게 읽기 권한 부여
$ chmod o-r test.c # test.c에 기타 사용자에게 읽기 권한 제거
$ chmod u=rwx test.c # test.c에 소유자에게 읽기, 쓰기, 실행 권한 부여
$ chmod go+rw test.c # test.c에 그룹 및 기타 사용자에게 읽기, 쓰기 권한 부여
$ chmod u+w,g-w test.c # test.c에 소유자에게 쓰기 권한 부여, 그룹에게 쓰기 권한 제거

2. 8진수 방법

보통 FTP라던가 그 외 다른 부분에서 많이 쓰이는 방법이다.

이 방법을 쓰려면 진법 변환을 알고 있어야 어렵지 않다.

  1. 사용 권한의 기호를 파악한다.
  2. 기호에 해당하는 자리를 2진법으로 대체하면서 권한이 없는 것은 0으로, 있는 것은 1로 표시한다.
  3. 2진수를 계산한다.
  4. 계산 값을 모두 더한다.
  5. 위 1~4를 소유자, 그룹, 기타 사용자 부분별로의 각 계산값을 서로 붙인다.

계산 순서는 위와 같으며 예를 들어 알아보자

 

 

$ chmod 604 test.c # test.c에 대한 rw----r--부여
$ chmod 777 test.c # test.c에 대한 rwxrwxrwx 부여
$ chmod 655 test.c # test.c에 대한 rw-r-xr-x 부여
$ chmod 423 test.c # test.c에 대한 r---w--wx 부여

위에서는 접근 부여에 관해서 말하였지만 이제 기본 접근 권한에 대해서 말해보려고 한다.
기본 접근 권한이라는 것은 기본으로 설정되는 권한으로 생각하면 된다.

 

무슨 말인가 하면, 기본적으로 일반 파일의 최대 권한은 666(rw- rw- rw-), 디렉토리의 최대 권한은 777(rwx rwx rwx)이지만, 여기서 기본적으로 디렉토리를 생성한다거나 파일을 만들어줄 때 기본적으로 지정될 권한을 설정해주는 것이다.

 

이를 위해 umask 라는 명령어가 있다.

$ umask <마스크값>

마스크 값이라는 것은 말 그대로 마스크를 해주는 값이라고 생각하시면 된다.
이 마스크값은 기본적으로 022 또는 002 로 설정되어 있다.

 

파일의 권한과 마스크값과 XOR연산을 하면 그게 최종 권한이다.

 

*XOR 연산 -> 서로 다른 경우에 1이고 나머지는 0