GRUB, SELinux, 부팅(Booting), systemd, 명령어

sso·2025년 3월 18일
0

리눅스 서버

목록 보기
8/40

1. GRUB

  • GRUB : 여러 운영체제가 설치되어 있을 때 선택하여 부팅할 수 있도록 해주는 프로그램

GRUB 화면

GRUB 경로

/etc/default/grub

GRUB 내용

TIMEOUT, DISTRIBUTOR, DEFAULT 등 다양한 옵션이 있는것을 확인할 수 있다.

1-1. GRUB 실습 (화면 대기 시간 변경 작업)

우선 grub의 내용을 보면 GRUB_TIMEOUT=5로 대기시간이 기본으로 5초로 설정되어있는데 변경해보겠다.

  1. vi /etc/default/grub
  2. GRUB_TIMEOUT=15 ← 대기시간을 기존 5초에서 15초로 변경

  1. grub2-mkconfig -o /boot/grub2/grub.cfg
    grub의 내용을 변경했다면 변경 내용을 적용하기 위해서 명령어 실행

  1. 변경한 내용을 확인하기 위해 재부팅 한 후 GRUB 화면에서 변경사항을 확인하니
    대기시간이 15초로 변경된 것을 확인할 수 있었다.

1-2. GRUB 활용 - root 패스워드를 잊어버렸을 경우

  1. GRUB 부트 메뉴에서 e를 눌러 편집 상태로 진입

  1. 인자값이 있는 마지막 줄로 이동하여 인자값 변경
    -- 기존 인자값 : rhgb quiet
    -- 변경 인자값 : rw init=/bin/sh

  2. Ctrl + x를 눌러 부팅 진행 (이때 응급 복구 모드로 부팅이 자동으로 진행된다.)

  1. 사용자 확인 후에 passwd 명령어를 사용하여 패스워드를 변경한다.
    -- whoami
    사용자가 root인지 확인해야 한다.
    (내가 변경하려는게 root의 패스워드이기 때문)

  2. SELinux를 사용할 경우에는 라벨(label) 변경 명령을 실행
    -- touch /.autorelabel

  3. 시스템 재부팅
    -- exec /sbin/init

1-3. GRUB 패스워드 설정

GRUB에는 아무나 접근하면 안돼기 때문에 GRUB에 사용자(id), 패스워드(pw)를 설정할 수 있다.

/etc/grub.d/00_header 파일에서 GRUB의 사용자, 패스워드 설정 코드를 입력할 수 있다.

  1. vi /etc/grub.d/00_header 파일 수정

  2. 아래 명령어를 맨 아랫줄에 입력
    -- vi 모드에서 gg → 파일 맨 위로 이동
    -- vi 모드에서 Shift + g → 파일 가장 아래로 이동
    -- EOF (End Of File)

cat <<EOF
set superusers="4gl"
password 4gl 1234
EOF

  1. grub2-mkconfig -o /boot/grub2/grub.cfg 변경한 내용 적용

사실 결국 제일 중요한건 GRUB의 내용을 변경했다면 변경사항을 적용하기 위해
grub2-mkconfig -o /boot/grub2/grub.cfg 명령어를 실행하는것이 가장 중요함
(해당 명령어를 실행하지 않으면 수정한 의미가 없다.)

2. SELinux(Security Enhanced Linux)

  • 리눅스 커널의 보안 모듈임
  • 시스템 내부의 프로그램, 파일 등의 제어 권한을 강제적으로 적용시킴
  • 관리자의 실수, 내부자의 악의적인 행동을 제어함
  • NSA 미 국가안보국에서 만들었음

나는 지금 실습을 하며 외부와 연결을 하지 않기에 해당 모듈을 종료시키겠다.

2-1. SELinux 모듈 종료 실습

  1. vi /etc/sysconfig/selinux
  2. SELinux=enforcing ➡️ SELinux=disabled 변경

3. 부팅(Booting)

  • 리눅스에서 부팅은 HW 하드웨어 점검 → SW 소프트웨어를 메모리에 적재하는 순으로 진행된다.
    -- 하드웨어 점검 ➡️ 커널 로드 ➡️ 마운트 ➡️ init(현재는 systemd) 프로세스(부팅 관리 프로그램)
  • RHEL 6 버전까지는 부팅 관리 프로그램으로 init을 사용했지만 RHEL 7 버전부터 systemd 프로그램을 사용한다. (init → systemd 진화)
    -- systemd(system daemon)
    -- init, systemd를 슈퍼 데몬이라고 부르며 슈퍼 데몬이 부팅 이후에 발생하는 모든 프로세스를
    복사본(fork) 형태로 생성함

4. Ctrl + Alt + [F1] ~ [F6]

콘솔 창의 종류를 변경할 수 있음

F1 - GUI 기반
F2 - CLI 기반

5. 컴퓨터 역사 관련 블로그

그림과 가벼운 설명으로 컴퓨터의 역사에 대해 쉽게 이해할 수 있는 블로그

https://joone.net/2018/06/21/22-x-window-%ED%83%84%EC%83%9D/

