본문 바로가기

Linux/기타

rpm

주제 : rpm


o rpm 이란 ? 

rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.

RedHat 계열의 배포판을 사용하는 리눅스에서 사용한다. ex) CentOS, Fedora ...., RedHat


** 파일명의 형식

패키지명-버전-배포판-아키텍처-rpm


** rpm 파일을 설치하는 형식 : 

mc-4.6.1a-35.el5.i386.rpm


fc19 : 페도라 V 19

el5  : Enterprise Linux V 5


noarch  : 모든 아키텍처에 설치가 가능한 패키지들(font ...)  //CPU와 상관없이 모든 아키텍쳐에서 사용 가능

s390, s390x  <-- IBM S390 메인프레임에서 실행

src      : 컴파일이 안된 소스형태로 배포

arm..

sparc   <--- 자기 아키텍처만 설치/실행    //sparc CPU

ppc       :  Power PC

x86_64   // Intel CPU 에서 컴파일된 파일 64bit

i386 -> i486 -> i586 -> i686    // Intel CPU 에서 컴파일된 파일 32bit

   <-----------------------  X

 O ------------------------>

i386으로 컴파일 된 것은 그 위에 버전에서 실행이 가능하지만 반대로는 불가능.




o 아키텍처 종류를 확인해보자.

http://rpmfind.net



o rpm 옵션 

-i 설치

-U 업그레이드 / 설치    //  설치가 되어있는 것은 업데이트, 안되어 있다면 설치

-v 설치할때 파일명을 출력

-h # 으로 설치진행을 출력

-e 삭제

--force 강제설치

--nodeps  의존성을 무시하고 설치 

- --nodeps 를 이용해서 설치하면 프로그램이 정상동작을 하지 않을 수 있다.



-Uvh  설치할 때 사용하는 옵션 


-e    삭제할 때 사용하는 옵션


rpm -e 패키지명

rpm -e 패키지명-버전 

=====================================================================


=====================================================================

LAB1> CentOS5.8 DVD의 rpm 을 확인해보자.

-- 순서 --

1. DVD 넣는다.

2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.

3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.

-- 순서 --


1. DVD 넣는다.

- VB 에서 DVD를 삽입한다.

저장소 -> CentOS 5.8 1번 DVD를 선택한다.


2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.

- -t iso9660 : cdrom filesystem

- -o ro (read only)

# mount -t iso9660 -o ro /dev/cdrom /mnt

# df

  :

  :

/dev/hdc               3831642   3831642         0 100% /mnt


3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.

# cd /mnt/CentOS

# ls 

  :

x3270-text-3.3.4p7-3.el5.4.i386.rpm

x3270-x11-3.3.4p7-3.el5.4.i386.rpm

  :

yum-utils-1.1.16-21.el5.centos.noarch.rpm

  :

zisofs-tools-1.0.6-3.2.2.i386.rpm

  :


# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm      

# rpm -Uvh --nodeps firefox-3.6.26-1.el5.centos.i386.rpm 

# rpm -Uvh mc-4.6.1a-35.el5.i386.rpm 

# firefox  <-- X

# mc       <-- O      //   리눅스용 파일탐색기

=====================================================================

===================================================================

LAB2> --force 옵션을 이용해서 패키지를 다시 설치해보자.

- --force 옵션을 이용해서 다시 설치한다.

- --force 옵션은 앞이나 뒤나 위치는 상관없다.

-- force 옵션을 이용해서 패키지를 다시 설치하는 경우는

1. 파일이 삭제된 경우

2. 파일이 변조된 경우 (Zero day 공격 -> 패치가 되기 전에 공격이 이루어지는 것)

** 프로세스 정보를 보는 명령어 (ps aux, ps -ef)


shell shock, bash 취약점

libc 표준라이브러리 취약점 발견  -> 표준이 취약하다는건 모든 프로그램이 취약하다는것 -> 패치해야함

openssl heardbeat 취약점


# rm -fv /bin/ls

# ls

-bash: /bin/ls: No such file or directory


# mount -t iso9660 -o ro /dev/cdrom /mnt

# rpm -Uvh /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm           <-- 설치 X

# rpm -Uvh --force /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm   <-- 설치 O

# ls

  :

  :

===================================================================


===================================================================

LAB3> rpm 으로 설치하면 설치된 내용이 저장되는 디렉토리에 대한 실습 ******굉장히 중요한 내용

**!!! /var/lib/rpm 디렉토리를 참고 !!!

-q 옵션  :  rpm DB에서 정보를 찾는데 쓰이는 옵션.


아래의 내용들을 하나로 묶어 놓은 것이 패키지

- 실행파일 (/bin,/usr/bin,/sbin,/usr/sbin,/usr/X11R6/bin)

- 설정파일 (/etc)

- 문서파일 (/usr/share/doc)

