[Linux] 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)

파일과 디렉터리에서는 권한의 의미가 약간 다릅니다. 특히 디렉터리에서 실행 권한(x)은 해당 디렉터리로의 진입을 허용한다는 점이 핵심입니다.

권 한파일디렉터리
읽기 (r)  파일을 읽을 수 있는 권한디렉터리의 내용을 볼 수 있는 권한
쓰기 (w)    파일을 수정할 수 있는 권한        파일 및 디렉터리를 생성/삭제할 수 있음
실행 (x)    파일을 실행할 수 있는 권한  디렉터리 내부로 이동할 수 있음 (cd)

이 기준에 따라 test.txt 파일의 권한을 분석하면 다음과 같습니다.

  • 소유자(root)는 파일을 읽고(r), 쓰고(w), 실행(x)할 수 있습니다.

  • 그룹(root)은 읽기(r), 실행(x) 권한이 있습니다.

  • 기타 사용자도 읽기(r), 실행(x) 권한을 가집니다.

이처럼 파일 권한을 분석해 보면, 리눅스의 파일은 권한 정보뿐만 아니라 소유자와 그룹이 지정되어 있다는 것을 알 수 있습니다. 즉, 소유자나 소유 그룹이 누구냐에 따라 접근 가능 여부가 달라질 수 있습니다. 따라서 단순히 권한 변경뿐 아니라 소유자와 그룹 변경도 중요합니다. 이 글에서는 권한 변경과 함께 소유자 및 그룹 변경 방법도 함께 알아보겠습니다.

 

Linux file permission 변경( chmod )

리눅스에서 파일 권한을 변경하려면 chmod 명령어를 사용합니다. chmod에는 크게 심볼릭 방식(symbolic)과 8진수 방식(octal) 두 가지 방법이 있습니다.

1. 심볼릭 방식

심볼릭 방식은 어떤 사용자 범위(user, group, other, all)에 어떤 권한을 추가하거나 제거할지 명시적으로 지정하는 방식입니다.

# chmod <권한 범주><연산자><권한>

권한 범주범주설명
uuser파일 소유자
ggroup파일 그룹의 멤버
oother        소유자나 그룹의 멤버가 아닌 다른 모든 사용자
aalluser, group, other 모두 포함
연산자   설명
+     권한 추가
-     권한 삭제
=     권한 일치
권 한      기 능
r      읽기
w      쓰기
x      실행

심볼릭 방식 예시)

  • 모든 사용자에게서 권한 제거
# chmod a-rwx test.txt
# ll
---------- 1 root root 0 Aug 28 22:18 test.txt
  • 소유자에게 읽기, 쓰기, 실행 권한 부여
# chmod u+rwx test.txt
# ll
-rwx------ 1 root root 0 Aug 28 22:18 test.txt
  • 소유 그룹에게 읽기와 실행 권한을 부여
# chmod g+rx test.txt
# ll
-rwxr-x--- 1 root root 0 Aug 28 22:18 test.txt
  • other 사용자에게 읽기 권한을 부여
# chmod o+r test.txt
# ll
-rwxr-xr-- 1 root root 0 Aug 28 22:18 test.txt

이처럼 심볼릭 방식은 지정한 범위의 권한만 변경하며, 지정하지 않은 권한은 그대로 유지됩니다. 세밀한 제어가 필요한 경우에 적합합니다.

2. 8진수 방식

8진수 방식은 각 권한(r=4, w=2, x=1)에 대응되는 숫자를 더해서 권한을 부여하는 방식입니다. 세 자리 숫자로 user/group/other 순서대로 권한을 표현합니다.

User  Group  Other  
ReadWriteexecuteReadWriteexecuteReadWriteexecute
421421421

8진수 방식 예시)

  • 유저에게 읽기(4), 쓰기(2), 실행(1) 권한, 그룹에게 읽기(4)와 실행(1) 권한을 부여하고 기타 사용자에게 읽기(4) 권한만 제공하려고 한다면 아래와 같이 계산할 수 있습니다.
 readwriteexcuteSUM
user4216
group4 15
other4  4

예를 들어, user에 7(읽기+쓰기+실행), group에 5(읽기+실행), other에 4(읽기) 권한을 부여하려면 아래와 같이 명령어를 사용합니다.

# chmod 754 test.txt
# ll
-rwxr-xr-- 1 root root 0 Aug 28 22:18 test.txt
  • 유저에게만 모든 권한을 부여하고, group과 other에는 아무 권한도 주지 않으려면 다음과 같이 설정합니다.
# chmod 700 test.txt
# ll
-rwx------ 1 root root 0 Aug 28 22:18 test.txt

리눅스에서는 파일이나 디렉터리의 상세 정보를 확인할 수 있는 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)
...

 여기서 Access 항목을 보면, 0700이라는 8진수 권한과 함께, -rwx------ 형태의 심볼릭 권한도 함께 표시되어 있어 양쪽 방식을 동시에 확인할 수 있습니다.


파일 및 디렉터리 소유자 및 그룹 변경 (chown)

chown 명령어를 사용하면 파일의 소유자와 그룹을 동시에 변경할 수 있습니다.

  • test.txt 파일의 소유자를 test 사용자로 변경
# chown :test test.txt
# ll
-rwx------ 1 test test 0 Aug 28 22:18 test.txt
  • test.txt 파일의 소유 그룹을 test 그룹으로 변경
    그룹을 지정할 때는 콜론(:)을 앞에 붙여 구분합니다.
# chown admin:admin test.txt
# ll
-rwx------ 1 admin admin 0 Aug 28 22:18 test.txt
  • 소유자와 그룹을 모두 admin으로 변경
# chown -R admin:admin /test

chown 명령을 이용하면 소유자와 그룹을 한 번에 변경할 수 있습니다. 단순히 그룹만 변경하려면 chgrp 명령어를 사용할 수도 있지만, chown 하나로 모두 처리할 수 있기 때문에 일반적으로는 chown을 사용하는 것이 더 효율적입니다.


특정 디렉터리 아래의 모든 파일과 하위 디렉터리까지 소유자와 그룹을 일괄 변경하려는 경우에는 -R 옵션을 사용합니다.

  • /test 디렉터리 아래 모든 파일과 디렉터리를 admin 사용자와 admin 그룹으로 변경
# chown -R admin:admin /test

 

마치며

이번 글에서는 파일 및 디렉터리의 권한 설정 방법(chmod)과 소유자 및 그룹 변경 방법(chown)을 정리해 보았습니다. 특히 chown 명령은 -R 옵션을 통해 하위 경로까지 소유권 변경이 가능한 점을 확인했습니다.

반면 chmod 명령어도 -R 옵션을 지원하지만, 디렉터리와 파일의 권한 구조가 다르기 때문에 주의해서 사용해야 합니다. 파일마다 요구되는 권한이 다르므로 일괄 변경 시에는 기존 권한을 기록해 두거나 테스트 환경에서 먼저 적용해보는 것이 좋습니다.

 

참조

https://en.wikipedia.org/wiki/Chmod

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용