Linux file permission 변경은 리눅스 운영체제에서 사용하는 파일 및 디렉터리의 권한을 확인하고 관리하는 중요한 작업 중 하나 입니다. 리눅스 명령을 이용하여 권한을 확인하고 변경하는 방법에 대해서 알아보겠습니다.
테스트 환경
• Red Hat Enterprise Linux (RHEL)
Linux File permission 확인
리눅스의 ls 명령어를 이용해서 파일의 권한을 확인할 수 있습니다.
# ls -l
-rw-r-xr-x 1 root root 16 Apr 24 19:08 test.txt
위 파일 권한의 내용을 보면 아래와 같이 나눠볼 수 있습니다. 파일 권한 부분을 제외한 다른 부분들은 (소유자, 소유 그룹, 크기, 수정 일자, 수정시간, 파일 이름) 이름 그대로 알아보기 쉽습니다. 따라서 파일 권한 부분만 자세히 확인해 보도록 하겠습니다.
1. Linux file permission
1) Linux file permission 3가지 범주
- 소유자(user), 그룹(group), 그 외(other)
2) 리눅스 권한 3가지
- 읽기(Read), 쓰기(Write), 실행(Execute)
권한은 디렉터리와 파일에서는 다음과 같은 차이가 있습니다. 중요한 차이는 디렉터리에 실행 권한이 부여되는 경우 디렉터리 안으로 이동할 수 있다는 것입니다.
권 한 | 파일 | 디렉터리 |
---|---|---|
읽기 (r) | 파일을 읽을 수 있는 권한 | 디렉터리의 내용을 볼 수 있는 권한 |
쓰기 (w) | 파일을 수정할 수 있는 권한 | 파일 및 디렉터리를 추가 삭제할 수 있는 권한 |
실행 (x) | 파일을 실행할 수 있는 권한 | 디렉터리 안으로 이동할 수 있는 권한 |
이에 따라 위의 파일을 분석해 보면 test.txt 파일은 다음과 같은 조건을 충족합니다.
- root 유저가 소유하고 있으며 소유자는 파일을 읽고(r), 편집(w) 할 수 있는 권한이 있습니다.
- 소유 그룹 또한 root이며 그룹에는 읽고(r), 실행(x) 할 수 있는 권한이 있습니다.
- root가 아닌 사용자는 test.txt 파일을 읽고(r) 실행(x) 할 수 있습니다.
파일의 권한을 분석해 보면 리눅스의 파일에는 권한뿐만 아니라 소유자와 그룹이 지정이 되어있는 걸 보실 수 있습니다. 그러므로 권한 변경 없이 파일의 소유자와 소유 그룹의 변경에 의해서도 사용자의 파일 접근 가능 여부가 달라질 수 있습니다. 이제부터 파일 권한 변경뿐만 아니라 소유자, 소유 그룹을 변경하는 방법에 대해서 확인해 보겠습니다.
Linux file permission 변경( chmod )
Linux file permission을 변경하는 방법에는 “chmod” 명령을 사용할 수 있습니다. chmod 명령으로 권한을 변경하는 방법은 크게 심볼릭 방법과 8진수 방식 2가지로 나뉩니다.
1. 심볼릭 방식
심볼릭 변경 방식은 어느 권한의 범주에(user, group, other, all) 어떤 권한을 부여하거나 뺄건지에 대한 방식으로 명령을 사용할 수 있습니다.
# chmod <권한 범주><연산자><권한>
권한 범주 | 범주 | 설명 |
---|---|---|
u | user | 파일 소유자 |
g | group | 파일 그룹의 멤버 |
o | other | 소유자나 그룹의 멤버가 아닌 다른 모든 사용자 |
a | all | user, group, other 모두 포함 |
연산자 | 설명 |
---|---|
+ | 권한 추가 |
– | 권한 삭제 |
= | 권한 일치 |
권 한 | 기 능 |
---|---|
r | 읽기 |
w | 쓰기 |
x | 실행 |
심볼릭 방식 예시)
- 모든 사용자들에게서 권한을 제거
# chmod a-rwx test.txt
# ll
total 0
---------- 1 root root 0 Aug 28 22:18 test.txt
- 소유에게 읽기, 쓰기, 실행 권한을 부여
# chmod u+rwx test.txt
# ll
total 0
-rwx------ 1 root root 0 Aug 28 22:18 test.txt
- 소유 그룹에게 읽기와 실행 권한을 부여
# chmod g+rx test.txt
# ll
total 0
-rwxr-x--- 1 root root 0 Aug 28 22:18 test.txt
- other 사용자에게 읽기 권한을 부여
# chmod o+r test.txt
# ll
total 0
-rwxr-xr-- 1 root root 0 Aug 28 22:18 test.txt
권한의 변화를 보면 아시겠지만 심볼릭 방식은 딱 지정한 범주의 권한만 제거하거나 삭제합니다. 요청하지 않은 권한은 제거하지 않고 그대로 유지합니다.
2. 8진수 방식
8진수 방식에서는 권한을 아래의 숫자로 계산합니다. 각 권한의 숫자를 더하여 권한을 할당할 수 있습니다.
User | Group | Other | ||||||
---|---|---|---|---|---|---|---|---|
Read | Write | execute | Read | Write | execute | Read | Write | execute |
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
8진수 방식 예시)
- 유저에게 읽기(4), 쓰기(2), 실행(1) 권한, 그룹에게 읽기(4)와 실행(1) 권한을 부여하고 기타 사용자에게 읽기(4) 권한만 제공하려고 한다면 아래와 같이 계산할 수 있습니다.
read | write | excute | SUM | |
---|---|---|---|---|
user | 4 | 2 | 1 | 6 |
group | 4 | 1 | 5 | |
other | 4 | 4 |
권한을 모두 더해보면 위의 표처럼 user는 6, group은 5, other는 4가 나오므로 다음과 같이 권한을 설정할 수 있습니다.
# chmod 654 test.txt
# ll
total 0
-rw-r-xr-- 1 root root 0 Aug 28 22:18 test.txt
- 유저에게만 읽기, 쓰기, 실행 권한을 부여한다면 다음과 같이 변경할 수 있습니다.
# chmod 700 test.txt
# ll
total 0
-rwx------ 1 root root 0 Aug 28 22:18 test.txt
리눅스에 파일과 디렉터리의 내용을 상세히 보여주는 “stat”이라는 명령어가 있습니다. stat 명령을 이용하면 파일 권한을 8진수 방식의 표기법으로도 확인할 수 있습니다
# stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 538612781 Links: 1
Access: (0700/-rwx------) Uid: ( 0/ root) Gid: ( 0/ root)
...
파일 및 디렉터리 소유자 및 그룹 변경 (chown)
chown 명령을 이용하면 파일의 소유자와 그룹을 모두 변경할 수 있습니다.
- test.txt 파일을 test 유저 소유로 변경
# chown test test.txt
# ll
total 0
-rwx------ 1 test root 0 Aug 28 22:18 test.txt
- test.txt 파일을 test 그룹 소유로 변경chown 명령을 이용하여 그룹을 변경할 땐 그룹 이름 앞에 :(콜론)을 이용하여 그룹임을 나타낼 수 있습니다.
# chown :test test.txt
# ll
total 0
-rwx------ 1 test test 0 Aug 28 22:18 test.txt
- test.txt 파일을 admin을 소유자로, admin 그룹을 소유그룹으로 변경
# chown admin:admin test.txt
# ll
total 0
-rwx------ 1 admin admin 0 Aug 28 22:18 test.txt
chown 명령을 이용해서 소유자와 그룹을 변경할 수 있는 부분을 봤습니다. 소유 그룹만 변경하는 경우에는 chgrp 명령을 사용할 수도 있지만 chown이 모두 커버할 수 있으므로 따로 언급하지는 않았습니다.
우리가 소유자나 소유 그룹을 변경할 때 디렉터리 아래 모든 파일 또는 디렉터리가 동일한 설정이 적용되도록 설정해야 하는 경우가 있습니다. chown 명령에 “-R” 옵션을 이용하면 하위 경로의 모든 파일 및 디렉터리의 소유권을 한 번에 변경할 수 있습니다.
- /test 디렉터리 아래 모든 파일 및 디렉터리의 내용을 admin 사용자와 admin 그룹으로 변경
# chown -R admin:admin /test
마치며
추가적으로 “chown” 명령어로 소유권을 변경하는 경우에는 -R 옵션을 이용하여 하위 모든 파일에도 적용할 수 있는 부분을 봤습니다. “chmod” 명령어도 동일한 -R 옵션을 제공하지만 파일의 권한을 일제히 같은 걸로 설정하는 부분은 위험합니다. 디렉터리와 파일은 기본 생성되는 권한이 다르며, 각 파일마다 가져야 하는 권한이 존재합니다. 따라서 “chmod” 명령에 -R 옵션을 사용해야 하는 경우에는 이전 정보를 기록해 두는 등 주의해서 사용하시기 바랍니다.