🫠리눅스는 다중 사용자 환경에서 개발되었기 때문에 파일과 디렉터리의 권한 관리가 중요합니다. 이 글에서는 리눅스의 파일 및 디렉터리 권한에 대해 설명하고, 어떻게 이를 관리하는지에 대해 알아보겠습니다.
리눅스에서 파일 및 디렉터리의 권한은 크게 다음 세 가지로 나뉩니다
- 읽기(Read, r)
- 쓰기(Write, w)
- 실행(Execute, x)
리눅스에서 권한의 대상은 다음과 같습니다:
- 소유자(Owner)
- 그룹(Group)
- 기타 사용자(Others)
🧐
ls -l
명령어를 실행하면, 파일 및 디렉터리의 권한, 소유자, 그룹등을 확인할 수 있습니다.
$ ls -l
drwxr-xrw- 2 user1 user1 4096 Sep 5 16:21 hello
-rw-r--r-- 1 user1 user1 0 Sep 5 16:21 file1.txt
여기서
drwxr-xr-x
는 권한을 나타내며, user1은 소유자와 그룹을 나타냅니다.hello 폴더를 기준으로 아래와 같은 권한을 가지게 됩니다.
- 소유자 : rwx (읽기, 쓰기, 실행)
- 그룹 : r-x (읽기, 실행)
- 그 외: rw- (읽기, 쓰기)
🤔만약 user2로 변경하고 나서 /home/user1을 확인해보면 아래와 같은 문구가 나오게 됩니다.
ls -l /home/user1
ls: cannot open directory /home/user1: Permission denied
위와 같은 상황이 발생한 이유는 권한이 없기 때문입니다.
권한을 확인하기 위해ls -ld
를 실행해보면 해당 디렉토리의 권한을 확인 할 수 있습니다.
ls -dl /home/user1
drwx------. 5 user1 user1 279 Sep 6 10:42 /home/user1
🤔보시면 소유자에 대해서는 모든 권한이 풀려있지만 그 외에는 모두 막혀 있는 상태입니다.
특히 디렉토리의 경우 파일과는 다르게 x의 의미가 조금 다른데 파일에서는 x가 파일의 실행 가능을 의미했다면 디렉토리의 경우 접근 권한을 의미합니다.
그래서 cd 명령어로 /home/user1로 접근하려고 하면 permission이 없다는 문구가 나오면서 거부하게 됩니다.
😑chmod
명령어는 기본적으로 두 가지 형식으로 사용될 수 있습니다.
😎기호 방식에서는
u
(사용자),g
(그룹),o
(기타),a
(모든 사용자)를 이용하여 권한을 설정합니다.+
(추가),-
(제거),=
(설정) 연산자와 함께 사용합니다.
# 사용자에게 읽기 권한을 추가
chmod u+r myfile.txt
# 그룹에게 쓰기 권한을 제거
chmod g-w myfile.txt
# 모든 사용자에게 실행 권한을 설정
chmod a=x myfile.txt
# 여러 권한을 한번에 설정하기 (아래 명령 실행시 소유자,그룹,그 외의 권한이 모두 rw-로 변경됩니다.)
chmod ugo=rw- myfile.txt
🫡숫자 방식에서는 0-7 사이의 숫자를 이용해 권한을 설정합니다. 각 숫자는 3비트로 이루어져 있으며, 각 비트는 읽기(r=4), 쓰기(w=2), 실행(x=1)에 해당합니다.
0-7까지의 숫자는 다음과 같은 권한을 나타냅니다:
- `0`: `---` (권한 없음)
- `1`: `--x` (실행)
- `2`: `-w-` (쓰기)
- `3`: `-wx` (쓰기 + 실행)
- `4`: `r--` (읽기)
- `5`: `r-x` (읽기 + 실행)
- `6`: `rw-` (읽기 + 쓰기)
- `7`: `rwx` (읽기 + 쓰기 + 실행)
# 소유자에게 읽기/쓰기/실행(7), 그룹에게 읽기/실행(5),
#기타 사용자에게 읽기(4) 권한을 준다
chmod 754 myfile.txt