리눅스에서 파일, 디렉토리 권한을 설정, 변경하고 소유권을 변경하는 것을 살펴보려고 한다.
ls -al 명령어를 통해 파일과 디렉토리 리스트들을 출력하면 권한을 확인할 수 있다.
첫 글자가 d로 시작하면 디렉토리라는 의미로, - 일 경우는 일반 파일로 해석하면 된다.
이 외에도 첫번째 문자의 의미를 정리하면 아래와 같다.
d | 디렉토리(directory) |
b | 블록 타입 특수 파일(block special) |
c | 문자 타입 특수 파일(character special) |
l | 심볼릭 링크(symbolic link) |
p | 파이프(pipe) |
s | 소켓(socket) |
- | 일반 파일(regular file) |
첫 글자를 제외한 뒤의 9개의 문자는 3글자씩 끊어서 소유자, 그룹 사용자, 기타 사용자의 권한을 표시한다. 3글자씩 끊는 이유는 파일에 부여할 수 있는 권한은 기본적으로 읽기, 쓰기, 실행, 3가지의 형태가 있기 때문이다. 각 권한을 정리하자면 아래와 같다.
- 읽기 권한(r): 파일을 열어볼 수 있고, 파일의 수정은 불가능하나 복사는 가능하다.
- 쓰기 권한(w): 파일에 덧붙여 쓸 수 있다. 즉, 읽기 권한과 쓰기 권한을 같이 가진 rw_ 형태의 파일이라면 파일 편집이 가능하다는 것이다. 읽기 권한 없이 쓰기 권한만 있다면 기존의 파일 뒤에 정보를 덧붙일 수 있는 것만 가능하다.
- 실행 권한(x): 파일을 실행할 수 있다.
Ex) 주로 쓰는 파일 권한 표시
--- : 접근 불가능한 파일
r-- : 읽기만 가능한 파일
r-x : 읽기와 실행이 가능한 파일(프로그램 같은 파일)
rw- : 읽기와 쓰기가 가능한 파일(일반 파일)
rwx : 모든 권한을 가진 파일
디렉토리에 대한 파일 권한 역시 일반 파일과 동일하다. 디렉토리 권한에 대해 몇 가지 상황을 생각해 보자.
1. 디렉토리에서 쓰기 권한(w)이 없다면 파일을 수정하고 생성하는 것 등이 불가능하다.
2. 실행 권한(x)이 없다면 디렉토리로 접근하는 것(cd)가 불가능해진다.
3. 읽기 권한(r)만 부여할 경우 디렉토리에 저장된 항목은 조회할 수 있지만 해당 디렉토리에 저장된 파일은 조회할 수 없다. 즉, 어떤 파일이 있다는 것만 알 수 있다.
4. 디렉토리에 실행 권한(x)만 부여할 경우, 디렉토리 내 파일 목록을 볼 수 없다. 이 말은 읽기 권한(r)이 없어 ls -al로 조회해도 디렉토리 내의 파일은 알 수 없다. 하지만 실행 권한(x)은 있어 어떤 파일이 저장되어 있는지 이미 알고 있다면 파일을 조회하는 것은 가능하다. 주의할 점은 이 경우에는 파일의 경로와 이름을 정확하게 입력해야 조회할 수 있다.
5. 디렉토리에 쓰기 권한(w)만 부여한 경우는 아무 권한도 부여하지 않은 상태와 동일하다.
9글자의 권한 뒤에 나오는 출력 결과는 각각 링크수, 사용자(소유자), 그룹, 파일크기, 수정시간, 파일이름을 나타낸다.
위에서 살펴 봤듯이, 파일 권한을 구분하는 경우 크게 3가지로 분류할 수 있다.
읽기(r) | Reading | 4 |
쓰기(w) | Writing | 2 |
실행(x) | Executing | 1 |
이 숫자들은 8진수로 바꿔서 해석을 할 수 있다.
각각 user, group, other에 8진수의 공간이 있다고 보면 된다. 각 자리는 2배씩, 즉, x 권한이 1, w 권한이 2, r 권한이 4가 된다. 따라서 총 합은 7이 되고 r(4), w(2), x(1)을 적절하게 사용해 0~7까지의 수를 만드는 것이 가능하다.
Ex) --------- : 아무런 권한도 없을 경우(000) / rw-r---w- : 642
권한을 기호로 줄 수 도 있지만, 숫자로도 줄 수 있고 이 숫자를 통해 권한을 간편하게 변경할 수 있다.
chmod(change mode): 파일이나 디렉토리에 권한을 수정할 때 사용한다.
각 사용자별 파일 권한 변경
: user, group, other, all(전부)에게 권한을 지정할 수 있고, 더하기(+)를 사용해 권한을 추가하고, 빼기(-)를 사용해 권한을 제거할 수 있다. "="으로는 권한을 직접 지정할 수 있다.
< 사용 예시 >
chmod g+x [파일명] : 그룹에 실행 권한을 준다.
chmod o-w [파일명] : 다른 사용자에게 쓰기 권한을 빼앗는다.
chmod a=rw [파일명] : 모든 사용자에게 읽기, 쓰기 권한을 지정한다.
위의 방식은 다른 대상은 건드리지 않고 특정 대상에 대한 권한만 간단하게 지정할 수 있지만, 한꺼번에 수정할 경우에는 번거로울 수 있다. 이럴 때는 위에서 설명한 권한을 나타내는 숫자를 이용해 한번에 권한을 변경할 수 있다.
chmod {user 권한 숫자}{group 권한 숫자}{other 권한 숫자} [파일명]의 형식을 통해 권한을 변경할 수 있다.
< 사용 예시 >
chmod 000 [파일명] : user, group, other에 있는 모든 권한을 제거한다.
chmod 777 [파일명] : user, group, other에 대한 모든 권한을 추가한다.
chmod 743 [파일명] : user에게는 모든 권한이 허용되고, group에는 읽기 권한(r)만, other에 대해서는 실행 권한(x), 쓰기 권한(w)만 준다.
위에서 설명한 바와 마찬가지로 읽기 권한(r)은 4, 쓰기 권한(w)은 2, 실행 권한(x)은 1로 나타낼 수 있고, 필요한 권한을 모두 더한 값으로 각 사용자의 권한을 지정할 수 있다.
-R을 사용하면 하위 디렉토리와 그 안의 파일 권한까지 변경할 수 있다.
Ex) chmod -R 700 [디렉토리명] : 해당 디렉토리 하위에 위치한 모든 파일 및 디렉토리에 user의 읽기, 쓰기, 실행 권한만 주고 나머지의 권한은 없앤다.
위에서 설명한 chmod 명령어는 파일이나 디렉토리의 권한을 변경하는 역할을 했다.
chown(change ownership): 파일이나 디렉토리의 사용자(소유자)를 변경할 때 사용한다.
chgrp(change group): 파일이나 디렉토리의 그룹을 변경할 때 사용한다.
즉, chown이나 chgrp 모두 파일이나 디렉토리의 소유권을 변경할 때 사용한다.
< 사용 예시 >
sudo chown user1 [파일명] : 파일 사용자를 user1으로 변경한다.
sudo chgrp user2 [파일명] : 파일 그룹을 user2으로 변경한다.
⇒ 그룹만 변경할 때 chgrp 명령어를 사용한다. 일반 사용자는 자신이 속한 그룹으로만 변경이 가능하다.
sudo chown user3.user3 [파일명] : chown 명령어를 통해 사용자와 그룹을 동시에 변경할 수 있다.
이 때, 권한 설정할 때와 같이 -R을 사용하면 하위 디렉토리와 그 안의 파일 소유권까지 변경할 수 있다.
댓글 영역