[Linux] 심화
기타

[Linux] 심화

반응형

1.  Read, Write, Execute 사용 권한

1) 권한에 대한 개념

r은 read권한으로 읽기, w는 write권한으로 쓰기, x는 execute권한으로 실행을 의미합니다.

r, w, x 각 문자가 적혀있으면 해당 권한이 있는 것이고, - 라고 표시되어있으면 해당 권한이 없습니다.

 

폴더 생성 명령어 mkdir 

파일 생성 명령어 nano  (파일이름.확장명) 생성후, 파일안 내용 입력하고 ctrl + x, y, enter 누르면 파일 생성

권한 확인 명령어 ls -l

ls -l을 실행시켰을 때에 나오는 터미널 모습

아래는 권한에 대한 설명을 간략히 나타낸 표

유형 r w x
d(디렉토리, 폴더) 권한이 없으면 디렉토리 목록을 볼 수 없음 권한이 없으면 해당 디렉토리에 파일을 추가할 수 없음 디렉토리에 접근하는 권한, 권한이 없으면 rw권한이 모두 있어도 접근 불가능
-(파일) 권한이 없으면 파일을 열 수 없음 권한이 없으면 파일을 수정할 수 없음 권한이 있으면 실행파일, 없으면 문서파일

 

앞에 디렉토리 또는 파일을 나타내고 그 뒤에 나오는 9자리중 각각 3자리씩 해당되는 사용자를 의미한다.

 

 

1. user(owner)

파일의 소유자 입니다. 기본적으로 파일을 만든 사람을 의미합니다.

 

2. group

여러 user가 포함 가능합니다. 많은 사람이 파일에 액세스해야 하는 프로젝트가 있다고 가정 한다면, 각 user에게 일일이 권한을 할당하는 대신에 모든 user를 group에 추가하고, 파일에 group 권한을 할당할 수 있습니다.

 

3. other

파일에 대한 액세스 권한이 있는 다른 user입니다.

파일을 만들지 않은 다른 모든 user를 의미합니다. 따라서 other 권한을 설정하면, 해당 권한을 global 권한 설정이라고 볼 수도 있습니다.

 

 

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

권한을 볼수 있다면 이제 권한을 변경할 수 도 있는 명령어가 있습니다. chmod 명령어로 변경이 가능합니다.

하지만 만약 OS에 로그인한 사용자와, 폴더나 파일의 소유자가 다를 경우에는 관리자 권한을 획득하는 명령어 sudo 를 이용해 폴더나 파일의 권한을 변경할 수 있습니다. (인터넷에서 권한 검색 하였을 때에 sudo를 남용 할 경우에 보안에 문제가 생길 수도 있으니 주의하라는 글을 보아왔습니다.)

 

chomd로 권한 변경 방식

1. 더하기, 빼기, 할당(=)과 액세서 유형을 표기해서 사용하는 방법(Symbolic method)

 

액세스 클래스, 연산자, 액세스 타입으로 구분합니다. 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를 변경할 조건에 따라 조합하여 입력하고, 연산자와 액세스 타입을 순서대로 입력합니다.

ex) chmod g-r filename

 

응용 가능한 방식 (오른쪽은 결과)

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------

 

액세스 클래스와 연산자, 액세스 타입을 모두 기억해야만 Symbolic method를 이용해 권한을 변경할 수 있습니다.

 

 

2. 두 번째는 rwx를 3bit로 해석해서, 숫자 3자리로 권한을 표기해서 변경하는 방법(Absolute form)

 

