주제 : 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
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
#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
**과제 - gdb에 관해서
1. 메모리조사 명령 x 명령 알아오기
2. 스택에 대해서 조사하기
3. 메모리구조에 대해서 알아오기
4월 24일 발표
***********************
**알아볼 것
shell shock, bash 취약점
libc 표준라이브러리 취약점 발견 -> 표준이 취약하다는건 모든 프로그램이 취약하다는것 -> 패치해야함
openssl heartbleed 취약점 > 리눅스에서 가장 취약한 부분
- /bin 디렉토리의 명령어를 모두 확앤해서 패키지명을 숙지할 것~~~
**************************