본문 바로가기
모의해킹 침해대응 과정/Liunx 관리

리눅스 software 관리 RPM/YUM / day 10

by 알거음슴 2021. 4. 12.

1.  RPM (Redhat Package Manager)

 1) 형식 

[rpm] [OPTIONS]

 

 2) 옵션

1) 질의 옵션 (-q 또는 --query 옵션과 함깨 사용)

 -c : 모든 설정 파일을 나열.

 -l : 패키지 안의 파일을 나열

 -a : 모든 패키지에 질의, 검증

 -f : 파일이 들어있는 패키지에 대해 질의/검증

2) 검증 옵션 ( -V 또는 --verify 옵션과 함깨 사용)

3) 설치/업그레이드/삭제 옵션

 -e : 패키지를 제거 (의존성 관계 있을 시 삭제 불가)

 -F : 기존 설치된 패키지를 업그레이드 합니다.

 -i : 패키지를 설치

 --force : 패키지 충돌 (overwrite) 무시하고 강제 설치.

 --nodeps : 패키지의 의존성을 검사하지않습니다.

 --oldpackage : 이전 버전의 패키지로 다운그레이드.

 -U : 패키지를 업그레이드 합니다.

 -v : 자세한 출력을 제공

 

[참고] RPM 패키지 설치 및 업데이트 주요 포맷.

# rpm -ivh package-filename.rpm

패키지 설치, 이전 버전의 패키지를 삭제하지 않고 새 버전 설치 (-i: install, -v: verbose, -h: hash)

# rpm -Fvh package-filename.rpm

패키지 업데이트, 이전 버전의 패키지가 있을 경우만 패키지를 설치 (-F: Freshen)

# rpm -Uvh package-filename.rpm

패키지 업데이트, 이전 버전이면 업그레이드 하고 없으면 설치 (-U: Upgrade)

# rpm -ivh --nodeps package-filename.rpm

의존성 체크 안함, 의존성 문제를 무시하고 설치 (-nodeps: no dependency)

# rpm -Uvh --force package-filename.rpm

패키지 충돌이 발생해도 강제적으로 설치

 

# rpm -e package-filename

패키지 삭제 (-e: erase)

# rpm -e --nodeps package-filename

패키지 삭제, 의존성 문제를 무시하고 패키지 삭제

 

# rpm -qa 

전체 패키지 목록 확인 ( -q: query, -a: all )

# rpm -qa | grep package-filename

전체 패키지 목록에서 지정된 패키지 설치 유무 확인

# rpm -q package-filename

지정된 패키지 설치 유무 확인 

# rpm -qi package-filename

설치된 패키지의 자세한 정보 확인 ( -i: information )

# rpm -ql package-filename

설치된 패키지의 파일과 디렉토리 목록 확인 ( -l: list )

# rpm -qf /usr/bin/ls

지정된 파일이 포함된 패키지 이름 확인 ( -f: file )  

# rpm -qi -p package-filename.rpm  

설치하고자 하는 패키지의 자세한 정보 확인 ( -p: packages file )

 

 3) 패키지 파일 이름 형식

형식 : name-version-release.architecture.rpm

 ex) kernel-2.6.9-42.0.2.EL.i686.rpm

kernel : 패키지 이름

2.6.9 : 패키지 버전

42.0.2.EL : 패키지 릴리즈 ( 몇번 빌드했는지 알 수 있다. )

i686 : 패키지 아키텍쳐

.rpm : 패키지 확장자 ( redhat 운영체제는 rpm이다.)

 

[실습] RPM 을 활용하여 패키지 설치, 삭제 실습.

[실습] 웹 상에서 RPM 을 활용하여 패키지 설치, 삭제 실습.

 

 

2. yum (Yellowdog Update Manager) 

rmp 의 경우 패키지 의존성으로 설치가 복잡함, 의존성 관계 해결 및 효율적인 패키지 관리를 위해 출시됨.

 

 1) 형식

yum [options] COMMAND

 

2) 주요 활용 포멧

패키지 확인

# yum list (# yum list all)

# yum list "*bash*" (# yum list | grep bash)

# yum list installed

# yum list available

 

패키지 설치 & 업데이트 ( -y 질문에 모드 yse로 답함 )

# yum -y update

# yum -y update php [참고] rpm -Fvh

# yum -y install php [참고] rpm -Uvh

 

# yum -y localinstall php.rpm ( 원격이 아닌 로컬의 경우 활용됨 )

 

패키지 삭제

# yum (erase|remove) php

 

[참고] 추가로 알아두면 좋은 yum 옵션

# yum provides '*/filename' : 패키지의 상위 패키지 찾는 기능.

# yum download [packge] : 현제 폴더에 패키지 다운로드.

# yum history (undo) : yum 이력확인 및 되돌리기(undo)

 

[실습] yum 을 활용하여 패키지의 설치 삭제 실습.

 

 

3. 소스파일로 설치.

최신 버전의 오픈소스 소프트웨어(최신기능) 을 사용하기 위해서 직접 소스파일을 설치하는 경우도 있다. 이때 활용되는 기능이다. 또한 보안장비의 보안 S/W가 Open Source 를 설치하는 경우에는 소스스형태로 컴파일 한다.

 