- 도움말파일 (/usr/share/man)



# cat /etc/redhat-release 

CentOS release 5.8 (Final)

# rpm -q kernel

kernel-2.6.18-308.el5


# yum update kernel 

kernel-2.6.18-402.el5

kernel-2.6.18-308.el5     // 커널을 업데이트 하게되면 다른버전으로 덮어쓰는것이 아니라 새롭게 다운로드, 커널을  제외한 다른 것은 덮어쓰기가 된다.


1. 어떤 패키지가 이 시스템에 설치되었는지 ?

- 모든 패키지를 확인한다.

# rpm -qa   //  시스템에 설치된 모든 패키지 확인

# rpm -qa  > rpmlist.txt    //  모든 패키지를 확인하여 텍스트파일로 저장

# rpm -qa  | tee rpmlist2.txt    //  tee : 파일로도 저장하고 화면으로도 출력하라는 명령어.

#diff rpmlist.txt rpmlist2.txt    //  출력결과가 없다면 동일한 파일이다.

#cmp rpmlist.txt rpmlist2.txt   //  출력결과가 없다면 동일한 파일이다.

  :


2. 어떤 패키지가 어떤 파일들을 설치했는지 ?   **** 중요하다 *****

- 패키지에 속한 전체 파일들을 출력한다.

사용법 : # rpm -ql 패키지명 ( 옵션 l : list 약자 ) 

# rpm -ql coreutils

  :

- 패키지에 속한 문서파일(document) 들을 출력한다.

사용법 : rpm -qd 문서파일

# rpm -qd coreutils

  :


- 패키지에 속한 실행파일(binary)들을 출력한다

alias grep ='grep --color'

rpm -ql coreutils | grep bin



- 패키지에 속한 설정파일(configuration) 들을 출력한다.

사용법 : rpm -qc 설정파일 ( 옵션 c : configuration )

# rpm -qc coreutils

  :

3. 어떤 파일이 어떤 패키지에서 나왔는지 ?

- 파일에서 패키지명을 추출

사용법 : rpm -qf 파일명

# rpm -qf /bin/ls

  :

which 명령어로 경로를 확인하고 아래 명령어들의 패키지명을 출력  >> 패키지명을 잘 알아둬야 한다.

----->> 한번에 하는 방법 : rpm -qf `which 명령어`

` : 1번키 옆 물결(백틱)

passwd : passwd-0.73-2

useradd : shadow-utils-4.0.17-20.el5

ps : procps-3.2.7-18.el5

df : coreutils-5.97-34.el5


[root@localhost test]# rpm -qf `which vi`

error: file /root/programming/test/alias: No such file or directory

error: file /root/programming/test/vi='vim': No such file or directory

* alias vi=vim이 되어 있어서 에러, unmalias = vi 후에 확인함.

vi : vim-minimal-7.0.109-7.el5


vim : vim-enhanced-7.0.109-7.el5

su : coreutils-5.97-34.el5

top : procps-3.2.7-18.el5

lsof : lsof-4.78-6

===================================================================

===================================================================

LAB> rpm 패키지를 검증하기 실습 


패키지를 검증할때는 -qV 옵션을 사용한다.


# rpm -qVa 


S file Size differs

M Mode differs (includes permissions and file type)

5 MD5 sum differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs


# rpm -qV coreutils

.M......    /bin/ls

# echo "=========" >> /bin/ls

# rpm -qV coreutils

SM5....T    /bin/ls

# cat /bin/rm >> /bin/ls

# stat /bin/ls

  File: `/bin/ls'

  Size: 136726     Blocks: 280        IO Block: 4096   일반 파일

Device: fd00h/64768d Inode: 1278041     Links: 1

Access: (0111/---x--x--x)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2015-03-23 19:32:04.000000000 +0900

Modify: 2015-03-23 19:34:24.000000000 +0900

Change: 2015-03-23 19:34:24.000000000 +0900


# rpm -qV coreutils

SM5....T    /bin/ls



===================================================================






rpm - 패키지 파일을 설치 (인터넷 필요 x , 파일이 존재  O)

yum - 인터넷을 통해서 패키지를 설치 (파일이 존재 X , 인터넷 연결 O)



~~.i386.rpm <-- 바이너리 386 ~ 686 모두 설치가능 

~~.i586.rpm <-- 386 x 486 x 586 ~ 686 ... 786 ... 



LAB> http://ftp.daum.net/ 에서 ntsysv 패키지를 가져와서 시스템에 설치하기


http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm



# cat /etc/redhat-release   

CentOS release 5.8 (Final)

# wget

-bash: wget: command not found

# yum install wget

...

Is this ok [y/N]: y   <-- y를 입력(설치) n(취소)

# chmod -c 700  `which wget`   <-- 보안상 wget은  root 사용자만 사용!!!

# wget http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm

