Linux 사용권한과 환경변수

공윤배·2021년 10월 5일

211005 CodeStates 52일차

어제는 대체공휴일로인해 따로 수업이 없었고 오늘 Section3가 시작되었다.
오늘은 Linux OS의 사용권한과 환경변수에 대해 공부했다.
CodeStates수업을 들으면서 Mac OS를 사용하는 맥북으로 노트북을 바꾸고 npm과 node등을 사용하기 위해 터미널을 이용하고 있지만 아직까지는 CLI를 완벽하게 사용한다고는 말할수 없을것 같다.
오늘 크루분의 말씀을 들어보니 나중에 서비스를 개발해 배포하게 되면 AWS와 같이 클라우딩 서비스를 이용하게 되는데 개발된 앱을 운영하는 환경을 빌리는 그런 개념인 것 같다.
그 때가 되면, 개발된 앱이 운영되는 환경 다시말해 빌려서 원격으로 사용하는 컴퓨터에는 GUI를 지원하지 않고 오로지 CLI만을 이용하여 앱이 배포될 수 있도록 컨트롤 해야한다고 한다.
나중에 있을 일이기는 하지만, CLI에 대해 조금 더 친숙해져야할 필요가 있을 것 같다.
더불어 Linux 운영체제에 관한 지식도 시간이 된다면 공부해야 할 것 같다.

사용권한

고성능 컴퓨터에서 실행되는 Linux와 같은 UNIX계열 운영체제는 여러 사용자가 들어와서 사용하는 멀티유저 시스템이다.
여러 사용자가 들어오기 때문에, 내가 만든 파일이나 디렉토리를 다른 사용자가 들어왔을 때, 마음대로 수정하거나 삭제했을 때는 문제가 발생할 수 있다.
그래서, Linux의 모든 파일 혹은 디렉토리들은 읽기,쓰기,실행, 세가지 권한을 파일을 생성한 소유자, 특정그룹에 소속된 사용자, 그외의 사용자에 대해 각각 지정할 수 있게 만들었다.

컴퓨터의 터미널에서 특정 디렉토리로 이동한 다음 ls -l 명령어를 입력하면 제일 왼쪽에 폴더나 파일의 권한 정보가 출력된다.

권한정보는 10자리의 문자로 이루어져있는데, 제일 첫번째 문자는 디렉토리와 파일을 구분할 수 있는 문자이도(d는 디렉토리를 의미,-는 파일을 의미한다.), 그 뒤의 9자리의 문자는 3자리씩 나뉘어 user의 권한, group의 권한, other의 권한을 나타낸다.

권한의 종류

  • read => r
    읽기권한이다. 파일의 경우 읽을 수 있는 권한이며 디렉토리의 경우 ls명령어를 통해 디렉토리 내부를 읽을 수 있는 권한이다.
  • write => w
    쓰기권한이다. 파일의 경우 쓸수 있는(수정이 가능) 권한이며 디렉토리의 경우 디렉토리 내부의 컨텐츠를 수정할 수 있는 권한이다.
  • execute => x
    실행권한이다. 파일의 경우 실행할 수 있는 권한이며 디렉토리의 경우 cd명령어를 통해 디렉토리 내부로 진입할 수 있는 권한이다.

권한은 3자리로 구성되며 r,w,x의 순서를 갖는다.
특정 권한이 없을 경우에는 -로 표시한다.
ex)       r-x => 읽기권한,실행권한만 있음     -w- => 쓰기권한만 있음

사용자의 종류

  • user: 파일의 소유자이다. 기본적으로 파일을 만든 사람이 소유자가 된다.
  • group: 그룹에는 여러명의 user가 포함될 수 있다. 그룹에 속한 모든 user는 파일에 대한 동일한 액세스 권한을 갖게된다. 많은 사람이 특정 파일에 액세스해야하는 프로젝트를 진행할 때는 각각의 user에게 일일히 권한을 부여하는 대신에 그룹에 user들을 추가하고 일괄적으로 group에 권한을 할당할 수 있다.
  • other: 파일에 대한 액세스 권한이 있는 다른 user이다. 파일을 만들지 않은 다른 모든 user들을 의미한다. other권한을 설정하면 global권한 설정이라고도 볼 수 있다.

