본문 바로가기
Base/Linux(CentOS)

9. 프로세스 / boot loader / run-level (리눅스 root 암호 없이 root 접근)

by 귀멸 2022. 6. 21.

0. 프로세스
 - CPU 리소스(연산 능력)을 사용하는 프로그램
 
 - 분류
   1) 종류
     대화형 프로세스   : 사용자가 입력장치를 통하여 전달한 명령의 결과를 출력 장치를 통해 돌려주는 프로세스 
     배치 프로세스   : 정해진 시간에 약속된 동작을 수행하는 프로세스
     데몬 프로세스   : 서비스의 동작을 제어하는 프로세스

   2) 동작 위치
     포그라운드 프로세스  : 내가 현재 사용중인 프로세스
     백그라운드 프로세스  : 그 외 모든 동작 중인 프로세스

  - 프로세스 확인
     ps [옵션] | grep <찾을 내용>

    * 옵션
        -e : 백그라운드 프로세스 까지 확인
        -f : PPID까지 확인

# 출력 내용 보는 방법
UID :  User ID, 해당 프로세스를 실행한 사용자를 표시
PID :  Process ID, 프로세스에 할당되는 관리(식별) 번호, 
          한 번 사용된 번호는 재부팅 전에는 다시 사용 X
PPID : Parents PID, 해당 프로세스의 상위 프로세스 PID(프로세스도 tree 구조로 구성)
   C    : CPU 점유율(0으로 출력되는 내용은 1% 미만)
STIME: 프로세스가 시작된 시간
TTY  : Terminal, 해당 프로세스가 어느 터미널을 통하여 제어되고 있는지 출력
           (? : system, tty/숫자 : real terminal, pts/숫자 : virtual terminal - putty 등)
TIME : 프로세스가 동작하는데 걸린 시간
CMD  : 프로세스를 동작시킨 명령(or 작업)

# 프로세스 종료
kill <PID>

* 종료되지 않는 프로세스는 상위 프로세스를 확인하여 종료
   (종료하면 안되는 프로세스 반드시 확인)

1. grub2 boot loader
  - boot loader : 부팅 과정에서 어느 OS로 부팅할 것인지 선택, 그 OS로 부팅을 시작시키는 역할
                          >  CentOS는 6버전까지는 grub 사용, 7버전부터 grub2 사용

  - boot loader 화면에서 특정 방식의 제어를 통하여 root 암호를 모르는 상태로 root 접근 가능
   1) 부팅 시 kernel 목록이 나오는 화면 (5초 유지)에서 아래 방향키를 한 번만 내려도 
       자동 진행이 멈춤
   2) 가장 위에 있는 kernel(최신 버전)을 선택한 상태에서 e 눌러 편집 화면으로 이동

   3) 편집 화면에서 아래 방향키로 마지막 줄까지 이동 후 linux16으로 시작하는 줄의 내용 수정
    * 수정 내용 : ro -> rw, rhgb quiet -> init=/bin/bash, LANG=ko_KR.UTF-8 내용은 삭제
    * 수정 내용 중 rhgb quiet를 rhgb single로 바꿔주면 single user mode로 부팅

   4) 수정된 내용으로 부팅(일회성) ctrl + X 눌러주기

   5) 각종 메세지가 출력되다가 bash-4.2#이 출력되면 root 사용자로 부팅이 
       완료된 상태(확인:whoami)
        * 이 환경에서 동작이 안되는 명령어들이 있다
   6) 필요한 작업이 다 끝난 후에는 exec /sbin/init 입력하여 정상 부팅

  - grub2 boot loader에서 kernel 편집 막는 방법(인증 통과 후 편집)
   1. /etc/grub.d/00_header 파일 마지막 줄 아래로 다음 내용 추가
     <내용>
     cat << EOF
     set superusers='인증ID'
     password 인증ID 인증암호
     EOF
   2. grub2-mkconfig -o /boot/grub2/grub.cfg 명령 입력하여 적용

2. run-level
  - 시스템 부팅 과정에서 동작하는 각종 프로세스들을 단계별로 구분해놓은 개념
    런레벨에 따라 동작하는 프로세스들이 추가되는 방식으로 구성

  - unix 기반의 운영체제는 부팅 시 어느 run-level 단계로 부팅을 할 것인지 설정
    > 운영체제에 따라 런레벨이 다르기 때문에 미리 확인이 필요하다

  - CentOS 7버전부터 런레벨 방식이 변경
   1) ~ CentOS 6 : 부팅 시 initd 메인 프로세스 동작 -> /etc/inittab 파일 내부 내용을 확인하여 부팅할 

                          런레벨 결정 ( /etc/inittab 내부 id:숫자:initdefault: 설정의 숫자에 따라 런레벨 결정)

runlevel 0 : halt (시스템 종료)
runlevel 1 : single user mode (CLI, only root, 최소한의 service 동작, 백업/복구용으로 사용) 
runlevel 2 : multi user monde without NFS (CLI, all user, network+GUI 관련 service 동작 X)
runlevel 3 : full multi user mode (CLI, all user, GUI 관련 service 동작 X)
runlevel 4 : unused
runlevel 5 : X11 (GUI, all user, all service 동작)
runlevel 6 : reboot (시스템 재부팅)

   2) CentOS 7 ~ : 부팅 시 systemd 메인 프로세스 동작 -> default.target 링크 파일에 연결된 런레벨로 부팅
                            (/etc/systemd/system/default.target 링크 파일이 /usr/lib/systemd/system/  디렉토리 내부에 있는 

                            런레벨 타겟에 연결되어 있다)

porweroff.target  : runlevel 0
rescue.target   : runlevel 1
multi-user.target : runlevel 3
graphical.target  : runlevel 5
reboot.target    : runlevel 6

     - 런레벨 확인
        systemctl get-default   : 현재 target 런레벨 값 보기
        ls -l /etc/systemd/system/default.target

     - 런레벨 변경
        systemctl set-default <런레벨 타겟> multi-user.target  : target 런레벨 값 바꾸기
        ln -sf /usr/lib/systemd/system/<런레벨 타겟> /etc/systemd/system/default.target
        ln -sf /usr/lib/systemd/system/graphical.target /etc/systemd/system/default.target
        ll /etc/systemd/system/default.target

 3. ln
 - hard link 생성
    > 옵션을 이용하여 symbolic link 생성 가능
  * hard link    : 원본 파일과 inode 값이 같은 파일(= 같은 sector에 저장된 데이터로 연결하는 파일)
    symbolic link : 원본 파일로 연결되는 link 파일(= windows의 바로가기 개념)

 - 형식
    ln [옵션] 원본 링크이름
     * 옵션
       -s  : hard link가 아닌 symbolic link 생성
       -f  : 기존 link 파일에 덮어쓰기
       (이미 존재하는 link 파일로는 link 생성이 불가능해서 사용하는 옵션)

댓글