리눅스 시스템에서 파일과 디렉토리를 관리하다 보면 반드시 마주치게 되는 것이 바로 ‘권한(permission)’과 ‘소유권(ownership)’입니다. 이 두 가지 요소는 리눅스의 보안과 사용자 관리의 근간을 이루는 핵심 개념인데요. 오늘은 이러한 권한과 소유권을 관리하는 세 가지 필수 명령어 – chmod
, chown
, chgrp
에 대해 완벽하게 알아보겠습니다.
이 명령어들을 제대로 이해하고 활용하면 시스템 관리가 한결 수월해지고, 보안 사고도 예방할 수 있답니다. 자세히 살펴볼까요?
1. 리눅스 권한 시스템 기본 개념
리눅스에서 모든 파일과 디렉토리는 세 가지 권한 유형과 세 가지 사용자 카테고리를 가집니다.
권한 유형:
- 읽기(r, Read): 파일 내용을 읽거나 디렉토리 목록을 볼 수 있음
- 쓰기(w, Write): 파일 내용을 수정하거나 디렉토리에 파일을 생성/삭제할 수 있음
- 실행(x, Execute): 파일을 실행하거나 디렉토리에 접근할 수 있음
사용자 카테고리:
- 소유자(u, User): 파일/디렉토리의 소유자
- 그룹(g, Group): 파일/디렉토리가 속한 그룹의 멤버
- 기타(o, Others): 소유자도 그룹 멤버도 아닌 모든 사용자
파일 권한은 ls -l
명령어로 확인할 수 있으며, 다음과 같은 형태로 표시됩니다:
-rwxr-xr-- 1 user group 4096 Apr 2 10:30 example.txt
첫 번째 문자(‘-‘)는 파일 유형을 나타내고, 이어지는 9개 문자는 3개씩 묶여 소유자(rwx), 그룹(r-x), 기타(r–)의 권한을 표시합니다.
이제 이러한 권한과 소유권을 관리하는 명령어들을 살펴보겠습니다.
2. chmod: 파일 권한 변경 명령어
chmod
(change mode)는 파일이나 디렉토리의 접근 권한을 변경하는 명령어입니다. 권한을 변경하려면 해당 파일의 소유자이거나 루트(root) 권한이 필요합니다.
2.1 chmod 기본 문법
chmod [옵션] 모드 파일명
2.2 chmod 주요 옵션
-R, --recursive
: 디렉토리와 그 안의 모든 내용에 재귀적으로 적용-f, --silent, --quiet
: 오류 메시지를 표시하지 않음-v, --verbose
: 처리되는 모든 파일에 대한 진단 정보 출력--reference=파일명
: 지정된 파일의 권한을 참조하여 동일하게 설정
2.3 chmod 모드 지정 방식
chmod는 두 가지 방식으로 모드를 지정할 수 있습니다:
1) 심볼릭 모드 (Symbolic Mode)
사용자 카테고리(u, g, o, a), 연산자(+, -, =), 권한(r, w, x)을 조합하여 사용합니다.
+
: 지정한 권한 추가-
: 지정한 권한 제거=
: 지정한 권한으로 설정(기존 권한 덮어쓰기)a
: 모든 사용자(all, u+g+o와 동일)
예시: 소유자에게 실행 권한 추가하기
chmod u+x script.sh
이 명령어는 소유자(u)에게 실행(x) 권한을 추가(+)합니다. 파일 소유자가 스크립트를 실행할 수 있게 해주죠.
예시: 모든 사용자에게 읽기 권한 부여하기
chmod a+r important.txt
위 명령어는 모든 사용자(a)에게 읽기(r) 권한을 추가하여, 누구나 해당 파일을 읽을 수 있게 합니다.
예시: 그룹과 기타 사용자의 쓰기 권한 제거하기
chmod go-w config.ini
이 명령어는 그룹(g)과 기타 사용자(o)의 쓰기(w) 권한을 제거(-)합니다. 설정 파일이 무단으로 수정되는 것을 방지할 때 유용합니다.
2) 8진수 모드 (Octal Mode)
권한을 숫자로 표현하는 방식으로, 각 자릿수는 소유자, 그룹, 기타 사용자의 권한을 나타냅니다.
- 4: 읽기 권한(r)
- 2: 쓰기 권한(w)
- 1: 실행 권한(x)
- 0: 권한 없음
위 값들을 조합하여 원하는 권한을 설정합니다:
- 7 (4+2+1): 읽기, 쓰기, 실행 권한 (rwx)
- 6 (4+2): 읽기, 쓰기 권한 (rw-)
- 5 (4+1): 읽기, 실행 권한 (r-x)
- 4 (4): 읽기 권한만 (r–)
- 0: 모든 권한 없음 (—)
예시: 소유자에게 모든 권한, 그룹에 읽기와 실행, 다른 사용자에게 읽기만 허용
chmod 754 script.sh
여기서 7(rwx)은 소유자 권한, 5(r-x)는 그룹 권한, 4(r–)는 기타 사용자 권한을 의미합니다. 이는 실행 스크립트의 일반적인 권한 설정입니다.
예시: 중요한 설정 파일 보호하기
chmod 600 id_rsa
600(rw——-)은 소유자만 읽고 쓸 수 있고 다른 모든 사용자는 접근할 수 없는 매우 제한적인 권한입니다. SSH 키와 같은 보안 파일에 적합합니다.
2.4 chmod 사용 시 주의사항
- 시스템 파일의 권한을 변경할 때는 신중해야 합니다. 잘못된 권한 설정은 시스템 장애를 일으킬 수 있습니다.
- 실행 파일에 실행 권한이 없으면 실행할 수 없으며, 디렉토리에 실행 권한이 없으면 접근할 수 없습니다.
-R
옵션을 사용할 때 특히 주의하세요. 대량의 파일 권한이 한 번에 변경됩니다.- 일반적으로 ‘777’(모든 사용자에게 모든 권한)은 보안상 위험하므로 필요한 경우에만 사용하세요.
3. chown: 파일 소유자 변경 명령어
chown
(change owner)은 파일이나 디렉토리의 소유자 또는 소유 그룹을 변경하는 명령어입니다. 이 명령어는 주로 루트 사용자나 sudo 권한을 가진 사용자가 사용합니다.
3.1 chown 기본 문법
chown [옵션] 소유자[:그룹] 파일명
3.2 chown 주요 옵션
-R, --recursive
: 디렉토리와 그 안의 모든 내용에 재귀적으로 적용-c, --changes
: 변경사항이 있을 때만 상세 정보 출력-f, --silent, --quiet
: 오류 메시지를 표시하지 않음-v, --verbose
: 처리되는 모든 파일에 대한 진단 정보 출력--reference=파일명
: 지정된 파일의 소유자를 참조하여 동일하게 설정
3.3 chown 사용 예시
예시: 파일 소유자 변경하기
chown newuser file.txt
이 명령어는 file.txt의 소유자를 ‘newuser’로 변경합니다. 다른 사용자에게 파일 관리 권한을 넘길 때 유용합니다.
예시: 파일의 소유자와 그룹 동시에 변경하기
chown newuser:newgroup document.pdf
위 명령어는 document.pdf의 소유자를 ‘newuser’로, 소유 그룹을 ‘newgroup’으로 변경합니다. 콜론(:) 대신 점(.)을 사용할 수도 있습니다.
예시: 디렉토리와 그 내용의 소유자 모두 변경하기
chown -R webuser:webgroup /var/www/html/
이 명령어는 웹 디렉토리와 그 안의 모든 파일/디렉토리의 소유자를 ‘webuser’로, 소유 그룹을 ‘webgroup’으로 재귀적으로 변경합니다. 웹 서버 관리에 자주 사용되는 명령어입니다.
3.4 chown 사용 시 주의사항
- 루트 권한이 필요한 명령어이므로 일반 사용자는 sudo를 사용해야 합니다.
- 시스템 파일의 소유권을 변경하면 시스템 기능에 영향을 줄 수 있으니 주의하세요.
- 파일을 다른 사용자에게 넘기면 원래 소유자는 더 이상 파일을 관리할 수 없게 될 수 있습니다.
- 존재하지 않는 사용자나 그룹으로 변경하려고 하면 오류가 발생합니다.
4. chgrp: 파일 그룹 변경 명령어
chgrp
(change group)는 파일이나 디렉토리의 소유 그룹만을 변경하는 명령어입니다. 파일 소유자나 루트 사용자가 실행할 수 있으며, 소유자는 자신이 속한 그룹으로만 변경할 수 있습니다.
4.1 chgrp 기본 문법
chgrp [옵션] 그룹 파일명
4.2 chgrp 주요 옵션
-R, --recursive
: 디렉토리와 그 안의 모든 내용에 재귀적으로 적용-c, --changes
: 변경사항이 있을 때만 상세 정보 출력-f, --silent, --quiet
: 오류 메시지를 표시하지 않음-v, --verbose
: 처리되는 모든 파일에 대한 진단 정보 출력--reference=파일명
: 지정된 파일의 그룹을 참조하여 동일하게 설정
4.3 chgrp 사용 예시
예시: 파일의 그룹 변경하기
chgrp developers project.c
이 명령어는 project.c 파일의 소유 그룹을 ‘developers’로 변경합니다. 개발팀이 공동으로 파일에 접근해야 할 때 유용합니다.
예시: 여러 파일의 그룹 한번에 변경하기
chgrp marketing *.pdf
위 명령어는 현재 디렉토리의 모든 PDF 파일의 소유 그룹을 ‘marketing’으로 변경합니다. 마케팅 팀에 문서 접근 권한을 부여할 때 사용할 수 있습니다.
예시: 디렉토리와 그 내용의 그룹 모두 변경하기
chgrp -R finance /home/shared/reports/
이 명령어는 reports 디렉토리와 그 안의 모든 파일/디렉토리의 소유 그룹을 ‘finance’로 재귀적으로 변경합니다. 재무팀이 보고서 디렉토리 전체에 접근해야 할 때 유용합니다.
4.4 chgrp 사용 시 주의사항
- 존재하지 않는 그룹으로 변경하려고 하면 오류가 발생합니다.
- 일반 사용자는 자신이 속한 그룹으로만 파일의 그룹을 변경할 수 있습니다.
- 시스템 파일의 그룹을 변경하면 시스템 기능에 영향을 줄 수 있으니 주의하세요.
- chown 명령어로도 그룹을 변경할 수 있으므로, 소유자와 그룹을 동시에 변경해야 할 경우에는 chown을 사용하는 것이 효율적입니다.
5. 실용적인 권한 설정 예시
5.1 웹 서버 파일 권한 설정
웹 서버에서 운영되는 파일들은 적절한 권한 설정이 중요합니다.
HTML, CSS, 이미지 파일 등 정적 콘텐츠:
chmod 644 /var/www/html/*.html /var/www/html/*.css /var/www/html/images/*
이는 소유자에게 읽기/쓰기 권한을, 그룹과 기타 사용자에게는 읽기 권한만 부여합니다. 웹 서버가 파일을 제공할 수 있지만 수정은 할 수 없게 됩니다.
웹 디렉토리:
chmod 755 /var/www/html/ /var/www/html/images/
디렉토리에는 실행 권한이 필요하므로 755로 설정합니다. 이렇게 하면 웹 서버가 디렉토리를 탐색할 수 있습니다.
5.2 공유 디렉토리 설정
여러 사용자가 함께 작업하는 공유 디렉토리의 권한 설정:
mkdir /home/shared
chown root:project_team /home/shared
chmod 2775 /home/shared
여기서 2775는 특별한 의미가 있습니다. 앞의 ‘2’는 SetGID 비트로, 이 디렉토리 안에 생성되는 모든 새 파일이 자동으로 ‘project_team’ 그룹에 속하게 합니다. 775는 소유자와 그룹에게 모든 권한을, 다른 사용자에게는 읽기와 실행 권한만 부여합니다.
5.3 스크립트 실행 가능하게 만들기
새로 작성한 스크립트를 실행 가능하게 설정하는 일반적인 방법:
chmod +x myscript.sh
또는 더 구체적으로:
chmod 755 myscript.sh
이 명령어는 스크립트 소유자에게 모든 권한을, 다른 사용자에게는 읽기와 실행 권한만 부여하여 누구나 실행은 할 수 있지만 수정은 소유자만 할 수 있게 합니다.
6. 권한 관련 특수 비트
리눅스에는 일반적인 rwx 권한 외에도 세 가지 특수 권한 비트가 있습니다.
6.1 SetUID (SUID) 비트
실행 파일에 설정하면 실행 시 파일 소유자의 권한으로 실행됩니다. 8진수 표기법에서 4000으로 표현됩니다.
chmod u+s program
# 또는
chmod 4755 program
이 권한은 일반 사용자가 root 소유 프로그램을 실행할 필요가 있을 때 사용됩니다(예: passwd 명령어).
6.2 SetGID (SGID) 비트
파일에 설정하면 실행 시 파일 그룹의 권한으로 실행됩니다. 디렉토리에 설정하면 그 안에 생성되는 모든 파일이 디렉토리와 같은 그룹에 속하게 됩니다. 8진수 표기법에서 2000으로 표현됩니다.
chmod g+s directory
# 또는
chmod 2775 directory
이 권한은 공유 디렉토리에서 파일의 그룹 소유권을 일관되게 유지하고 싶을 때 유용합니다.
6.3 Sticky 비트
주로 디렉토리에 설정하며, 설정된 디렉토리 내의 파일은 소유자와 루트만 삭제할 수 있게 합니다. 8진수 표기법에서 1000으로 표현됩니다.
chmod +t directory
# 또는
chmod 1775 directory
이 권한은 /tmp와 같은 공용 디렉토리에서 사용자들이 서로의 파일을 삭제하지 못하도록 할 때 사용됩니다.
이상으로 리눅스의 권한 및 소유자 관리 명령어 및 관련 예시들을 알아봤습니다. 리눅스 시스템은 복잡해 보일 수 있지만, chmod
, chown
, chgrp
명령어를 이해하고 활용하면 파일과 디렉토리의 보안을 효과적으로 관리할 수 있습니다. 이 명령어들은 다중 사용자 환경에서 특히 중요하며, 적절한 권한 설정은 시스템의 보안과 안정성에 큰 영향을 미칩니다.
추가로, 리눅스 파일 시스템에 대한 더 깊은 이해를 위해 관련 명령어인 umask
, getfacl
, setfacl
등도 함께 알아보시면 어떨지 추천드립니다. 🙂