# rpm -Uvh ntysv<tab 키>  <-- ntsysv 설치 

# LANG=C

# ntsysv  

network, sshd, syslog <-- 이거빼고 모두 제거 



x86_64





# rpm -qf /usr/sbin/useradd

# rpm -ql coreutils <-- 

# rpm -ql coreutils > coureutils.txt

# cat -n coureutils.txt



!!! 전체 설치된 패키지를 알아야 하고, 패키지에서 각각의 설치된 정보를 뽑아낼 수 있어야 한다. !!!


LAB> coreutils 패키지에서 나온 여러가지 정보를 확인해보기


o 패키지 설치시 설치되는 파일들

 도움말, 문서파일, 실행파일, 설정파일 


# rpm -q coreutils  <-- 패키지명을 완벽하게 알때 사용 

# rpm -qa | grep core  <-- 패키지명을 모를때 ( core 만 알때 )

# rpm -qi coreutils <-- coreutils 패키지의 정보를 출력 

# rpm -qc coreutils <-- coreutils 패키지의 설정파일들을 출력

# rpm -qd coreutils <-- coreutils 패키지의 문서(도움말)파일들을 출력

# rpm -ql coreutils | grep bin  <-- coreutils 실행파일을 출력

# rpm -ql coreutils <-- 전체 설치된 파일들을 출력 



!! : 바로 이전에 실행했던 명령어를 다시 실행하는 명령



- 파일의 크기/내용 수정을 변경하고 검증해보자.

[root@localhost test]# cp /bin/ls

cp: missing destination file operand after `/bin/ls'

Try `cp --help' for more information.

[root@localhost test]# cp /bin/ls .

[root@localhost test]# echo "=========" >> /bin/ls

[root@localhost test]# rpm -qV coreutils

SM5....T    /bin/ls


#cat /bin/rm >> /bin/ls

#stat /bin/ls   : 파일의 여러가지 정보들을 출력해주는 명령어

[root@localhost test]# stat /bin/ls

  File: `/bin/ls'

  Size: 93570      Blocks: 192        IO Block: 4096   regular file

Device: fd00h/64768d Inode: 1671248     Links: 1

Access: (0711/-rwx--x--x)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2015-04-20 09:24:49.000000000 +0900

Modify: 2015-04-20 09:24:40.000000000 +0900   ---> 내용이 수정된 시간

Change: 2015-04-20 09:24:40.000000000 +0900  ---> i-node나 권한 등이 변경된 시간



[09:28:42@localhost ~/programming/test]#rpm -qa | grep core   ==> 패키지 명을 정확하게 모를 때

coreutils-5.97-34.el5

svrcore-4.0.4-3.el5

policycoreutils-1.33.12-14.8.el5

[09:29:02@localhost ~/programming/test]#rpm -q coreutils        ==> 패키지 명을 정확하게 알 때

coreutils-5.97-34.el5



# echo test2 >> /bin/ls
md5sum /bin/ls
8a49ead65efb6dc3d50ae48025913b76  /bin/ls   --> 파일에 대한 해시값, 이 값과 다르다면 변조된 파일이다.

# md5sum /bin/ls
8a49ead65efb6dc3d50ae48025913b76  /bin/ls

# md5sum /bin/ls
8a49ead65efb6dc3d50ae48025913b76  /bin/ls

# echo test3 >> /bin/ls
# md5sum /bin/ls
a291df3929e4f07d86975311fa5e9295  /bin/ls

# yum -y reinstall coreutils >/dev/null 2>&1
# md5sum /bin/ls
a55a0733413620f0b3aa401541a00d83  /bin/ls

- 재설치를 했으므로 어떤 메세지도 출력이 안된다.
# rpm -qV coreutils

===================================================================



**과제 - gdb에 관해서

1. 메모리조사 명령 x 명령 알아오기

2. 스택에 대해서 조사하기

3. 메모리구조에 대해서 알아오기

4월 24일 발표

***********************


**알아볼 것

shell shock, bash 취약점

libc 표준라이브러리 취약점 발견  -> 표준이 취약하다는건 모든 프로그램이 취약하다는것 -> 패치해야함

openssl heartbleed 취약점 > 리눅스에서 가장 취약한 부분

- /bin 디렉토리의 명령어를 모두 확앤해서 패키지명을 숙지할 것~~~

**************************





리눅스 배포판 100으로 검색 해볼것.



Debian 계열의 리눅스 에서 사용(Debian, Ubuntu)
~.deb : dpkg 명령어로 설치
apt-get :   deb 파일을 설치


'Linux > 기타' 카테고리의 다른 글

퍼미션  (0) 2015.04.21
yum  (0) 2015.04.20
소프트웨어 설치  (0) 2015.04.16
vi편집기 사용하기  (0) 2015.04.15
기본 명령어  (0) 2015.04.15