u=rwx (4 + 2 + 1 = 7), g=r (4 + 0 + 0 = 4), o=r (4 + 0 + 0 = 4

chmod 744 helloworld.js    # -rwxr--r--

 

Symbolic방법보다 계산을 하는 번거로움은 있지만 적응이 된다면 더 쉬운 방법인것 같다. 아래는 계산표 입니다.

Num Sum rwx
7 4(r) + 2(w) + 1(x) rwx
6 4(r) + 2(w) + 0(-) rw-
5 4(r) + 0(-) + 1(x) r-x
4 4(r) + 0(-) + 0(-) r--
3 0(-) + 2(w) + 1(x) -wx
2 0(-) + 2(w) + 0(-) -w-
1 0(-) + 0(-) + 1(x) --x
0 0(-) + 0(-) + 0(-) ---

추가적 내용 파일 권한과 관련된 레퍼런스

 

 

 

 

 

 

 

2.  환경 변수

API key와 같이 공개할 수 없는 정보가 코드에 포함될 경우, 네트워크를 통해 API key가 공개될 수 있습니다. 이런 일을 방지하기 위해서는, API key를 PC에 저장해두고 사용해야 합니다.

JavaScript에서 변수에 문자열을 할당하는 것처럼, API key를 PC에서 사용하는 변수에 할당하고 사용할 수 있습니다.

 

예를들어 JavaScript 에서 전역변수처럼 다른 파일간에도 전역변수에 접근 할 수가 없습니다.

Linux 기반의 운영체제의 PC에는 시스템 자체에 전역변수를 설정할 수 있습니다. 시스템에 설정한 전역변수를 환경변수라고 합니다.

 

 

1) export (환경변수 확인하기 && 환경변수 임시 적용)

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

 

새로운 환경변수를 추가할 수 있습니다. 다음과 같이 새로운 환경변수 urclass="is good" 을 설정합니다. 이 때 등호 표시(Equal sign, =) 앞뒤에는 반드시 공백이 없어야 합니다.

새로운 환경 변수를 추가하면 명령어 echo 를 통해서 확인 할 수 있습니다.

 

실행 결과

 

 

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

 

npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있습니다.

npm 모듈을 설치하고 사용하기 위해서, 새로운 폴더를 만들고 npm init 을 입력합니다.

그리고 npm i dotenv 를 입력해 모듈을 설치합니다. 이때 생성된 폴더는 설치할 모듈과 이름이 같아서는 안됩니다.

mkdir environment_variable

cd environment_variable

npm init # 엔터 키를 여러번 입력해 init을 마칩니다.

npm i dotenv # dotenv 모듈을 설치합니다.

 

설치한 dotenv를 이용해 환경변수에 접근할 수 있습니다. 새로운 파일 index.js를 생성하고, process.env 를 출력합니다.

Node.js의 내장 객체 process.env를 이용하면, 명령어 export 로 확인한 내용과 동일한 내용을 객체로 출력합니다.

 

즉, process.env 는 Node.js 환경에서 조회 가능하고, dotenv는 이어지는 콘텐츠 .env파일을 환경변수로 사용할 수 있게 돕는다.

 

 

3) .env (Node.js에서 환경변수 영구 적용)

명령어 export 로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능합니다.

환경변수를 Linux 운영체제에 저장하는 방법은 여러 가지가 있지만, Node.js에서는 파일 .env를 만들어 저장하는 방법을 사용합니다.

 

1. 먼저 .env 파일을 생성하고, 사용하고자 하는 환경변수를 입력한 뒤 저장합니다.

.env 파일을 생성하고, 환경변수로 사용할 myname에 "kimcoding"을 할당

 

모듈 dotenv를 이용하면, 파일 .env에 저장한 환경변수를 조회할 수 있습니다.

2. index.js를 다음과 같이 수정하고, 저장합니다.

const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);

그다음 index.js를 실행하면 다음과 같은 결과

index.js 파일을 수정하고, 실행

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

 

 

 

API 키 관리 요령

 

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

 

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

즉, 개발용 키와 실제 제품용 키를 다르게 하여 효율성을 높힌다는 뜻 입니다.

 

데이터베이스도 마찬가지로 개발, 테스트, 제품 환경으로 구분할 수 있습니다. 다음 그림은 각기 다른 환경에, 같은 변수 이름을 사용하여 데이터베이스를 구분한 예시입니다.

 

 

 

반응형

'기타' 카테고리의 다른 글

[Linux] 기초 명령어  (2) 2021.05.20