시스템의 보안, 무결성 및 기능을 유지하기 위해서 Linux File Permission에 대해 이해하고 적절히 관리할 수 있어야한다. 필요한 사용자만 액세스 할 수 있도록 제한하여 데이터의 유출이나 무단 수정 등의 위험으로 부터 중요한 데이터를 보호할 수 있다. 이 글에서는 Linux에서 파일 권한 및 소유권이 적용되는 방식에 대해 설명하고 명령어를 사용하여 파일 권한 및 소유권을 관리하는 방법에 대해 알아본다.
여기서 말하는 '권한'이란 파일이나 디렉터리에 대해 사용자나 그룹이 가지는 권리를 말한다. 이 권리에는 읽을 수 있는 권리, 쓸 수 있는 권리, 실행할 수 있는 권리가 있다. 그리고 각 권리를 각 사용자 범주에 할당할 수 있다. 사용자 범주에 할당된 권리들, 즉 권한은 영숫자표현(rwx)이나 숫자(0-7)로 표현된다.
권한
r
: 읽기 가능 (Readable)w
: 쓰기 가능 (Writable)x
: 실행 가능 (eXecutable)참고: 디렉토리의 경우 읽기/쓰기/실행이 약간 다른 의미를 가진다.
읽기가 설정되어 있지 않으면 디렉토리 내부에 있는 내용을 나열(ls)할 수 없다.
쓰기가 설정되어 있지 않으면 디렉토리 또는 그 하위 디렉터리를 삭제하거나 만들 수 없다.
실행이 설정되어 있지 않으면 해당 디렉토리로 cd나 ls, find 등의 명령을 실행할 수 없다.
사용자 범주
권한 확인 방법
그리고 이런 파일 권한과 소유자 정보는 다음 명령어를 통해 확인할 수 있다.
ls -l
위 명령어를 처음 실행해 봤다면 첫 번째 컬럼에 나오는 암호 같은 글자(예를들면-rwxr-xr-x 같은것..)에 조금 당황했을 수 있다. 이 부분이 파일 권한을 나타내는 부분으로, 가장 왼쪽 글자는 파일의 종류, 나머지 9글자는 권한을 나타낸다.
영문으로 표현된 권한들을 숫자로 표시할 수도 있다. 각 사용자 범주에 대한 권한을 한자리 숫자로 결합한다. User에 대한 권한, Group에 대한 권한, Other에 대한 권한이 각각 하나의 숫자로 통합되어 총 3자리 숫자로 표현된다.
이 표현 방식은 바이너리 관점에서 보면 쉽게 이해할 수 있다. 각 자리에 권한이 있으면 1이, 없으면 0이 표시된다고 생각해보자. 실행 권한이 활성화되면 십진수 값은 1(001), 쓰기 권한은 2(010), 읽기 권한은 4(100)가 된다. 모든 권한이 활성화되면 7(111)이 되는 것이다.
ls -l
명령어를 통해 파일 권한과 소유권을 확인할 수 있다. 존재하는 파일이나 디렉터리의 권한을 하나씩 살펴보면서 알아보자.
각 컬럼은 왼쪽부터 파일 권한, 하드 링크 수, 소유자, 그룹, 파일 크기, 수정 시간, 파일/디렉토리 이름에 대한 정보를 제공한다. 위 출력에서 가장 첫번 째 행을 예를 들어 살펴보면, drawio라는 폴더의 권한 정보는 drwxr-xr-x
으로 표시된 것을 알 수 있다.
d
: 디렉토리임을 나타낸다.rwx
: 파일 소유자는 읽기(r), 쓰기(w) 및 실행(x) 권한이 있다.r-x
: 그룹에 읽기(r) 및 실행(x) 권한이 있지만 쓰기 권한은 없다.r-x
: 다른 사람(소유자 또는 그룹 아님)은 읽기(r) 및 실행(x) 권한이 있지만 쓰기 권한은 없다.rwx, r-x, r-x 권한이 있으므로 숫자로 표시하면 755가 된다. 755라는 숫자만 보고도 User 설정은 7, Group과 Other에게는 쓰기를 허용하지 않았음을 유추할 수 있다.
앞서 Linux에서 파일 권한을 영문과 숫자로 표현하는 방법을 살펴봤다. 이번 파트에서는 chmod
와 같은 명령을 사용해서 권한을 설정하는 방법에 대해 알아보자. 관련된 명령어는 다음과 같은 것들이 있다.
chmod
: 파일 또는 디렉토리의 권한을 변경chown
: 파일 또는 디렉토리의 소유자를 변경chgrp
: 파일 또는 디렉토리의 그룹을 변경umask
: 새로운 파일 및 디렉토리의 권한을 지정su
: 다른 사용자로 전환
chmod [옵션] [권한] [파일 또는 디렉토리]
u
는 소유자, g
는 그룹, o
는 기타 사용자+
는 권한을 추가하고, -
는 권한을 제거chmod u+x script.sh
라는 명령은 파일의 소유자에게 실행 권한을 추가하겠다는 뜻이다.test.txt라는 파일에서 읽기 권한을 제거하고 실제로 파일을 읽을 수 없는지 테스트해보자.
chmod u-r 명령으로 읽기 권한을 제거해봤다.
chown [new_owner]:[new_group] [file/directory]
예시
# 이 명령은 myfile.txt의 소유자를 사용자 'john'으로 변경한다.
chown john myfile.txt
# 이 명령은 myfile.txt의 소유자를 사용자 'john'으로, 그룹을 'developers'로 변경한다.
chown john:developers myfile.txt
예시
chgrp [new_group] [file/directory]
댓글 영역