10월 5일 (화) Linux 심화

Southbig·2021년 10월 5일
0

Read, Write, Execute 권한

mkdir <폴더이름>
nano <파일이름>

touch를 사용하여 파일을 만들 수 있지만
nano를 사용하면 파일안에 내용을 작성할 수 있다

ls -l를 명령어를 입력하면 사용권한에 대하여 볼 수있다

위의 그림과 같이 표현의 첫시작이 -와 d로 나뉘어져 있다

-는 not directory로 파일을 뜻한다
d는 directory로 폴더를 뜻한다

r, w, x는 각각 read permission, write permission, execute permission으로 읽기 권한, 쓰기 권한, 실행 권한을 나타낸다

user, group, and other

user - user는 파일의 소유자를 말한다, 기본적으로 파일을 만든 사람이 소유자가 된다

group - group에는 여러 user가 포함될 수 있다, group에 속한 모든 user는 파일에 대한 동일한 group 엑세스 권한을 갖는다
많은 사람들이 파일에 엑세스해야 하는 프로젝트가 있다면, 각 user에게 일일이 권한을 할당하는 것보다 user를 group에 추가하고, 파일에 group 권한을 할당하는 방법으로 권한을 부여할 수 있다

other - 파일에 대한 엑세스 권한이 있는 다른 user
파일을 만들지 않은 다른 모든 user를 의미한다, other 권한을 설정하면 해당권한을 global 권한 설정이라고 볼 수 있다


chmod 권한을 변경하는 명령어

명령어 chmod은 폴더나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있다
OS에 로그인한 사용자와, 폴더나 파일의 소유자가 같을 경우에 명령어 chmod 로 폴더나 파일의 권한을 변경할 수 있다

만약 OS에 로그인한 사용자와, 폴더나 파일의 소유자가 다를 경우에는 관리자 권한을 획득하는 명령어 sudo 를 이용해 폴더나 파일의 권한을 변경할 수 있다

chmod 로 권한을 변경하는 두 가지 방식

  • Symbolic method
    더하기(+), 빼기(-), 할당(=)과 액세서 유형을 표기해서 변경

  • Absolute form
    rwx를 3 bit로 해석하여, 숫자 3자리로 권한을 표기해서 변경

Symbolic method는 액세스 클래스, 연산자, 액세스 타입으로 구분

  1. 명령어 chmod 뒤에 변경할 권한을 입력한다
  2. 액세스 클래스의 u(user), g(group), o(other), a(all)를 변경할 조건에 따라 조합하여 입력하고, 연산자와 액세스 타입을 순서대로 입력한다

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

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까지 나타내는 3 bits의 합으로 표기

사용자, 그룹, 또는 다른 사용자나 그룹마다 rwx 가 나타나고, 각 영역의 boolean 값으로 표기할 수 있다

만약, user는 rwx 를, group과 other은 r-- 로 권한을 변경하려고 한다면, 위 표에 나와있는 숫자의 합을 user, group, other 순으로 입력하여 사용

u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4)
chmod 744 helloworld.js # -rwxr--r--

환경변수 사용법

API key와 같이 공개할 수 없는 정보가 코드에 포함될 경우, 네트워크를 통해 API key가 공개될 수 있다
이런 일을 방지하기 위해서는, API key를 PC에 저장해두고 사용해야 한다
JavaScript에서 변수에 문자열을 할당하는 것처럼, API key를 PC에서 사용하는 변수에 할당하고 사용할 수 있다

JavaScript에서 변수는 스코프에 따라 전역변수와 지역변수로 나뉜다
그러나 파일 A에서 전역변수로 선언하더라도, 다른 파일 B에서 파일 A의 전역변수에 접근할 수 없다
그러나 파일 A의 전역변수를 export 한다면, 파일 B에서 파일 A의 전역변수에 접근할 수 있다

Linux 기반의 운영체제의 PC에는 시스템 자체에 전역변수를 설정할 수 있다
그리고 시스템에 설정한 전역변수를 환경변수라고 한다
export 를 이용해 환경변수를 설정할 수 있다

export

환경변수 확인하기 && 환경변수 임시 적용

Linux 운영체제에는 이미 많은 환경변수가 설정되어 있으며, 터미널에 명령어 export 를 입력해, 기록된 환경변수를 확인할 수 있다

명령어 export 를 이용하면, 새로운 환경변수를 추가할 수 있다

다음과 같이 새로운 환경변수 urclass="is good" 을 설정한다면, 이 때 등호 표시(Equal sign, =) 앞뒤에는 반드시 공백이 없어야 한다

export urclass="is good"

명령어 echo 와 함께 환경변수를 입력하면, 환경변수의 값을 확인할 수 있다
이때 환경변수의 앞에는 달러사인($)을 입력하여, 변수라는 뜻을 터미널에 전달한다

dotenv

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

npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있다
npm 모듈을 설치하고 사용하기 위해서,

1. 새로운 폴더를 만들고
2. npm init 을 입력
3. npm i dotenv 를 입력해 모듈을 설치
이때 생성된 폴더는 설치할 모듈과 이름이 같아서는 안된다

