17/120

김건호·2022년 3월 3일
0

부트 프로세스

리눅스 부팅과정

  1. Power ON
  2. BIOS 프로그램 실행
    POST(power on self test) 부팅 시작시 자체진단 기능을 통해 컴퓨터 이상 유무 검사 진행
  3. 부트메체 검색
  4. 부트로더의 실행
  5. 커널 이미지 적재
    커널 이미지는 압축되어 있는 상태로, PID가 0번인 swapper 프로세스를 호출하여 압축해제
    -> 커널이 사용할 각 장치들을 초기화, 자세한 정보 콘솔에 출력
  6. 파일 시스템 마운트
    루트 파일시스템 마운트
  7. systemd 프로세스 실행
    모든 프로세스의 부모 역할을 하는 PID 1번인 systemd 프로세스 실행
    systemd는 local-fs.target를 통해 파일시스템 점검
    systemd는 default.target을 불러들임(graphical.target or mulit-user.target). 이 타겟들은 의존성으로 아래 타겟들을 필요로 함
    graphical.targetGUI 환경 구성 그래픽 모드에 필요한거 실행multi-user.target 필필요
    multi-user.targetCLI 환경 구성basic.target필요
    basic.targetSELINUX, 네트워크 환경 구성sysinit.target필요
    sysinit.target마운트 안정local-fs.target필요
    local-fs.target/etc/fstab 에 등록된 마운트 작업
    추가적인 타겟
  • rescue.target : single mode root/ 비번이 필요, 네트워크 X, 루트가 read/write 읽기쓰기 모드
  • emerg.target : single mode root/비번 X 네트워크 X, /(->/sysroot) read only로 읽기전용 모드

system target

  • 현재 타겟 변경 :
systemctl isolate <TARGET>
  • 기본 타겟 확인 :
systemctl get-default
  • 기본 타겟 변경 :
systemctl set-default multi-user.target

RUN LEVEL

시스템이 가동되는 방법

런레벨영문설명비고
0power off종료모드
1rescue시스템 복구 모드단일 사용자 모드
2mulit-user사용 X
3mulit-user텍스트 모드의 다중 사용자 모드
4mulit-user사용 X
5graphical그래픽 모드의 다중 사용자 모드
6reboot

시스템 내에서 런레벨 확인

[root@localhost ~]# ls –l /usr/lib/systemd/system/*runlevel*
lrwxrwxrwx. 1 root root  15  2월 21 14:52 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root  13  2월 21 14:52 /usr/lib/systemd/system/runlevel1.target -> rescue.target
...

GRUB

파일 시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서의 커널의 물리적인 위치를 기록하지 않고도 커널의 파일명과 커널이 위치하고 있는 파티의 위치만을 알고 잇으면 시스템 부팅이 가능함

# cat /boot/grub2/grub.cfg
# cat /etc/default/gurb

root 비밀번호 초기화

  1. 커널 선택화면에서 아무키를 눌러 카운트 해제
  2. 원하는 커널에서 'e'를 눌러 grub 진입
  3. linux16 라인 ㄲㅌ에 rd.break 입력 후, ctrl + x
  4. /sysroot를 읽기쓰기 전용으로 마운
# mount -o rw,remount /sysroot
  1. 가상의 루트 디렉토리로 /sysroot 지정
# chroot /sysroot
  1. 비밀번호 초기화
# passwd
  1. /sysroot 생긴 변화를 메모리 초기화하기 전에 본 시스템에 인식시키기 위한 파일 생성
# touch /.autorelabel

만들지 않으면 부팅이 안 될수도 있으니 주의
8. ctrl + d 두번 입력
9. 다음 부팅 시, 변경된 비밀번호 적용

근데 이러면 누구나 변경 가능한거 아니에요❓
초기상태에 설정가능하지만 부트로드 설정(새롭게 프로그래밍)을 하면 막을 수 있음
ex) 부트로더 진입 시, ID PW 입력하게 함

부트로더 커널 이미지 시간 변경

[root@localhost ~]# vi /etc/default/grub
GRUB_TIMEOUT=5 
# 위 항목 변경

부트로더 ID 및 PW 설정

1./etc/default/grub에 있는 설정을 불러오는 파일 열기

# vi /etc/grub.d/00_header
  1. 가장 마지막 부분에 해당 내용 작성
cat << EOF
set superusers='ID명'
password ID명 PW
EOF
  1. 설정내용 부트로더에 인식시키기
grub2-mkconfig -o /boot/grub2/grub.cfg
  1. 재부팅

소프트웨어 추가/삭제


가상머신에서 디스크 파일 선택을 눌러

