리눅스 명령어(chmod)
Linux에서의 chmod 명령어 설명
chmod(change mode)는 Ubuntu를 포함한 Linux와 Unix 시스템에서 파일과 디렉토리의 접근 권한을 변경하는 명령어로, 시스템에서 파일 보안과 접근 제어를 위한 핵심 명령어입니다.
기본 사용법
chmod [옵션] 모드 파일명
권한 설정 방식
chmod는 두 가지 방식으로 권한을 설정할 수 있습니다:
1. 숫자(8진수) 모드
각 권한에 숫자를 할당합니다:
- 읽기(r) = 4
- 쓰기(w) = 2
- 실행(x) = 1
이 숫자들을 소유자, 그룹, 기타 사용자 순으로 합산하여 사용합니다.
예시:
chmod 755 file.txt # 소유자(rwx=7), 그룹(r-x=5), 기타(r-x=5)
chmod 644 file.txt # 소유자(rw-=6), 그룹(r--=4), 기타(r--=4)
chmod 700 script.sh # 소유자(rwx=7), 그룹(---=0), 기타(---=0)
2. 기호 모드
사용자 유형, 연산자, 권한을 기호로 표현합니다:
사용자 유형:
- u: 소유자(user)
- g: 그룹(group)
- o: 기타 사용자(others)
- a: 모든 사용자(all) – 기본값
연산자:
- +: 권한 추가
- -: 권한 제거
- =: 권한 지정(기존 권한 대체)
권한:
- r: 읽기
- w: 쓰기
- x: 실행
예시:
chmod u+x script.sh # 소유자(user)에게 실행 권한 추가
chmod a-w file.txt # 모든(all) 사용자의 쓰기 권한 제거
chmod ug=rw,o=r file.txt # 소유자(user)와 그룹(group)에 읽기/쓰기, 기타에 읽기만 설정
자주 사용되는 옵션
-R또는--recursive: 지정된 디렉토리와 그 안의 모든 파일/하위 디렉토리에 재귀적으로 적용-v또는--verbose: 처리되는 모든 파일의 진단 정보 출력-c또는--changes:-v와 비슷하지만 변경된 경우에만 출력-f또는--silent: 대부분의 오류 메시지 표시 안 함
예시:
chmod -R 755 디렉토리명 # 디렉토리와 그 안의 모든 내용에 755 권한 적용
chmod -v u+x script.sh # 소유자에게 실행 권한 추가하고 결과 출력
특수 권한
- SUID(4000): 실행 시 파일 소유자의 권한으로 실행 (
chmod u+s file) - SGID(2000): 실행 시 그룹 소유자의 권한으로 실행 (
chmod g+s file) - Sticky bit(1000): 디렉토리에 설정 시 소유자만 파일 삭제 가능 (
chmod +t directory)
이러한 특수 권한은 숫자 모드에서 네 번째 숫자로 표현됩니다:
chmod 4755 file # SUID 설정, rwsr-xr-x
chmod 2755 file # SGID 설정, rwxr-sr-x
chmod 1777 dir # Sticky bit 설정, rwxrwxrwt
chmod 명령어 예시
상황 1: 스크립트 파일에 실행 권한 부여하기
스크립트 파일을 만들었는데 실행이 안 되는 경우가 많습니다.
# 스크립트 파일 생성
$ echo '#!/bin/bash' > hello.sh
$ echo 'echo "안녕하세요!"' >> hello.sh
# 실행 시도
$ ./hello.sh
bash: ./hello.sh: Permission denied
# 현재 권한 확인
$ ls -l hello.sh
-rw-r--r-- 1 user group 32 Apr 22 10:00 hello.sh
# 실행 권한 부여
$ chmod +x hello.sh
# 권한 변경 확인
$ ls -l hello.sh
-rwxr-xr-x 1 user group 32 Apr 22 10:00 hello.sh
# 이제 실행 가능
$ ./hello.sh
안녕하세요!
상황 2: 중요한 설정 파일 보호하기
중요한 설정 파일을 다른 사람이 수정하지 못하게 할 때:
# 설정 파일 생성
$ echo "중요한 설정" > config.txt
# 현재 권한 확인
$ ls -l config.txt
-rw-r--r-- 1 user group 14 Apr 22 10:05 config.txt
# 소유자만 읽고 쓸 수 있게 변경
$ chmod 600 config.txt
# 권한 변경 확인
$ ls -l config.txt
-rw------- 1 user group 14 Apr 22 10:05 config.txt
상황 3: 공유 디렉토리 설정하기
팀원들과 파일을 공유하는 디렉토리를 만들 때:
# 디렉토리 생성
$ mkdir shared_project
# 모든 팀원이 파일을 생성하고 수정할 수 있게 설정
$ chmod 775 shared_project
# 권한 확인
$ ls -ld shared_project
drwxrwxr-x 2 user group 4096 Apr 22 10:10 shared_project
# 디렉토리 내 모든 파일에 동일한 권한 적용
$ touch shared_project/file1.txt shared_project/file2.txt
$ chmod -R 664 shared_project
# 파일 권한 확인
$ ls -l shared_project/
-rw-rw-r-- 1 user group 0 Apr 22 10:12 file1.txt
-rw-rw-r-- 1 user group 0 Apr 22 10:12 file2.txt
상황 4: 특정 권한만 변경하기
파일에서 모든 사용자의 쓰기 권한만 제거하고 싶을 때:
$ touch document.txt
$ ls -l document.txt
-rw-rw-r-- 1 user group 0 Apr 22 10:15 document.txt
# 모든 사용자의 쓰기 권한 제거
$ chmod a-w document.txt
# 권한 확인
$ ls -l document.txt
-r--r--r-- 1 user group 0 Apr 22 10:15 document.txt
# 소유자에게만 쓰기 권한 다시 추가
$ chmod u+w document.txt
# 최종 권한 확인
$ ls -l document.txt
-rw-r--r-- 1 user group 0 Apr 22 10:15 document.txt
- 파일의 소유자 변경
chown lee myfile.txt
이명령어는 myfile.txt 파일의 소유자를 lee로 변경한다.
- 파일의 소유자와 그룹변경
chown lee:kim myfile.txt
이 명령어는 myfile.txt 파일의 소유자를 lee로 그룹을 kim으로 변경한다.
3. 디렉토리와 그하위 항목의 소유자 및 그룹 변경
chown -R kim/lee /path/to/directory
‘-R’옵션은 지정된 디렉토리 내의 모든 파일과 하위 디렉토리에 대해 재귀적으로 소유자와 그룹을 변경한다.
이런 식으로 chmod는 파일이나 디렉토리의 접근 권한을 상황에 맞게 세밀하게 조정할 수 있는 강력한 도구입니다.
chown 명령어를 사용하는 이유
- 파일 및 디렉토리 접근 권한관리
- 특정 파일이나 디렉토리에 접근할 수 있는 사용자를 변경하거나 제한해야 할 때 사용
- 특정 파일을 다른 사용자에게 양도하거나, 다른 사용자가 파일을 읽거나 수정할 수 없도록 하기 위해 소유자를 변경할 수 있다.
- 보안관리
- 파일이 잘못된 사용자에게 소유되어 있는 경우,해당 사용자가 불필요하게 해당 파일에 접근할 수있다. 이를 방지하기 위해 소유자를 올바르게 설정해야된다.
- 시스템의 민감한 파일을 보호하기 위해 올바른 소유자와 그룹을 설정하는 것이 중요하다.
- 파일 복사 후 소유자 변경
- 시스템에서 파일을 복사하거나 이동할 때 파일의 소유자가 변경되지 않으면 다른 사용자가 해당 파일을 접근하지 못할 수 있다. 이 경우 chown을 사용하여 파일의 소유자를 수정해야된다.
주의사항
- chown 명령어는 일반 사용자가 자신의 파일에 대해서만 사용할 수 있으며, 시스템 전체 파일의 소유권을 변경하려면 관리자(root) 권한이 필요하다
- 잘못 사용하면 중요한 시스템 파일의 소유자가 변경되어 시스템에 문제가 발생할 수 있으므로 주의해야 한다.