Linux/Ubuntu

[Linux] 사용 권한과 환경변수

디스페어 2022. 4. 15.

리눅스 사용 권한

-rw-r--r--

- : 파일을 의미

rw : 읽기 권한, 쓰기 권한

drwxr-xr-x

d : 폴더를 의미

rwx : 읽기 권한, 쓰기 권한, 실행 권한

  • CLI에서 파일을 보거나, 수정하거나, 실행할 때에는 권한이 필요
  • Linux에서 사용하는 폴더와 파일의 권한 : 읽기(Read), 쓰기(Write), 실행(Execute)
    *r, w, x는 각각 read permission(읽기 권한), write permission(편집 권한), execute permission(실행 권한)

 

1. 폴더나 파일의 권한 정보

*없는 권한은 -로 표시

 

owner (user)

  • 파일의 소유자

 

group

  • owner(파일의 소유자)에게 권한을 부여받은 user의 권한
  • 여러 user가 포함될 수 있음
  • 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한 보유

 

other

  • 초대받지 못한 손님의 권한
  • 파일에 대한 액세스 권한이 있는 다른 user로, 파일을 만들지 않은 다른 모든 user를 의미
  • other 권한 설정 : global 권한 설정

 

2. 권한을 변경하는 명령어

  • chmod : 폴더나 파일의 읽기, 쓰기, 실행 권한 변경 가능
  • OS에 로그인한 사용자와 폴더나 파일의 소유자가 같을 경우 해당 명령어 사용 가능
    *OS에 로그인한 사용자와 폴더나 파일의 소유자가 다를 경우 sudo를 이용해 관리자 권한을 획득하여 폴더나 파일의 권한을 변경
  • chmod로 권한을 변경하는 방식 : Symbolic method, Absolute form

 

Symbolic method

chmod ug+r filename : adds read permission to user and group
chmod o-wx filename : removes write and execute permission from other
chmod u+x filename : adds execute permission to user
chmod a=rw filename : sets read and write permission to all
chmod u= filename : sets nothing to user

  • 더하기(+), 빼기(-), 할당(=)과 액세서 유형을 표기해서 변경하는 방식
  • 액세스 클래스, 연산자, 액세스 타입으로 구분
  • chmod 뒤에 변경할 권한을 입력 : 액세스 클래스의 u, g, o, a를 변경할 조건에 따라 조합하여 입력하고, 연산자와 액세스 타입을 순서대로 입력

 

Absolute form

user는 rwx 를, group과 other은 r-- 로 권한을 변경 : -rwxr--r--
chmod 744 filename : u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4)

  • rwx를 3 bit로 해석하여, 숫자 3자리로 권한을 변경하는 방식으로 숫자 7까지 나타내는 3 bits의 합으로 표기
  • 숫자의 합을 user, group, other 순으로 입력하여 사용
  • user는 rwx 를, group과 other은 r-- 로 권한을 변경 : -rwxr--r--
  • chmod 744 filename : u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4)

 

 

리눅스의 환경변수

  • API key와 같이 공개할 수 없는 정보가 코드에 포함될 경우 네트워크를 통해 API key가 공개될 위험 존재하기에 이를 방지하기 위해 API key를 PC에 저장해두고 사용
    *JavaScript에서 변수에 문자열을 할당하는 것처럼, API key를 PC에서 사용하는 변수에 할당하고 사용
  • JavaScript에서 변수 : 스코프에 따라 전역변수와 지역변수로 구분
    *파일 A에서 전역변수로 선언하더라도, 다른 파일 B에서 파일 A의 전역변수에 접근할 수 없으나, 파일 A의 전역변수를 export 한다면 파일 B에서 파일 A의 전역변수에 접근 가능
  • Linux 기반의 운영체제의 PC는 시스템 자체에 전역변수 설정이 가능한데, 이 때 시스템에 설정한 전역변수를 환경변수라 함

 

환경변수 확인하기

  • Linux 운영체제에는 이미 많은 환경변수가 설정되어 있음
  • 터미널에 명령어 export를 입력해 현재 설정된 환경변수 확인
  • 대소문자를 구분하여 서로 다른 환경변수라고 인식

 

환경변수 임시 적용

export DesPair=Ukkikki
#export 환경변수명=값(파일경로)
#등호 표시(Equal sign, =) 앞뒤에는 반드시 공백이 없어야 함

