터미널과 파일 권한
왜 알아야 할까
프로그래밍을 시작하고 어느정도 지났을 때 os 터미널에 각 파일, 폴더마다 실행 권한이라는 게 있다는 사실을 알았다. 가상환경을 구성하고 sudo라는 코드가 낯설지 않아지면서, superuser가 존재하는 이유가 있다는 것과 superuser가 아닌 유저와 그룹이 존재한다는 것을 알게 되었다. 하지만 아무 생각없이 sudo, chown 코드를 치다가 어느 순간 알지도 못하는 코드를 치고 있는 게 무의미하게 느껴져셔 리눅스의 계정과 권한에 대해 정리하게 되었다.
계정
사용 권한이란
- 리눅스 시스템에서 퍼미션, 즉 권한은 3가지 유형의 유저와 3가지 권한이 있다.
- 사용권한은 총 10가지로 나타낼 수 있다. 첫 번째 권한은 해당 객체가 디렉토리인지 아닌지를 구분한다. 폴더라면 d로 파일이라면 -로 표시한다.
- 나머지 9개 권한은 각 3개씩 3개의 권한집합으로 구분한다. 각 권한집합은 순서대로 유저, 그룹, 모든 사람에 대해서 권한을 나타내고, 각각 read, write, execute 세가지 권한을 나타냅니다.
예를 들어 -rwer--r--이 구문은
- / rwe / r-- / r-- 세가지
이 객체는 파일이고, 소유자는 읽기, 쓰기, 실행을 가능하고 그룹 및 방문자는 읽기만 가능하다는 것을 확인할 수 있다.
적용
상황 : 나는 맥북에 일기장 폴더를 만들어 일기와 가끔은 시를 쓰기도 한다. 이 일기장은 나만 보고 싶은데 갑작스럽게 다른 사람에게 컴퓨터를 잠깐 사용하게 둘 때가 있었다. 이럴 때마다 일기장 폴더의 보안에 대해서 걱정하고 있었는데, chmod를 사용해서 이 문제를 해결하고 싶었다.
- 일기장은 폴더다
- 기본 유저는 yunsu이다.
- 터미널을 작동시켰을 때 기본적으로 폴더를 루트 계정 말고는 읽지도 못하도록 하고 싶다.
- 폴더 뿐만 아니라 내부까지 모두 권한을 바꿔줘야 안전하다고 마음 놓을 수 있을 것 같다.
- alias를 사용해서 일기장을 읽거나 쓸 일이 있을 때 일기장 폴더 권한을 바꿀 수 있다면 좋겠다.
chown : 특정 파일, 폴더에 대한 계정의 권한을 제한할 수 있다.
$ chmod 400 일기장
해결 과정
000으로 권한을 변경하게 되면 일기장의 권한은
d | - - - | - - - | - - - |
---|---|---|---|
폴더 | 아무권한 없음 | 아무권한 없음 | 아무권한 없음 |
소유자 | 그룹 | 낯선 사람 |
700으로 권한을 변경하게 되면 일기장의 권한은
d | - - - | - - - | - - - |
---|---|---|---|
폴더 | 아무권한 없음 | 아무권한 없음 | 아무권한 없음 |
소유자 | 그룹 | 낯선 사람 |
즉 yunsu라는 유저만 폴더에 들어가고, 읽고, 쓸 수 있는 권한을 가지게 된다.
alias : 좀 더 편하게 하기
기본 상태로 일기장을 잠궈놓고 싶기 때문에 때문에 그리고 나는 oh-my-zsh를 사용하고 있기 때문에 터미널이 켜질때마다 자동으로 실행되는 zshrc 파일에 위의 명령어를 추가시켜 주었다.
추가적으로 일기장을 잠그고 싶을 떄는 lock_diary라는 명령어로
그리고 일기장을 보고 싶을 때는 unlock_diary라는 명령어로 원하는 기능을 실행하고 싶었다. alias를 사용하여 단축 명령어를 등록하였다.
$ vi ~/.zshrc
단축 명령어로 일기장을 제한할 수 있게 되었다.~
의도치 않게 배운 것들
- 폴더 디렉토리에 들어가는 작업은 파일을 실행시키는 것과 같이 (cd) 실행 권한이다.
- 파일을 읽는 것 뿐만 아니라 폴더 디렉토리에 들어있는 파일 목록을 보는 것도 폴더 읽기 권한에 해당한다.
나머지 유용한 명령어들
-r : 하위 그룹도 포함 -f : force 강제
-rf : 하위그룹까지 강제로
-v : verbose 수다쟁이. 항목들을 화면에 출력해주는 옵션
clear : 화면 지우기
whoami : 사용자 계정 확인하기
sudo -s : root로 로그인하기
sudo fs_usage: 파일 시스템 처리과정 모니터링
맥에서 디스크에 접근하여 어떤 파일을 읽고 쓰는지 모니터링 할 수 있다. 스포트라이트(spotlight) 처리과정을 모니터링할 때 유용하다.
Ditto : 대용량 폴더 복사하기
uptime : 맥 가동 시간 확인
현재 시간, 전원 킨 후 컴퓨터 가동 시간 등이 표시된다.
yes : CPU 가동 테스트
맥의 충돌 가능성을 고의로 유발하기 위해서 자주 사용하는 명령어라고 한다. ‘터미널’ 프로세스의 CPU 사용량이 100% 까지 폭주하게 된다. 스포트라이트로 ‘활성 상태 보기’를 동작시켜 프로세스 점유율을 확인할 수 있다.
mkfile : 원하는 크기의 바이너리 파일 생성
$ mkfile 1m test.txt
‘1m’은 1 메가 크기를 뜻한다.
크기 단위 : ‘g’, ‘m’, ‘k’ ,’b’ 를 사용하면 기가, 메가, 킬로, 바이트 사이즈가 된다.
더 생각해볼 질문
- 객체에 권한을 제한할 때 적용되는 우선순위는 사용자, 그룹, 낯선 사람(손님)이 될거라고 생각했다. 그룹에 허용 권한을 주고 ‘yunsu’에게 권한을 주지 않으면 어떻게 될까.
- 문제를 해결하기 위해 새로운 명령어 chgrp