mkdir environment_variable
cd environment_variable
npm init # 엔터 키를 여러번 입력해 init을 마칩니다.
npm i dotenv # dotenv 모듈을 설치합니다.

설치한 dotenv를 이용해 환경변수에 접근할 수 있다
1. 새로운 파일 index.js를 생성하고, process.env 를 출력
2. Node.js의 내장 객체 process.env를 이용하면, 명령어 export 로 확인한 내용과 동일한 내용을 객체로 출력한다

cat <파일이름> // 파일안의 모든내용 표기

  • process.env 는 Node.js 환경에서 조회할 수 있다
  • dotenv는 .env 파일를 환경변수로 사용할 수 있게 돕는다

.env

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

명령어 export 로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능하다
환경변수를 Linux 운영체제에 저장하는 방법은 여러 가지가 있지만, Node.js에서는 파일 .env를 만들어 저장하는 방법을 사용한다

  1. 먼저 .env 파일을 생성하고, 사용하고자 하는 환경변수를 입력한 뒤 저장
  1. .env 파일을 생성하고, 환경변수로 사용할 myname에 "kimcoding"을 할당

모듈 dotenv를 이용하면, 파일 .env에 저장한 환경변수를 조회할 수 있다
index.js를 다음과 같이 수정하고, 저장한다

const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);
  1. index.js에서 dotenv.config 메소드를 이용해, .env를 process.env에 적용할 수 있다

  2. index.js를 실행하면 다음과 같은 결과가 나온다

환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있다
그뿐만 아니라 서로 다른 PC 또는 여러 .env 파일에서, 같은 변수 이름에 다른 값을 할당할 수 있다

실제 제품(서비스)을 개발하는 과정에는 개발 환경(local 또는 development 등)과 테스트 서버의 환경(test), 그리고 실제 제품을 제공하는 환경(production)이 있다

예를 들어 구글 API를 이용해 웹 애플리케이션을 만드는 경우, 개발 환경에서는 개발자 개인의 API 키를 이용할 수 있다
그러나 제품을 서비스할 때에 개인 API 키를 사용하면, 일일 요청량을 초과하는 경우 제품이 정상적인 동작을 할 수 없다
이런 경우를 방지하기 위해 실제 제품에서는 기업용 API 키를 사용한다

이처럼 개발 환경과 제품을 제공하는 환경에서 사용하는 API 키가 다른 경우, 환경변수를 이용해 환경을 구분하여 코드를 작성할 수 있다

데이터베이스도 마찬가지로 개발, 테스트, 제품 환경으로 구분할 수 있다

하기 그림은 각기 다른 환경에, 같은 변수 이름을 사용하여 데이터베이스를 구분한 예시다

하나의 변수 이름을 환경에 따라 다르게 설정할 수 있다

추가 정리(11/8 (월))

운영체제가 수행하는 기능들

  • 사용자 인터페이스 제공
  • 메모리에 프로그램 적재
  • 여러 하드웨어들의 원활한 동작 제어
  • 디스크에 정보를 저장하고 검색하는 방식을 관리

CLI / 터미널 / 셸

CLI 개념을 확욜하는 기계가 터미널

터미널 위에서 띄우는 프로그램이

셸은 운영 체제 상에서 다양한 운영 제체 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램

커널은 하드웨어랑 가장 가까이 있는 프로그램
커널이 하드웨어를 직접적으로 제어를 한다

커널을 제어 하는 것이 이다

사용권한, 환경변수

사용권한

리눅스하는 운영체제 내부에서 파일과 디렉토리들을 관리

추가

rwx
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7

sudo
일반사용자가 root 권한을 빌려서 임시로 명령어를 실행할 수 있는 커맨드

모든 디렉토리나 파일에 접근할 수 있고, 수정, 생성, 삭제까지 진행가능

su
계정 자체를 전환 / su <계정명>
user를 root 권한으로 바꿀 수 있다

root : 해당 시스템을 전체를 관리할 수 있는 전지전능한 슈퍼유저
admin : 일반 유저 중 하나, root가 관리자 권한을 줄 수 있다
user : 그냥 일반 유저

user는 개인적인일처리
admin은 컴퓨터 관리에 대한일만 수용할 수있도록 분리

root가 user에게도 관리자 권한을 줄 수있는데,왜 굳이 admin을 지정해 놓았을 까 ?

시스템 관련 명령을 내릴 때, 시스템을 root권한으로 제어하는 명령을 내릴때는 admin이라는 권한으로 들어와야 권한 허가를 준다는 약속이다

chmod라는 명령어로 권한 설정을 해 주어야 하는 이유?

내가 만든 파일이나 디렉토리를 다른 사람이 마음대로 수정하거나 삭제했을 때 문제가 발생할 수 있기 때문에 권한 부여 -> 시스쳄 해킹과 연관

system change mode의 약자

환경변수

프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임

운영체제가 굴러 가는데 필요한 변수들의 모임

profile
즐겁게 살자

0개의 댓글