IT STUDY LOG
[리눅스 운영체제] 05. 관리자로서의 리눅스 본문
# 학습 목표
- 관리자로서의 리눅스 ~ 자동화
- 시스템 관리자가 하는 일을 이해할 수 있다.
- 사용자 및 루트 권한에 대해 이해하고, 사용자 및 그룹 관리를 할 수있다.
- 파일의 권한을 변경하고 관리할 수 있다.
- 프로그램과 프로세스의 차이를 이해하고, 프로세스를 확인/종료할 수 있다.
- 백그라운드 프로세스와 서비스를 이해하고, 관리할 수 있다.
- cron 및 bash 스크립트를 이용해서 자동화를 할 수 있다.
# 학습 내용
1. 시스템 관리자가 하는 일
접근 제어 |
|
업무 자동화 |
|
재난 대비 |
|
애플리케이션 배포 및 관리 |
|
모니터링 |
|
기타 |
|
2. 접근 제어의 기본
- 사용자와 관리자
사용자 | 관리자 |
- 일상적으로 PC를 켜서 바탕화면에 진입하기 위해 로그인하는 계정 - 사용자 계정만 존재할 시 해킹, 탈취 위험성 존재 |
- 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한을 지닌 사용자 - Microsoft 사의 경우 사용자 계정 컨트롤을 통해 일반 사용자와 관리자를 구분 - Linux 또한 사용자와 관리자 구분하여 권한 제어 |
- 리눅스의 표준 접근 제어 모델 규칙
- 파일(파일 및 디렉터리)은 소유자(owner)가 있다. 그러나 소유했다고 모든 권한을 갖는 것은 아니다.
- 파일은 생성한 사람이 소유한다.
- 관리자(root)만 할 수 있는 일이 있다.
- whoami: 현재 로그인된 사용자 확인
$ whoami
roheerumi
$ su root
암호:
# whoami
root
- 홈 디렉토리
- 사용자
- 개별적으로 각자의 홈 디렉토리 가짐
- 우분투 : /home/설치 시 입력했던 사용자 아이디(username)
- macOS : /Users/설치 시 입력했던 사용자 아이디(username)
- 본인의 홈 디렉토리 내에서 권한 사용하도록 제한
- 사용자가 새로운 프로그램을 설치, 변경, 삭제 시에는 루트 권한이 필요
- sudo 명령어 사용하여 한시적으로 루트 권한 획득 가능
- sudousers에 등록되어야 함
- password 입력 시에는 사용자의 password를 입력
- cf. su : pam_wheel_so 모듈을 사용해 su 명령어 사용이 허가된 사용자만 root 계정으로 접속할 수 있도록 설정 가
- 사용자 디렉토리 표현 : ~
- 개별적으로 각자의 홈 디렉토리 가짐
- root
- 사용자 디렉토리 및 시스템 전반에 영향
- 최상위 디렉토리 표현 : /
- 사용자
- 파일 및 디렉토리의 소유자(사용자) 및 그룹
- 소유자(사용자)는 파일의 사용 권한을 설정할 수 있음
# /etc/passwd : 사용자 정보가 담긴 파일 조회
$ sudo cat /etc/passwd
# 사용자 계정명:사용자 비밀번호(shadow 파일):uid:gid:코멘트:홈디렉토리:로그인 쉘
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
# id : uid 및 해당 사용자 속해있는 그룹 출력 명령어
$ id
uid=0(root) gid=0(root) 그룹들=0(root)
! Action Items !
- /etc/passwd 와 /etc/shadow 파일의 각 필드의 내용은 무엇인가요? 한번 연구해보세요.
/etc/passwd | 사용자 계정명:사용자 비밀번호(shadow 파일):uid:gid:코멘트:홈디렉토리:로그인 쉘 (ex) daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin |
/etc/shadow | 사용자 계정명:암호화된 패스워드:마지막으로 패스워드를 변경한 일자:패스워드 최소 사용기간:패스워드 최대 사용기간:패스워드 만료 이전 경고일수:패스워드 만료 이후 계정이 잠기기 전까지 비활성 일수:계정 만료일 설정일 (ex) root:$6$rT/bfU.QZYFJjcBP$cBXrHMa5zZ4oqCg6qA5uRm5FbpcvUHiJozRDjzHxr85Zf1kpezm/Dtr2yOyHNEX9nOr/5qGfnEdGKA7lDDGHn.:19425:0:99999:7::: |
/etc/group | 그룹명:그룹 패스워드:gid:사용자1, 사용자2 [, 사용자3 ...] (ex) bin:x:1:root,bin,daemon |
3. 루트 권한
- 루트(root) 권한: 관리자 권한
- 최상위 디렉토리에서 작업은 오로지 root만 가능
- 일반 사용자에게는 절대 root 권한을 완전하게 부여하지 않음으로써 운영체제 보호
- sudo: 루트 권한을 획득하는 명령어
- 한시적으로 루트 계정 권한이 부여됨
$ mkdir sudotest1
$ ls
gatsby.txt sudotest1
$ sudo mkdir sudotest2
[sudo] roheerumi 암호:
$ ll
합계 32
drwxrwxr-x 2 roheerumi roheerumi 4096 3월 10 14:20 sudotest1/ # 사용자 권한으로 생성
drwxr-xr-x 2 root root 4096 3월 10 14:20 sudotest2/ # 루트 권한으로 생성
- 루트 권한으로만 가능한 작업
- 하드웨어 장치 추가 생성 (장치 파일 생성)
- 시스템 시간 설정
- hostname(네트워크 이름) 설정
- 네트워크 인터페이스 설정
- 1024번 이하의 포트 오픈
- 시스템 종료
- 루트 계정으로의 로그인과 su 명령어
# su - 사용자명 : 사용자명으로 로그인 가능
roheerumi@VirtualBox:~$ su - miruheero
암호:
# su : root 로그인
miruheero@VirtualBox:~$ su
암호:
root@VirtualBox:/home/miruheero#
- sudo의 장단점
장점 | 단점 |
- 명령 로그가 기록된다. - 사용자들은 무제한의 루트 권한 없이 특정 작업을 수행 - 사용자가 루트 비밀번호를 몰라도 됨 - sudo가 su를 사용하거나, 루트로 로그인하는 것보다 빠름 - 루트 암호를 변경하지 않고도, 부여된 특권을 취소 가능 - 루트 권한을 갖는 모든 사용자의 목록을 관리 가능 (sudoers 파일 |
- sudo 사용자 개인 계정의 보안이 뚫리면, 루트 계정 자체가 뚫린 것과 동일 - sudo 명령 기록은 sudo를 이용해 지우는 것 가능 (다만 이러한 시도를 했다는 것을 명령어 로그를 통해 확인 가능) |
4. 환경 변수
- 환경 변수
- 운영체제, 소프트웨어가 각기 다른 컴퓨터 or 사용자마다 별도로 가질 수 있는 고유한 정보를 담는데 사용하는 변수
- 리눅스에서의 환경 변수
- env 명령어를 통해 확인 가능
- 주요 환경 변수
- SHELL: 어떤 종류의 쉘(대화형 인터페이스)을 사용할지 선택하는 환경 변수
- HOME: 홈 디렉토리가 무엇인지 알려주는 환경 변수
- PATH: 어디서든 해당 디렉토리에 있는 실행 파일을 실행할 수 있게 만들어주는 환경 변수
! Action Items !
- 쉘은 리눅스의 커널(kernel)과 대화할 수 있는 대화형 인터페이스라고 했습니다. 여러분이 사용하는 쉘은 무엇인가요? 대부분 bash나 zsh을 사용하고 있을겁니다.
> bash
Q. ls 명령어가 실행 파일이라는 것을 알고 있나요? ls는 어디에 위치하고 있나요? 해당 디렉토리가 PATH에 존재하나요?
> which ls 명령어를 통해 확인 가능. /usr/bin/ls로 PATH에 등록되어있지는 않지만 PATH에 등록된 /usr/bin 하위에서 찾게
- export: 전역 환경 변수를 임시로 적용하기
- export 명령어로 새로운 전역 환경 변수 추가 가능
- 이때 등호 표시(equal sign, =) 앞 뒤로 공백이 없어야 함
- 현재 명령어는 지금 열려있는 터미널(세션)에서만 한정되므로 로그인 시마다 항상 사용하기 위해서는 쉘 설정 파일에 설정해야함
# 지역 환경 변수 var1 선언
root@VirtualBox:/home/miruheero# var1="hello"
root@VirtualBox:/home/miruheero# echo $var1
hello
# 전역 환경 변수 var2 선언
root@VirtualBox:/home/miruheero# export var2="HELLO"
root@VirtualBox:/home/miruheero# echo $var2
HELLO
# 사용자 변경 후 지역 환경 변수, 전역 환경 변수 테스트
root@-VirtualBox:/home/miruheero# su roheerumi
roheerumi@VirtualBox:/home/miruheero$ echo $var1
roheerumi@VirtualBox:/home/miruheero$ echo $var2
HELLO
- 환경 변수는 왜 필요한가요?
- 서비스 운영 상황이 달라질 때 사용 (ex) 개발 환경, 테스트 환경, 실 운영의 경우 환경 변수로 분리할 필요성 존재
# 지역 환경 변수 var1 선언
root@VirtualBox:/home/miruheero# var1="hello"
root@VirtualBox:/home/miruheero# echo $var1
hello
# 전역 환경 변수 var2 선언
root@VirtualBox:/home/miruheero# export var2="HELLO"
root@VirtualBox:/home/miruheero# echo $var2
HELLO
# 사용자 변경 후 지역 환경 변수, 전역 환경 변수 테스트
root@-VirtualBox:/home/miruheero# su roheerumi
roheerumi@VirtualBox:/home/miruheero$ echo $var1
roheerumi@VirtualBox:/home/miruheero$ echo $var2
HELLO
5. Read, Write, Execute 권한
- 폴더인지 파일인지 확인하기 : ll 명령어 사용
$ mkdir linux
$ touch helloworld.js
$ vim helloworld.js
$ ll
합계 32
-rw-rw-r-- 1 roheerumi roheerumi 3 3월 10 14:47 helloworld.js # - : 일반 파일
drwxrwxr-x 2 roheerumi roheerumi 4096 3월 10 14:47 linux/ # d : 디렉토리
- user, group, and other
user group other - 파일의 소유자 - 여러 user가 속할 수 있음
- 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한 가짐
- group 생성 후 특정 권한 부여할 user들을 추가한 뒤 group에 권한 부여- user도 group도 아닌 모든 user - chmod: 권한을 변경하는 명령어
- 디렉터리나 파일의 읽기(read), 쓰기(write), 실행(execute) 권한을 변경할 수 있는 명령어
- chmod의 권한 변경 방식
symbolic method absolute form - 사용자, 연산자, 권한을 이용해 권한 지정
- 표현 방식
> access class : u(user), g(group), o(other), a(all: u,g,and o)
> operator : +(add access), -(remove access), =(set exact access)
> access type : r(read), w(write), x(execute)- 소유자, 그룹, 기타 사용자 순으로 각 3bit씩 이진 계산하여 권한을 지정하는 방식
# absolute method로 user, group, other에 실행 권한만 부여
$ chmod 111 helloworld.js
$ ll
---x--x--x 1 roheerumi roheerumi 3 3월 10 14:47 helloworld.js
# symbolic method로 user에는 읽기, 쓰기, 실행 권한 / group에는 읽기 권한만 재지정 / other에는 실행 권한 제거
$ chmod u+rwx,g=r,o-x helloworld.js
$ ll
-rwxr----- 1 roheerumi roheerumi 3 3월 10 14:47 helloworld.js
# symbolic method로 user, group, other의 모든 권한 재지정
$ chmod u=,g=,o= helloworld.js
$ ll
---------- 1 roheerumi roheerumi 3 3월 10 14:47 helloworld.js
'devops bootcamp 4 > 서비스 운영 기초' 카테고리의 다른 글
[리눅스 운영체제] 07. 서비스 관리 (0) | 2023.03.13 |
---|---|
[리눅스 운영체제] 06. 프로세스 관리 (0) | 2023.03.13 |
[리눅스 운영체제] 04. 출력 관련 명령 (1) | 2023.03.11 |
[리눅스 운영체제] 03. 패키지와 패키지 매니저 (0) | 2023.03.09 |
[리눅스 운영체제] 02. CLI 기본 명령어 (0) | 2023.03.09 |
Comments