IT STUDY LOG

[리눅스 운영체제] 05. 관리자로서의 리눅스 본문

devops bootcamp 4/서비스 운영 기초

[리눅스 운영체제] 05. 관리자로서의 리눅스

roheerumi 2023. 3. 11. 09:45

# 학습 목표

  • 관리자로서의 리눅스 ~ 자동화
    • 시스템 관리자가 하는 일을 이해할 수 있다.
    • 사용자 및 루트 권한에 대해 이해하고, 사용자 및 그룹 관리를 할 수있다.
    • 파일의 권한을 변경하고 관리할 수 있다.
    • 프로그램과 프로세스의 차이를 이해하고, 프로세스를 확인/종료할 수 있다.
    • 백그라운드 프로세스와 서비스를 이해하고, 관리할 수 있다.
    • 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
Comments