패키지 파일이 들어있는 이미지 파일을 넣어둡니다

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
...
sr0     11:0    1  4.2G  0 rom

사용하기 위해 마운트 해줍니다

[root@localhost ~]# umount /dev/cdrom
umount: /dev/cdrom: not mounted
[root@localhost ~]# mkdir /media/cdrom
[root@localhost ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# ls /media/cdrom
CentOS_BuildTag  EULA  LiveOS    RPM-GPG-KEY-CentOS-7          TRANS.TBL  isolinux
EFI              GPL   Packages  RPM-GPG-KEY-CentOS-Testing-7  images     repodata

Packages 디렉토리안에

[root@localhost ~]# ls /media/cdrom/Packages/ | head -5
389-ds-base-1.3.7.5-18.el7.x86_64.rpm
389-ds-base-libs-1.3.7.5-18.el7.x86_64.rpm
ElectricFence-2.2.2-39.el7.x86_64.rpm
GConf2-3.2.6-8.el7.x86_64.rpm
GeoIP-1.5.0-11.el7.x86_64.rpm

.rpm이라는 패키지 파일들이 존재합니다

rpm

패키지 이름 정보

  • 패키지이름-버전-릴리즈번호-프로세서아키텍쳐
    패키지 이름이 알고 있는 내용과 다를 수 있음
    -> 사용되는 서비스명과 패키지명이 다를 수 있으므로 주의

rpm 명령어

  • 설치 : rpm –Uvh 패키지파일 경로
[root@localhost ~]# rpm -Uvh /media/cdrom/Packages/ksh-20120801-137.el7.x86_64.rpm
  • 삭제 : rpm –e 패키지명
[root@localhost ~]# rpm -e ksh
  • 패키지에 대한 설치 여부 확인 : rpm –qa => 시스템에 설치 되어 있는 모든 패키지를 확인
[root@localhost ~]# rpm -qa | grep ksh
ksh-20120801-137.el7.x86_64

rpm의 이해

rpm은 저수준 도구로 2가지 단점이 존재
1. 패키지 설치를 위해 반드시 .rpm파일이 필요함
2. 의존성을 해결하지 못 함

[root@localhost ~]# rpm -Uvh /media/cdrom/Packages/mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
경고: /media/cdrom/Packages/mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
오류: Failed dependencies:
        libodbc.so.2()(64bit) is needed by mysql-connector-odbc-5.2.5-7.el7.x86_64
        libodbcinst.so.2()(64bit) is needed by mysql-connector-odbc-5.2.5-7.el7.x86_64

해당 패키지를 설치하기 위해서는 다른 패키지 설치가 우선이라는 경고메시지
추가적인 문제 : 필요한 패키지를 패키지명으로 명시하는 것이 아니라 라이브러리 명으로 명시 되기 때문에 찾기가 쉽지 않음 => 해당 패키지가 또 다른 의존성이 필요할 수도 있으므로 2차 문제 발생 가능성 존재

따라서, rpm은 패키지의 설치보다는 관리 목적의 용도로 많이 사용

RPM 관련 패키지 정보 확인 옵션

  • -q : 쿼리
  • -a : 시스템에 설치되어 있는 모든 패키지
  • -i : 패키지에 대한 정보
# 정보확인
[root@localhost ~]# rpm –qi openssh 
  • -c : 패키지의 설정파일들 보여줌
# 설정파일 확인
[root@localhost ~]# rpm –qc openssh 
  • -d : 패키지의 문서(document)를 보여줌
# 패키지안에 있는 모든 문서들을 확인할 때
[root@localhost ~]# rpm –qd openssh
  • -l : 패키지의 모든 파일 보여줌
# 패키지를 구성하는 모든 파일 확인
[root@localhost ~]# rpm –ql openssh 
  • -f : 특정파일에 대한 패키지 명 확인
# 어떤패키지로 인해 생성이 되었는지
[root@localhost ~]# rpm -qf /etc/ssh/
openssh-7.4p1-16.el7.x86_64 

yum

rpm의 단점인 의존성 문제를 해결

[root@localhost ~]# yum install mysql-connector-odbc.x86_64
...
==================================================================================================
 Package                         Arch              Version                  Repository       Size
==================================================================================================
Installing:
 mysql-connector-odbc            x86_64            5.2.5-8.el7              base            142 k
Installing for dependencies:
 unixODBC                        x86_64            2.3.1-14.el7             base            413 k
...

의존성이 필요한 패키지를 자동으로 설치, 패키지명으로 명시
저장소를 통해 다운로드 하기 때문에인터넷이 연결되어 있어야 함

yum 명령어

# yum [sub-command] [패키지명]
  • install 패키지명 : 패키지 설치
[root@localhost ~]# yum install ksh
...
Resolving Dependencies
--> Running transaction check
---> Package ksh.x86_64 0:20120801-143.el7_9 will be installed
--> Finished Dependency Resolution
...
Installed:
  ksh.x86_64 0:20120801-143.el7_9

Complete!
  • remove 패키지명 : 패키지 삭제
[root@localhost ~]# yum remove ksh
  • update 패키지명 : 패키지 업데이트
    리눅스에서의 업데이트 의미
    기존 패키지를 삭제하고 상위 버전의 패키지를 재설치
    단, 커널 업데이트 경우에는 기존의 커널을 삭제하지 않고 새로운 버전의 커널을 설치
  • info 패키지명 : 패키지 정보확인
[root@localhost ~]# yum info ksh (저장소에 묻는 것)
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
Available Packages
Name        : ksh
Arch        : x86_64
Version     : 20120801
Release     : 143.el7_9
Size        : 885 k
Repo        : updates/7/x86_64
Summary     : The Original ATT Korn Shell
URL         : http://www.kornshell.com/
License     : EPL
Description : KSH-93 is the most recent version of the KornShell by David Korn of
            : AT&T Bell Laboratories.
            : KornShell is a shell programming language, which is upward compatible
            : with "sh" (the Bourne Shell).
  • list : repository 의 패키지 리스트 출력
  • provides file/dir : 해당 파일이나 디렉토리가 어떠한 패키지로 인해서 파생되었는지 알려줌( = rpm -qf 와 동일한 작용)
yum provides /var/www
httpd-2.4.6-80.el7.centos.x86_64 : Apache HTTP Server
  • 패키지 설치 로그 확인

less /var/log/yum.log

- repolist all : repository 점검

최소 버전 설치 패키지가 여러개가 되면 사용자가 모두 외우기 힘듦 -> 패키지를 모아둔 그룹 패키지가 존재
- groups list : 그룹 패키지 리스트 출력
- groups install 그룹 패키지명 : 그룹 패키지 설치
- groups remove  그룹 패키지명 : 그룹 패키지 삭제
- groups update  그룹 패키지명 : 그룹 패키지 업데이트
- groups info  그룹 패키지명 : 그룹 패키지 정보

해당 패키지 안에는 아래 패키지가 있음

[root@localhost ~]# yum groups info "보안 툴"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile

  • base: mirror.kakao.com
  • extras: mirror.kakao.com
  • updates: mirror.kakao.com

Group: 보안 툴
Group-Id: security-tools
Description: 통합과 신뢰 검증을 위한 보안 툴
Default Packages:
+scap-security-guide
Optional Packages:
aide
hmaccalc
openscap
openscap-utils
scap-security-guide-doc
scap-workbench
strongimcv
tncfhh
tpm-quote-tools
tpm-tools
tpm2-toolsㅇㅇㅇ
trousers

- localinstall 패키지파일명 : 패키지파일을 yum으로 설치
 낮은 버전의 패키지를 이용하고 싶을 때 이용, yum은 기본적으로 최신 버전의 패키지를 다운 받는 것을 원칙으로 함


 >sub-command 가 tab으로 자동완성이 안되는 경우 ❗ yum list 를 실행 후 버퍼에 올려놔주면 자동완성이 잘 된다❗❗

 ### 옵션 
 - -y : 모든 물음에 yes
 - -t, --tolerant : 에러를 자동으로 잡아서 설치
 - -e : 결과중 에러를 보여줌
 


### repository 파일 설정
/etc/yum.repos.d/ 을 이용하여
#### repolist [all] : 활성화 상태 확인 

[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name statu
net repo 10,072
repolist: 10,072

#### 내용 구성
순서 중요
DVD -> NET으로 보통 구성

[ID명]
name=repo명
baseurl=http://주소
file://절대경로
enabled=1/0 (1이면 활성화, 0이면 비활성화)
gpgcheck=1/0 (1이면 라이센스 키가 있을 경우, 0이면 라이센크 키가 없는 경우)
gpgkey=file://절대경로(gpgcheck=1 일 경우에만 작성)

##### 예시

[root@localhost ~]# cd /etc/yum.repos.d/

기존의 파일들을 백업하기

[root@localhost yum.repos.d]# vi test.repo

[dvd]
name=dvd repo
baseurl=file:///media/cdrom
enabled=0
gpgcheck=0

[net]
name=repo
baseurl=http://mirror.centos.org/centos/7/os/x86_64
enabled=1
gpgcheck=0

"test.repo" 11L, 159C

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글