리눅스는 multi user 시스템이기 때문에 여러 사용자가 파일을 공동으로 사용할 수 있습니다.

그런데 자신의 비밀 파일을 다른 누군가가 접근하는 것은 원치 않을 수 있으며,

또는 어떤 파일을 다른 사용자가 읽기는 할 수 있지만, 수정하는 것은 원치 않을 수 있습니다.


그래서 파일에 대한 접근 주체를 소유자, 소유그룹, 기타로 구분 지어서, 각 대상에 대해 읽기, 쓰기, 실행 권한을 부여할 수 있도록 했습니다.

즉 누가 파일에 접근해도 되는지, 접근해서 무엇을 할 수 있는 지를 결정하는 것을 파일 권한 (permission)이라 합니다.

권한은 보안적으로 매우 중요하므로 꼭 이해하고 있어야 합니다.





ls -l 명령어를 입력했을 때 가장 앞에 있는 rwx 가 바로 권한입니다.

정확하게는 파일 타입 / 소유자 / 소유 그룹 / 기타 에 대한 r( 읽기 ), w( 쓰기 ), x( 실행 ) 권한을 의미합니다.

예를들어 drwxr-xr-x 의 경우에는 d / rwx / r-x / r-x 와 같이 나눌 수 있습니다.

이제 각각이 무엇을 의미하는지 살펴보겠습니다.




파일 타입

가장 앞에 있는 문자는 파일 타입으로 아래와 같습니다.

-           : 일반(보통) 파일

b           : 블록 디바이스 파일

c           : 문자열 디바이스 파일

d           : 디렉토리

l            : 심볼릭 링크  

p 또는 = : 명명된 파이프(named pipe) / FIFO

s           : 소켓(socket)





권한

파일 타입을 제외한 9개의 rwx에 대해 3개씩 끊으면 순서대로 소유자, 소유 그룹, 제 3자(기타)에 대한 권한을 나타냅니다.


rwx의 의미는 다음과 같습니다.

r    : 읽기 권한

w   : 쓰기 권한

x    : 접근 권한


rwx 간에도 규칙이 있습니다.

접근을 할 수 있어야 파일 및 디렉터리를 읽을 수 있고, 읽을 수 있어야 쓰기가 가능하다는 것입니다.

x -> r -> w



이제 권한을 읽는 방법에 대해 알아보겠습니다.


예를들어 파일의 권한이 r w - r - - r - - 일 경우,

파일의 소유자는 읽고, 쓸 수 있는 권한이 있고,

파일의 소유 그룹에 해당하는 유저들은 읽기만 가능하며,

그 외 제3자도 읽기만 가능합니다.


rw-r--r--은 간단히 644와 같이 Numeric으로 표현합니다.

r w -   : 6 ( = 4 + 2 + 0 )

r - -    : 4 ( = 4 + 0 + 0 )

r - -    : 4 ( = 4 + 0 + 0 )

한 주체에 대해 r w x의 각 자리는 2의 거듭제곱으로 표현합니다.



리눅스 명령어 실행 도중 permission denied 에러가 발생하면, 실행 주체에 대해 파일의 권한을 확인해야 합니다.





허가권 변경

파일의 권한을 변경하는 명령어는 chmod 입니다.

# chmod 755 파일명

# chmod -R 755 디렉터리명

755는 rwxr-xr-x를 의미하므로, 해당 파일의 소유 권한을 rwxr-xr-x로 변경하는 명령어입니다.

만약 디렉터리의 내의 모든 파일의 소유권을 변경하고 싶다면 –R 옵션을 추가하면 됩니다.





소유권 변경

파일의 소유권을 양도하는 명령어는 chown 입니다.

# chown foo.goo 파일명

해당 파일의 소유권을 foo 유저에게, goo 그룹에게 양도하는 명령어입니다.




이상으로 리눅스에서 파일의 권한에 대해 알아보았습니다.

파일에 접근할 수 있는 주체는 소유자, 소유그룹, 제3 자로 나눌 수 있고 각각 읽고, 쓰고, 실행할 수 있는 권한을 알맞게 부여할 수 있습니다.

보안적으로 권한은 매우 중요하기도 하고, 서버 운영 면에서 권한에 대해 꼭 알고 있어야 합니다.