6. systemd

  • RHEL 6 이전버전까지는 init을 사용하다 RHEL 7 이후로는 systemd를 사용함
  • systemd는 슈퍼데몬이라고 말할 수 있으며 systemd는 시스템의 부팅 및 서비스를 관리하는 프로그램
  • systemd에는 시스템 관련 기능을 제어하는 명령어를 내장하고 있으며 날짜 및 시간을 변경하는 timedatectl, 호스트명을 변경하는 hostnamectl과 같은 명령어를 내장하고 있음

- systemd의 디렉터리

/etc/systemd/system

6-1. systemd의 unit(유닛)

1. service
관련 파일명이 .service로 끝나며 .service로 끝나는 프로그램을 보통 데몬(daemon)이라고 부름
(daemon : 백그라운드에서 구동되는 프로그램)

  • systemctl 이라는 명령어로 제어됨
  • 예시) systemctl status sshd.service
    -- 상태값 active(running) : 동작 중인 상태
    -- 상태값 inactive(dead) : 종료된 상태

2. target = runlevel(런레벨)
관련 파일명이 .target으로 끝나며 부팅 레벨, 특정 동기화 지점같이 유닛을 그룹화 할 때 사용
시스템 상태를 정의할 때 사용

  • multi-user.target은 CLI를 의미
  • graphical.target은 GUI를 의미

현재 사용중인 target을 확인하는 명령어

systemctl get-default

target을 변경하는 명령어

systemctl set-default multi-user.target 기본 타켓을 멀티유저(CLI)로 변경

target의 디렉터리

/usr/lib/systemd/system

ls -l runlevel❓.target

  • 각 runlevel의 역할을 알 수 있음
    -- runlevel0은 종료
    -- runlevel6은 재부팅
    -- runlevel = init이라고 했기에 init 0 또한 종료, init 6 재부팅 명령어임

3. socket
관련 파일명이 .socket으로 끝나며 프로세스간 통신에 사용되는 소켓을 의미

  • 예시) systemctl start telnet.socket

socket과 service의 차이

service : standalone
상시 메모리에 적재 (처리 빠름)

socket : xinetd, inted
요청 시에만 메모리에 적재 (처리 느림)

6-2. timedatectl - 날짜 및 시간 변경

timedatectl list-timezones

  • 나라별 시간대 명령어를 확인할 수 있음

timedatectl set-timezone Europe/Budapest

  • Europe/Budapest의 시간으로 컴퓨터의 시간을 변경함
  • 기존 KST(한국시간)에서 CET(세계기준시간)으로 변경됨

    문제) timedatectl 에서 Seoul의 명령어만 표시하고 시간을 다시 Seoul로 변경하라

    timedatectl list-timezones | grep Seoul
    timedatectl set-timezone Asia/Seoul

6-3. hostnamectl - 호스트명 변경

기본적으로 도메인 이름은 표시되지 않고 호스트 이름만 표시됨

  • hostnamectl set-hostname www.daum.net - 나의 호스트 이름을 www.daum.net으로 바꾸겠다
    (변경되었는지 확인하기 위해선 쉘을 재시작해야됨)
  • exec bash - 쉘 재시작
    -- 기본적으로 도메인 이름은 표시되지 않고 호스트 이름만 표시되는것을 알 수 있음
    -- 도메인 이름 : daum.net
    -- 호스트 이름 : www

7. 명령어

: 텍스트 파일의 첫 부분의 일정 부분을 보여주는 명령어

  • 예시) head -4 hello.txt ➡️ hello.txt 파일의 마지막 4줄을 표시 하라는 의미

tail

: 텍스트 파일의 마지막 일정 부분을 보여주는 명령어

  • 예시) tail -4 hello.txt ➡️ hello.txt 파일의 마지막 4줄을 표시 하라는 의미

more

: 파일의 내용이 긴 경우 화면(page) 단위로 출력하는 명령어

  • 예시) cat hello.txt | more ➡️ hello.txt를 화면에 표시하고 페이지 단위로 표시해라

less

: 파일의 내용이 긴 경우 커서(방향키)를 사용해서 상하좌우 이동이 가능하며 한 줄씩 표시하는 명령어 (한 줄씩, 페이지 단위 모두 이동 가능 - more 업그레이드 버전)

  • 예시) less hello.txt ➡️ hello.txt를 화면에 표시하고 방향키, 페이지 업/다운 등으로 자유롭게 탐색할 수 있음

systemctl

: systemd 기반의 시스템 및 서비스 관리를 제어하는 명령어

  • 예시) systemctl --now enable httpd(.service) ➡️ httpd 서비스를 부팅 시 자동으로 시작하도록 하며 즉시 실행한다는 의미
    ✔️ enable : 다음 번 부팅 시 httpd 서비스를 자동으로 시작함 (이후로 쭉 ~ 자동 시작 상태)
    ✔️ start : httpd 서비스를 실행시킨다는 의미
    ✔️ enable + start = --now enable : 재부팅하지 않아도 당장 시작되며 재부팅 이후에도 쭉 자동으로 시작된다는 의미

init

: init 프로세스(현 systemd), 실행 중인 프로세스를 무조건 실행레벨에 맞춰 실행
(강제성이 높아 권장하지 않음)

  • 예시) init 0 ➡️ 컴퓨터 즉시 종료
  • 예시) init 6 ➡️ 컴퓨터 즉시 재부팅
profile
오늘도 하나씩 해결해 나가자!

0개의 댓글