사용 권한
학습 목표
* 사용 권한과 소유자에 대한 이해 및 사용 권한 변경하기
- 파일의 소유자와 파일에 적용된 사용 권한 확인하기: ls -l
- 파일에 적용된 사용 권한 변경하기: chmod
Read, Write, Execute 권한
폴더와 파일의 판별(폴더인지 파일인지?)
CLI에서 디렉토리 하나(mkdir 디렉토리명)와 특정 파일을 하나 생성해 보자
ls -al 또는 ls -l 로 권한을 확인해 보자
drwxrwxr-x 2 사용자명 blabla 4096 11월 8 10:23 .
-rw-rw-r-- 1 사용자명 blabla 29 11월 8 10:23 helloworld.js
첫 시작이 d로 시작하면 → directory 즉, 폴더라는 뜻
첫 시작이 - 로 시작하면 → 파일이라는 뜻
그 다음부터는 3자리씩 끊어서 보면 된다
d/rwx/rwx/r-x
-/rw-/rw-/r--
→ owner(소유자;user)/ group(그룹) / other(다른 사용자)
r: read 권한
w: write 권한
x: execute 권한
첫 구역부터 소유자(user)/ 그룹/ 다른 사용자(나머지) 를 뜻한다
* user
- 파일의 소유자. 기본적으로 파일을 만든 사람이 소유자가 됨
* group
- 여러 user가 포함될 수 있다. 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한을 가짐
→ 많은 user가 액세스해야 하는 프로젝트가 있다면 일일이 권한 할당하는 대신에 group 권한을 설정하여 할당하는 식의 방식 가능
* other
- 파일에 대한 액세스 권한이 있는 다른 사용자(user)
→ 파일을 만들지 않은 다른 모든 user를 의미
→ 즉, other 권한을 설정하는 것은 global 권한 설정과 같다
chmod : 권한을 변경하는 명령어
폴더나 파일의 읽기, 쓰기, 실행 권한을 변경하는 명령어
chmod로 권한을 변경하는 방식은 2가지 방식이 있다
* Symbolic method
- 더하기(+), 빼기(-), 할당(=)과 액세서 유형을 표기해서 변경하는 방식
* Absolute form
- rwx를 3bit로 해석하여, 숫자 3자리로 권한을 표기해서 변경하는 방식
Symbolic method
Access class:
u (사용자)
g (그룹)
0 (다른 사용자)
a (모두)
Operator:
+ (권한 추가)
- (권한 제거)
= (권한 할당)
Access Type:
r (read)
w (write)
x (execute)
위의 심볼들을 이용해서 조합해서 쓰면 된다
chmod g-r filename # removes read permission from group
chmod g+x filename # adds execute permission to group
chmod o-r filename # removes read permission from other
chmod u+x filename # adds execute permission to use
# 이런식으로 가능
# 실제 사용하는 경우?
chmod a=rw helloworld.js # -rw-rw-rw-
chmod u= helloworld.js # ----rw-rw-
chmod a+rx helloworld.js # -r-xrwxrwx
chmod go-wx helloworld.js # -r-xr--r--
chmod a= helloworld.js # ---------- // 할당을 공백으로 두면 아무 권한도 안 준다는 뜻
chmod u+rwx helloworld.js # -rwx------
Absolute form
숫자 7까지 나타내는 3bit의 합으로 표기하는 방식
permission Number
===========================
r (Read) 4
w (Write) 2
x (Execute) 1
---------------------------
위의 숫자를 조합해서 user/group/other 순으로 숫자를 써서 표현하면 된다
# 사용 예시
# u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4)
chmod 744 helloworld.js # -rwxr—r--
# 보통 많이 사용하는 r(읽기), x(실행) 권한만 그룹과 타 사용자에 주고 소유자는 전체 권한을 가지는 경우는
# 755가 되겠다
chmod 755 helloworld.js # -rwxr-xr-x
환경변수
리눅스 운영체제의 PC의 시스템 자체에 전역변수를 설정하는 것
→ 환경변수
export 를 이용해 환경 변수를 설정할 수 있다(임시)
→ API key와 같이 공개되면 안되는 정보지만 사용이 필요한 경우, PC의 환경 변수에 할당하고 사용하면 된다
학습 목표
* PC에 저장하는 환경변수에 대한 이해 및 사용
- export: PC에 저장된 환경변수 확인 및 임시 적용
- dotenv: PC에 저장된 환경변수 불러오기
- .env: Node.js에서 환경변수 영구적용
환경변수 사용법
export: 환경변수 확인 && 임시 적용
CLI에서 그냥 export 치면 설정된 환경변수들 확인이 가능
export 를 이용하여 새로운 환경변수 임시 추가도 가능하다
# export 원하는변수명=”변수값”
# ex
export somesome=”body”
# echo $변수명
echo $somesome
body
반드시 등호 표시(=) 앞 뒤에는 공백이 없어야 한다!
환경변수의 값을 불러올때는 $변수명으로 불러올 수 있다
→ $표시로 변수라는 뜻을 터미널에 전달하는 것
dotenv: 자바스크립트에서 환경변수 사용하기
npm 모듈 dotenv를 사용하여, 자바스크립트에서 환경변수를 사용할 수 있다
# 테스트를 위해 폴더를 하나 만들어서 설치해 보자
# 단 이때 만든 폴더 명은 설치할 모듈과 이름이 같아서는 안된다!
# 빈 폴더에 npm 모듈을 설치하고 사용하기 위해 먼저 npm init 후에 npm I dotenv
# npm 모듈 dotenv 설치
npm init
npm i dotenv
이제 dotenv를 이용해 환경 변수에 접근하기 위해서는, process.env 를 이용하면 환경변수를 객체로 받아올 수 있다.
process.env
→ node.js의 내장 객체로 CLI에서 명령어 export로 확인한 내용과 동일한 내용을 객체로 출력
# process.env 연습
nano index.js # console.log(process.env) 작성
node index.js
# CLI에서 export 명령어로 출력했던 환경변수들이 객체 형태로 출력됨
process.env는 node.js 환경에서 조회할 수 있다
.env: Node.js에서 환경변수 영구 적용
명령어 export로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능하다.
→ 즉 활성화된 터미널 창을 닫으면 내가 임의로 export 명령어로 지정한 환경변수가 날아간다는 것!
환경변수를 영구 적용하는 방법은 몇가지가 있지만, node.js에서는 파일 .env를 만들어 저장하는 방법을 사용
step1. .env 파일을 생성하고 사용할 환경변수를 작성
nano .env # myname=parkbakbak 이라고 작성
step2. js파일에서 dotenv 모듈을 이용하여 .env에 저장한 환경변수를 조회(적용)
js파일에서 모듈을 불러온 후(require) dotenv.config() 를 이용해 process.env에 적용
# ex
# 앞서 작성한 index.js 파일에서 한다고 치면,
# dotenv.config 메소드를 이용해 .env를 process.env에 적용하기
const dotenv = require(“dotenv”);
dotenv.config();
console.log(process.env.myname);
step3. 적용한 환경변수 확인하기
# 터미널 창에서 확인한 모습
➜ linux_auth_test cat index.js
const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);
➜ linux_auth_test node index.js
parkbakbak
위와 같이 환경변수가 적용되었음을 알 수 있다
→ 환경변수를 이용하면 API key , DB password와 같이 민감 정보들을 저장하고 관리하기 좋다
→ 환경변수는 서로 다른 pc 또는 여러 .env 파일에서 같은 변수 이름에 다른 값을 할당할 수도 있다
환경변수의 활용
이러한 환경변수는 각기 다른 환경마다 다른 정보를 사용해야 하는 경우에도 활용할 수 있다
실제 제품(서비스)를 개발하는 과정에서 개발 환경(local 또는 development)과 테스트 서버 환경(test), 실제 제품 서비스 환경(production)이 존재한다.
→ 구글 API를 이용해 웹 애플리케이션을 만드는 경우, 개발 환경에서는 개발자 개인의 API 키를 사용해도 허용량에 문제가 없으나(요청 건수 등), 실제 제품을 서비스할 때는 개인용 API 키로는 커버되지 않을 것이다
이런 경우, 실제 제품 서버스 환경에서는 기업용 API 키가 사용되게 환경변수를 이용하여 환경을 구분 하여 코드를 작성할 수 있다
데이터베이스도 마찬가지로 개발, 테스트, 제품(서비스) 환경으로 구분해서 환경변수를 설정할 수 있다
# 각기 다른 환경에 같은 변수명을 이용해 데이터베이스를 구분한 예시
# 개발 환경에서 사용할 DB
DATABASE_NAME=app_dev
# 테스트 환경에서 사용할 DB
DATABASE_NAME=app_test
# 제품 환경에서 사용할 DB
DATABASE_NAME=app_production
# 하나의 변수 이름(DATABASE_NAME)을 환경에 따라 다른 값을 가지도록 설정
추가 내용 정리
- CLI/터미널/셸
# 개념의 범위
# 포괄하는 개념으로 볼때
CLI(개념)> 터미널(기계)> 셸(프로그램)
셸은 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램
사용 권한
- r, w, x 권한
권한이 있거나 없거나 둘 중 하나이므로, boolean 타입이라고 볼 수 있다
- sudo?
일반 사용자가 root 권한을 빌려서(임시적으로) 명령어를 실행할 수 있는 커맨드
- su?
계정 전환(su 계정명) : 이를 이용해 root 계정으로 계정 전환이 가능(임시 x)
- chmod 라는 명령어로 권한 설정을 해줘야 하는 이유?
내가 만든 파일이나 디렉토리를 다른 사람이 마음대로 수정하거나 삭제했을때 문제가 발생할 수 있기 때문에 권한 부여
→ 시스템 해킹과도 연관
환경변수
git에 push하지 말아야 하는 환경변수들은 어떻게 처리해야 하는가?
gitignore에다 쓰면 해당 파일은 git에 push하지 않는다
→ gitignore에다가 env를 써두면 .env 파일을 push 하지 않음!
.env 파일에 API key나 데이터베이스 패스워드같은 민감정보를 관리할 수 있다
'SE Bootcamp 내용 정리' 카테고리의 다른 글
| 자료구조/알고리즘 - 코딩 테스트 1 (0) | 2021.11.11 |
|---|---|
| SECTION 2 회고 (0) | 2021.11.08 |
| 클라이언트 빌드와 배포 (0) | 2021.11.08 |
| react - 상태 관리 2(Redux 연습, 공식 문서 탐구) (0) | 2021.11.02 |
| react - 상태 관리 1(기본 상태 관리, Redux) (0) | 2021.11.02 |