권한을 변경하는 chmod

chmod명령어를 이용하여 파일 혹은 디렉토리의 읽기,쓰기,실행 권한을 변경할 수 있다.
Symbolic method와 Absolute form 두가지 방법으로 권한을 변경할 수 있다.

Symbolic method
액세스클래스, 연산자, 액세스 타입으로 구분하여 권한을 변경하는 방법이다.
   - 액세스 클래스: u(user),g(group),o(other),a(all:u,g,o)
   - 연산자: +(권한부여),-(권한제거),=(할당)
   - 액세스타입: r(read),w(write),x(execute)
ex)
chmod g+r file명 : 해당파일의 group사용자에 r권한 추가
chmod u-x file명 : 해당파일의 user사용자에 x권한 제거
chmod a=rw file명 : 해당파일의 모든 사용자에게 r권한과 w권한 추가
chmod u= file명 : 해당파일의 user사용자에게 모든권한 제거

Absolute form
각 사용자의 권한을 세자리의 2진법 숫자로 변환하여 권한을 변경하는 방법이다.
r,w,x의 순으로 세자리의 2진법 숫자로 변환할 수 있다.
   --- => 0
   --x => 1
   -w- => 2
   -wx => 3
   r-- => 4
   r-x => 5
   rw- => 6
   rwx => 7

변환된 숫자를 이용하여 다음과 같이 chmod명령어를 사용할 수 있다.
chmod 754 file명 : user의 권한을 7(rwx), group의 권한을 5(r-x), other의 권한을 4(r--)로 지정

환경변수

환경변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 끼치는, 동적인 값들의 모임이다.(운영체제가 실행되기 위해 필요한 값들의 모임)
터미널에 export명령어를 입력하면 현재 컴퓨터에 기록되어 있는 환경변수를 확인할 수 있다.

export명령어 뒤에 변수명과 변수를 입력하면 새로운 환경변수를 추가할 수 있다.
다만 이 방법으로 추가된 환경변수는 현재 사용중인 터미널에서만 임시로 사용할 수 있다.

dotenv모듈

실제 서비스를 개발하는 과정에서 개발환경과 실제로 제품을 배포하여 운영하는 환경이 있다.
예를 들어 구글 API를 이용하여 웹 애플리케이션을 개발하는 경우, 개발환경에서는 개인의 API키를 이용해 개발을 진행하지만, 실제로 서비스가 운영되는 환경에서 개인의 API키를 사용하게 되면 일일 요청량을 초과하게 되고 막대한 요금이 부과될 수도 있고, 정상적으로 애플리케이션이 동작하지 않을수도 있다.
운영환경에서는 대게 기업용 API키를 사용하는데, 이처럼 개발환경과 운영환경에서 사용하는 API키가 다른 경우, 환경변수를 이용해 환경을 구분하여 사용되는 API키를 다르게 할 수 있다.
또한 API키 혹은 DB의 password같은 민감한 정보들도 환경변수를 이용해 저장하고 관리할 수 있다.

dotenv모듈을 이용하여 자바스크립트에서 환경변수를 사용할 수 있다.
환경변수를 사용하고자 하는 디렉토리에 dotenv모듈을 설치하고 .env파일을 만들어 그 안에 사용할 환경변수들을 추가한다.
js파일에서 dotenv의 config함수를 이용하면 .env에 적힌 환경변수들이 추가된다.
이렇게 추가된 환경변수들은 환경변수를 담고있는 process.env객체를 이용해 접근할 수 있다.

//.env 파일을 작성한다.
DBpwd:0000
//index.js
const dotenv=require('dotenv');
dotenv.config();
console.log(process.env.DBpwd);
// 0000이 출력된다.

js파일을 실행하여 추가된 환경변수는 js파일을 실행한 node프로세스가 종료되면 함께 사라진다.

0개의 댓글