권한을 전부 풀어버리고 사용하면 별 상관 없지만, 아마 더 심도있는 단계에서 관리하게 되면 항상 마주치게 될 리눅스 권한 관련 설정에 대해 정리합니다. (리눅스 뿐 아니라 UNIX계열 운영체제에서 동일합니다.)
정보처리기사에서도 이 내용을 다루니 알아두면 좋을 것 같습니다.
1. 리눅스 기본 권한 구조
2. chmod 명령어로 권한 변경하기
3. 정보처리기사 문제 보기
1. 리눅스 기본 권한 구조
리눅스에서 ls 명령어를 사용해 파일/디렉토리 구조를 띄우면 기본적으로 다음과 같은 구조를 가집니다.
(기본명령어 ls: 현재 디렉토리의 파일, 이름을 보여줌, ls -a(숨김파일 포함), ls -l(상세 정보 출력), ls -al(숨김파일 및 상세정보 출력))
참고로 아래에서 계속 이야기할 소유자, 그룹, 기타사용자는 아래와 같습니다.
| 항목 | 설명 |
| 소유자 | 파일을 생성한 사용자 계정(기본적으로 소유자) |
| 그룹 | 소유자가 속한 그룹(그룹에 소속된 사용자 공유 가능) |
| 기타 사용자 | 소유자 그룹에 속하지 않은 모든 사용자 |
drwxr-xr-x 2 user group 4096 Jan 16 15:30 example
- 첫번째 문자 (위 예시에서의 d): 파일타입
- -: 일반 파일
- d: 디렉토리
- l: 심볼릭 링크
- c: 문자 디바이스
- b: 블록 디바이스
- 다음 9개 문자 (위 예시에서의 rwxr-xr-x): 권한
- 소유자(user), 그룹(group), 기타 사용자(other) 순으로 3개씩 나뉩니다.
- r: 읽기 권한 (read, 4)
- w: 쓰기 권한(write, 2)
- x: 실행 권한 (execute, 1)
- -: 권한 없음
이를 위의 예시(rwxr-xr-x)에 대입해보면,
- 소유자(user): rwx(읽기, 쓰기, 실행 가능)
- 그룹(group): r-x(읽기, 쓰기 불가, 실행 가능)
- 기타 사용자(other): r-x (읽기, 쓰기 불가, 실행 가능)
으로 이해할 수 있습니다.
- 권한 문자 이후의 한자리이상의 숫자(위 예시에서의 2): 해당 파일/디렉토리의 하드 링크 개수를 나타냅니다. 파일의 경우에는 동일한 파일 데이터를 참조하는 하드 링크의 개수, 디렉토리의 경우에는 디렉토리 자체를 참조하는 링크 수(부모/자식 디렉토리를 포함)를 나타냅니다.
- 소유자 이름(위 예시에서의 user): 파일/디렉토리를 소유한 사용자의 이름
- 그룹 이름(위 예시에서의 group): 파일/디렉토리가 속한 그룹의 이름
- 파일 크기(위 예시에서의 4096): 파일의 경우에는 데이터 크기를 나타냅니다. 디렉토리의 경우에는 메타데이터의 크기(주로 4096바이트)로, 디렉토리에 포함된 항목 정보가 많아지면 증가됩니다.
- 수정 시간(위 예시에서의 Jan 16 15:30): 파일의 마지막 수정된 시간(mtime)을 나타냅니다.
(6개월이 넘은 파일이면 시:분 대신 년도로 표시됩니다.) - 파일/디렉토리의 이름(위 예시에서의 example)
숫자권한(600, 644, 등)
숫자는 위 권한을 더한 값으로 나타냅니다.
- r = 4
- w = 2
- x = 1
- - = 0
따라서 600은 소유자 rw-, 그룹 ---, 기타 사용자 --- (읽기, 쓰기 가능, 나머지는 권한 없음)
644는 소유자 rw-, 그룹 r--, 기타 사용자 r-- (소유자 읽기/쓰기 가능, 나머지는 읽기만 가능)
2. chmod 명령어로 권한 변경하기
1. 숫자를 사용해 권한 변경하기
chmod 755 example
- 소유자: rwx(읽기, 쓰기, 실행 가능)
- 그룹: r-x(읽기, 실행 가능)
- 기타 사용자: r-x(읽기, 실행 가능)
2. 기호를 사용해 권한 변경하기
- u: 소유자(user)
- g: 그룹(group)
- o: 기타 사용자(other)
- a: 모두(all)
chmod u+x example # 소유자에게 실행 권한 추가
chmod g-w example # 그룹의 쓰기 권한 제거
chmod o+r example # 기타 사용자에게 읽기 권한 추가
chmod a-x example # 모두의 실행 권한 제거
권한 명령어
- chmod(Change Mode): 파일 및 디렉토리의 권한을 변경.
- chown(Change Owner): 파일 및 디렉토리의 소유자 또는 소유 그룹을 변경.
- chown newuser file.txt → 소유자를 newuser로 변경
- chown newuser:newgroup file.text → 소유자와 그룹을 동시에 변경
- chgrp(Change Group): 파일 및 디렉토리의 소유 그룹만 변경.
- chgrp newgroup file.text → 소유 그룹을 newgroup으로 변경
+ UMASK
(이 명령어는 정보처리기사 문제에서 자주 봤다. 그래서 중요한듯 싶어 따로 정리한다.)
: 새 파일/디렉토리 생성 시 기본 권한에서 umask값을 뺀 권한이 설정된다(일반적으로 파일은 666에서, 디렉토리는 777에서 umask 값을 뺀다.)
왜 빼기로 설정하나?
umask는 보안과 편리함을 위해 새로 생성되는 파일과 디렉토리의 기본 권한을 제한하는 데 사용된다.
새로 생성되는 파일/디렉토리는 소유자, 그룹, 기타 사용자 모두에게 권한이 열려있는 상태로 만들어질 수 있는데, 이는 보안상의 위험이 있기 때문에, umask를 통해 기본 권한을 제한한다.
즉, 기본권한에서 "제거해야할 권한"을 설정하는 방식이므로 빼기로 계산한다.
만약 추가 방식으로 작동하면, 모든 권한이 0에서 시작하므로 매번 추가 권한을 지정해야 하기 때문에(ㅋㅋㅋ) 비효율적이고 복잡하다.
예시 1: umask 022(기본값)
- 파일: 기본권한 666에서 022를 뺌 → 결과 권한 644 (rw-r--r--) ≫ 소유자(읽기, 쓰기), 그룹(읽기), 기타 사용자(읽기)
-디렉토리: 기본권한 777에서 022를 뺌 → 결과 권한 755 (rwxr-xr-x) ≫ 소유자(읽기, 쓰기, 실행), 그룹(읽기, 실행), 기타 사용자(읽기, 실행)
예시 2: umask 077 (보안강화)
- 파일: 기본권한 666에서 077을 뺌 → 결과 권한 600 (rw-------) ≫ 소유자(읽기, 쓰기), 그룹(X), 기타 사용자(X)
- 디렉토리: 기본권한 777에서 077을 뺌 → 결과 권한 700 (rwx------) ≫ 소유자(읽기, 쓰기, 실행), 그룹(X), 기타 사용자(X)
umask 명령어
- umask: umask 확인
- umask ???: umask 변경
3. 정보처리기사 문제 보기
다음 설명에 대한 명령어를 작성하시오.
- 파일 또는 디렉토리의 권한을 변경하는 명령어
- UNIX 및 UNIX 계열 운영체제에서 사용
- 파일 소유자에게는 모든 권한을, 파일 소유 그룹에게는 읽기와 실행 권한을,
다른 사용자에게는 실행 권한만 부여함
정답은 chmod 751
'Computer Science' 카테고리의 다른 글
| 확장자명은 무슨 역할을 하나 ? (1) | 2025.02.18 |
|---|---|
| 정적 콘텐츠를 파일로 저장하기 ? vs Base64 방식으로 저장하기 ? (4) | 2025.02.07 |
| 운영체제의 메모리 관리 방식에 대해 알아보기 (3) | 2025.01.17 |
| 메모리 구조 알아보기 (6) | 2025.01.09 |
| 컴파일러(Compiler)와 인터프리터(Interpreter) 알아보기 (4) | 2025.01.07 |