설치과정  :  소스파일 다운로드 -> 압축해제 -> configure -> make -> makeinstall -> 서비스 시작.

 

 1) ./configure : 파일 내 시스템들을 조사하여 makefile 을 만들어줌.

* 해당 과정이 진행이 무사히 되면 이하과정은 큰 문제가 없음.

 2) make : 소스파일의 압축이 풀려있는 dir 내에서만 수행가능 명령어

소스파일 내 makefile 을 참조하여 여러가지 file들을 다중 컴파일 진행하여 현재 폴더에 만들어준다.

 3) make install : 컴파일 된 파일들을 적합한 위치로 모두 보내서 사용가능하게끔 만듬

 

* make clean : make 과정 내 진행된 다중 컴파일작업을 모두 지워줌. 즉 ./configure 를 다시 수행하며 옵션을 변경할 수 있다.

 

 

4. 소스파일 -> rpm 패키지화 -> yum repository 구성

* 소스파일을 컴파일 하는 과정에서 크레커의 수정된 파일이 설치 될 경우 백도어등. 여러 위험에 노출 될 수 있다. 이를 막는 방법은 2가지 방법이 있다. 이를 무결성 점검이라 한다.

 GPG key : GPG key와 대조하여 인증되지않았다면 설치되지 않음.

 Hash 알고리즘 을 통하여 무결성을 점검하는 방법

 

 1) rpm 패키지 생성 절차

(1) 소스 프로그램 개발

* 3가지 선수작업 후 프로그램 개발.

# yum install rpmdevtools rpmlint

# rpmdev-setuptree

# tree rpmbuild

(2) 소스.tar.gz 파일 생성

 * tar czf rpmbuild/SOURCES/hello-1.0-1.tar.gz hello-1.0 SOURCES에 해당 개발된 파일을 압축 및 아카이빙

(3) SPEC 파일 생성

 * /usr/share/vim/vimfiles/template.spec 를 참조하여 생성.

 * rpmlint ~/rpmbuild/SPECS/hello.spec 파일 오류 점검. 

(4) rpm build

# rpmbuild -bs rpmbuild/SPECS/hello.spec # -b: build, -s: source : 소스파일만 제작 (PKG.src.rpm)

# rpmbuild -bb rpmbuild/SPECS/hello.spec # -b: build, -b: binary : RPM 패키지로 제작 (PKG.rpm)

# rpmbuild -ba rpmbuild/SPECS/hello.spec # -b: build, -a: source + binary : 둘다 제작.

 TEST 진행.

# cd rpmbuild/RPMS/noarch

# rpm -Uvh hello-1.0-1.i386.rpm

# hello.sh (# /root/bin/hello.sh)

----------------------------------------- RPM 패키지 생성완료

(5) GPG Key 생성

# gpg --gen-key : 키 제작

# gpg --list-key : 키 정보 확인

(6) 패키지 sign

# echo "%_gpg_name 535BF7E47D7E7693235B3713AA5D8412C0B2EC59" >> ~/.rpmmacros  : 키값 적용

# rpmsign --addsign ~/rpmbuild/RPMS/noarch/hello-1.0-1.noarch.rpm : 키값 적용

-----------------------------------------

(7) Yum Repository 구성

# mkdir /var/www/html/packages

# cp ~/rpmbuild/RPMS/noarch/hello*.rpm /var/www/html/packages

# cp ~/RPM-GPG-KEY-test /var/www/html/packages

# tree /var/www/html

 repogtory 생성.

# yum -y install createrepo

# createrepo /var/www/html/packages

# tree /var/www/html

(8) 테스트

# vi /etc/yum.repos.d/hello.repo

# yum -y install hello

# hello.sh

 

 

[참고] rpm / yum / source 의 요약

rpm CMD(RedHat Packages Manager)

# rpm -ivh [--nodeps] pkg.rpm

# rpm -Uvh [--nodeps] pkg.rpm

# rpm -Fvh [--nodeps] pkg.rpm

 

# rpm -qa | grep pkg

# rpm -q pkg

 

# rpm -qf /etc/passwd

# rpm -ql pkg

# rpm -qi pkg

# rpm -qi -p pkg.rpm

 

# rpm -e [--nodeps] pkg

 

yum CMD(Yellowdog Update Manager)

# yum install pkg (# yum -y install pkg)

# yum update pkg

# yum -y update

 

# yum list (# yum list installed)

# yum search pkg

 

# yum info pkg

 

# yum remove pkg (# yum erase pkg)

[참고] kernel upgrade

# rpm -ivh kernel.rpm

# yum install kernel.rpm

 

Source Compile(EX: pkg.tar.gz)

# tar xvzf pkg.tar.gz

# cd pkg

# ./configure --prefix=/usr/local/pkg (# ./configure --help)

# make

# make install

 

 

 

 

'모의해킹 침해대응 과정 > Liunx 관리' 카테고리의 다른 글

리눅스 잡 스케줄링 / day 12  (0) 2021.04.14
리눅스 사용자 그룹관리 / day 12  (0) 2021.04.14
리눅스 SWAP / day 10  (0) 2021.04.12
리눅스 RAID / day 9  (0) 2021.04.09
리눅스 LVM / day 8, 9  (0) 2021.04.08