echo $DesPair
#Ukkikki
#환경변수의 앞에 달러사인($)을 입력하여 변수라는 뜻을 터미널에 전달
  • 임시 적용한 환경변수는 시스템을 재부팅하거나 재로그인하면 사라짐
    *export로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능

 

환경변수 영구 적용

#/etc/bash.bashrc 파일수정 (모든 사용자 영구 적용)
/etc/bash.bashrc export DesPair=Ukkikki

#특정 사용자에게 적용
#/home/사용자명/.bashrc 파일수정
#/home/Banana/.bashrc export DesPair=Ukkikki
  • bash : Bourne Ahain Shell의 축약어로 리눅스에서 가장 널리 사용되는 쉘
  • ~./bashrc : 별칭(alias)과 수행될 때 실행되는 함수를 제어하는 지역적인 시스템 설정과 관련된 파일
    이들 별칭과 함수들은 오직 해당 사용자에게만 한정되며, 다른 사용자에겐 영향을 미치지 않는다.
  • /etc/bashrc : ~/.bashrc가 개인용 환경 설정이라면 /etc/bashrc는 모든 사용자에게 영향을 미치는 환경 설정 파일

 

환경변수 해제

#unset 환경변수명
unset Despair

 

 

자바스크립트에서 환경변수 사용

dotenv 설치

모듈을 설치할 폴더 만들기 : mkdir environment\\\_variable

해당 폴더로 이동 : cd environment\\\_variable

npm init으로 package.json 파일 작성 : npm init

dotenv 모듈을 설치 : npm i dotenv

  • npm 모듈 dotenv를 사용하면 자바스크립트에서 환경변수를 사용할 수 있음

 

dotenv를 이용해 환경변수에 접근하기

dotenv를 설치한 폴더에 새로운 파일 index.js를 생성 : nano index.js

nano 편집기로 열린 index.js에 console.log(process.env) 입력

Node.js 환경에서 process.env 조회 : node index.js

  • process.env : Node.js의 내장 객체로, 이를 이용하면 export로 확인한 내용과 동일한 내용을 객체로 출력 가능
  • process.env는 Node.js 환경에서 조회할 수 있으며, dotenv는 이어지는 콘텐츠 .env 파일를 환경변수로 사용할 수 있게 도움

 

Node.js에서 환경변수 영구 적용

  1. .env 파일을 생성 : nano .env
  2. nano 편집기로 열린 .env에 사용하고자 하는 환경변수를 입력한 뒤 저장
  3. index.js 파일에서 모듈 dotenv를 이용해 .env에 저장한 환경변수 조회 가능
  4. index.js 실행 : node index.js
//index.js 
const dotenv = require("dotenv"); 
dotenv.config(); 
// dotenv.config 메소드 : .env를 process.env에 적용 
console.log(process.env.name);
  • Node.js에선 .env파일을 만들어 저장하는 방법을 사용
    Linux 운영체제에 환경변수를 저장하는 방법은 여러가지가 존재
  • export로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능
  • .env 파일 생성 후 사용할 환경변수를 입력한 뒤 저장하며, 저장한걸 불러오기 위해선 dotenv 모듈이 필요

 

환경변수의 기능

  • 환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있음
  • 서로 다른 PC 또는 여러 .env 파일에서 같은 변수 이름에 다른 값을 할당 가능
  • 실제 제품(서비스)을 개발하는 과정에는 개발 환경(local 또는 development 등)과 테스트 서버의 환경(test), 그리고 실제 제품을 제공하는 환경(production)이 존재
    *데이터베이스도 개발, 테스트, 제품 환경으로 구분
  • 개발 환경과 제품을 제공하는 환경에서 사용하는 API 키가 다른 경우, 환경변수를 이용해 환경을 구분하여 코드를 작성할 수 있음
//shortly-mvc 스프린트 발췌
{
  "development": { //개발용 데이터베이스
    ...
    "database": "database_development",
    ...
  },
  "test": { //테스트용 데이터베이스
    ...
    "database": "database_test",
    ...
  },
  "production": { //배포용 데이터베이스
    ...
    "database": "database_production",
    ...
  }
}

 

 

Reference

리눅스 환경변수 설정 및 해제하기

쉘과 bashrc의 개념

반응형

댓글