Chapter - 사용 권한
Read, Write, Execute 권한
폴더인지 파일인지 확인하기
임의의 폴더와 파일을 생성하고 비교하며 설명한다. 먼저, 폴더와 파일을 생성하기 위해 명령어 mkdir 과 nano 를 이용한다.
mkdir linux
nano helloworld.js
폴더 하나와 파일 하나를 생성했다. 이번에는 명령어 ls -l 을 입력한다.
터미널 결과를 보면, 파일 helloworld.js는 -rw-r--r-- 이라고 출력되었고, 폴더 linux는 drwxr-xr-x 라고 출력되어있다.
첫 시작인 - 와 d 는 각각 not directory와 directory를 나타낸다. 폴더는 d, 파일은 - 로 나타낸다. r, w, x는 각각 read permission, write permission, execute permission으로 읽기 권한, 쓰기 권한, 실행 권한을 나타낸다. 3번에 걸쳐 나타내는 이유는 사용자와 그룹, 나머지에 대한 권한을 표시하기 위해서다. 파일 helloworld.js의 권한은 rw-r--r-- 으로, 소유자는 읽기와 쓰기가 가능하고, 다른 사용자 그룹은 읽기만 가능하다. 폴더 linux의 권한은 rwxr-xr-x 으로, 소유자는 읽기와 쓰기, 실행이 가능하고, 다른 사용자 그룹은 읽기와 실행만 가능하다.
user, group, and other
user
- 파일의 소유자이다.
- 기본적으로 파일을 만든 사람이 소유자가 된다.
- user를 소유자라고 하기도 한다.
group
- 여러 user가 포함될 수 있다.
- 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한을 갖는다.
- 각 user에게 일일이 권한을 할당하는 대신에 모든 user를 group에 추가하고, 파일에 group 권한을 할당할 수 있다.
other
- 파일에 대한 액세스 권한이 있는 다른 user이다.
- 파일을 만들지 않은 다른 모든 user를 의미한다.
- other 권한을 설정하면, 해당 권한을 global 권한 설정이라고 불릴 수도 있다.
chmod: 권한을 변경하는 명령어
명령어 chmod 는 폴더나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있다. OS에 로그인한 사용자와, 폴더나 파일의 소유자가 같을 경우에 명령어 chmod 로 폴더나 파일의 권한을 변경할 수 있다. 만약 OS에 로그인한 사용자와, 폴더나 파일의 소유자가 다를 경우에는 관리자 권한을 획득하는 명령어 sudo 를 이용해 폴더나 파일의 권한을 변경할 수 있다.
명령어 chmod 로 권한을 변경하는 방식은 두 가지가 있다.
- 더하기(+), 빼기(-), 할당(=)과 액세서 유형을 표기해서 변경하는 Symbolic method
- rwx를 3bit로 해석하여, 숫자 3자리로 권한을 표기해서 변경하는 Absolute form
Symbolic method는 액세스 클래스, 연산자, 액세스 타입으로 구분한다.
Access class | Operator | Access Type |
u (user) | + (add access) | r (read) |
g (group) | - (remove access) | w (write) |
o (other) | = (set exact access) | x (execute) |
a (all: u, g, and o) |
명령어 chmod 뒤에 변경할 궈한을 입력한다. 액세스 클래스의 u, g, o, a를 변경할 조건에 따라 조합하여 입력하고, 연산자와 엑세스 타입을 순서대로 입력한다.
#symbolic method 사용 예시
chmod g-r filename # removes read permission from group
chmod g+r filename # adds read permission to group
chmod g-w filename # removes write permission from group
chmod g+w filename # adds write permission to group
chmod g-x filename # removes execute permission from group
chmod g+x filename # adds execute permission to group
chmod o-r filename # removes read permission from other
chmod o+r filename # adds read permission to other
chmod o-w filename # removes write permission from other
chmod o+w filename # adds write permission to other
chmod o-x filename # removes execute permission from other
chmod o+x filename # adds execute permission to other
chmod u+x filename # adds execute permission to user
엑세스 클래스와 연산자, 액세스 타입을 모두 기억해야만 Symbolic method를 이용해 권한을 변경할 수 있다.
Absolute form은 숫자 7까지 나타내는 3bit의 합으로 표기한다.
사용자, 그룹 또는 다른 사용자나 그룹마다 rwx 가 나타나고, 각 영역의 boolean 값으로 표기할 수 있다.
Permission | Number |
Read (r) | 4 |
Write (w) | 2 |
Execute (x) | 1 |
만약, user는 rwx 를, group과 other은 r-- 로 권한을 변경하려고 하면, 위 표에 나와있는 숫자의 합을 user, group, other 순으로 입력하여 사용한다.
# | Sum | rwx | Permission |
7 | 4(r) + 2(w) + 1(x) | rwx | read, write and execute |
6 | 4(r) + 2(w) + 0(-) | rw- | read and write |
5 | 4(r) + 0(-) + 1(x) | r-x | read and execute |
4 | 4(r) + 0(-) + 0(-) | r-- | read only |
3 | 0(-) + 2(w) + 1(x) | -wx | write and execute |
2 | 0(-) + 2(w) + 0(-) | -w- | write only |
1 | 0(-) + 0(-) + 1(x) | --x | execute only |
0 | 0(-) + 0(-) + 0(-) | --- | none |
환경변수 사용법
export: 환경변수 확인하기 & 환경변수 임시 적용
Linux 운영체제에는 이미 많은 환경변수가 설정되어 있다. 터미널에 명령어 export 를 입력해, 기록된 환경변수를 확인할 수 있다.
명령어 export 를 이용하면, 새로운 환경변수를 추가할 수 있다.
export yourpath="my path"
등호 표시(Equal sign, =) 앞뒤에는 반드시 공백이 없어야 한다.
명령어 echo 와 함께 환경변수를 입력하면, 환경변수의 값을 확인할 수 있다. 이때 환경변수의 앞에는 달러사인($)을 입력하여, 변수라는 뜻을 터미널에 전달한다.
dotenv: 자바스크립트에서 환경변수 사용하기
npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있다.
mkdir foldername
cd foldername
npm init # 엔터 키를 여러번 입력해 init을 마친다.
npm i dotenv # dotenv 모듈을 설치한다.
설치한 dotenv를 이용해 환경변수에 접근할 수 있다. Node.js의 내장 객체 process.env 를 이용하면, 명령어 export 로 확인한 내용과 동일한 내용을 객체로 출력한다.
- process.env 는 Node.js 환경에서 조회할 수 있다.
- dotenv는 이어지는 콘텐츠.env 파일을 환경변수로 사용할 수 있게 돕는다.
.env: Node.js에서 환경변수 영구 적용
명령어 export 로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능하다. 환경변수를 Linux 운영체제에 저장하는 방법은 여러 가지가 있지만, Node.js에서는 파일.env를 만들어 저장하는 방법을 사용한다.
먼저 .env 파일을 생성하고 사용하조가 하는 환경변수를 입력한 뒤 저장한다.
nano .env
cat .env
myname=myname
모듈 dotenv를 이용하면, 파일.env에 저장한 환경변수를 조회할 수 있다.
const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);
환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있다. 그뿐만 아니라 서로 다른 PC 또는 여러 .env 파일에서, 같은 변수 이름에 다른 값을 할당할 수 있다.
실제 제품(서비스)을 개발하는 과정에는 개발 환경 (local 또는 development 등)과 테스트 서버의 환경(test), 그리고 실제 제품을 제공하는 환경(production)이 있다. 예를 들어 구글 API를 이용해 웹 애플리케이션을 만드는 경우, 개발 환경에서는 개발자 개인의 API 키를 이용할 수 있다. 그러나 제품을 서비스할 때에 개인 API 키를 사용하면, 일일 요청량을 초과하는 경우 제품이 정상적인 동작을 할 수 없다. 이런 경우를 방지하기 위해 실제 제품에서는 기업용 API 키를 사용한다. 이처럼 개발 환경과 제품을 제공하는 환경에서 사용하는 API 키가 다른 경우, 환경변수를 이용해 환경을 구분하여 코드를 작성할 수 있다.
데이터베이스도 마찬가지로 개발, 테스트, 제품 환경으로 구분할 수 있다.
'TIL > Code States' 카테고리의 다른 글
Code States 51일차 - [자료구조/알고리즘] 코딩 테스트 준비 (0) | 2021.10.07 |
---|---|
Code States 50일차 - [자료구조/알고리즘] 코딩 테스트 준비 (0) | 2021.10.06 |
Code States 44일차 - 클라이언트 빌드와 배포 (0) | 2021.09.28 |
Code States 43일차 - React 상태관리 (0) | 2021.09.17 |
Code States 42일차 - React 상태관리 (0) | 2021.09.16 |