본문 바로가기

Computer Engineering/LINUX

LINUX#2 -

-커널 파라미터 조정으로 시스템 최적화 방법-
리눅스에서 제공하는 /proc 파일 시스템은 마치 Windows의 레지스트리(registry) 처럼 시스템을 재부팅하지 않고도 OS 커널의 상세한 부분을 수정, 변경할 수 있도록 유연한 기능을 제공한다.

윈도우에서 레지스트리를 건드려서 최적화를 시키는 것과 같은 것이라고 보면 된다. 커널을 수동으로 바꿔서 OS를 유용하게 사용할 수 있게 하는 것이다.

[root@localhost proc]# pstree -p
init(1)─┬─acpid(3131)
        ├─atd(3518)
        ├─auditd(2739)─┬─audispd(2741)───{audispd}(2742)
        │              └─{auditd}(2740)
        ├─automount(3229)─┬─{automount}(3230)
        │                 ├─{automount}(3231)
        │                 ├─{automount}(3234)
        │                 └─{automount}(3237)
        ├─avahi-daemon(3598)───avahi-daemon(3599)
        ├─bonobo-activati(23982)───{bonobo-activati}(23984)
        ├─brcm_iscsiuio(2202)─┬─{brcm_iscsiuio}(2204)
        │                     ├─{brcm_iscsiuio}(2205)
        │                     └─{brcm_iscsiuio}(2206)
        ├─bt-applet(24005)
        ├─clock-applet(24085)
        ├─crond(3447)
        ├─cupsd(3268)
        ├─dbus-daemon(23933)
        ├─dbus-daemon(3017)
        ├─dbus-launch(23932)
        ├─dhclient(4851)
        ├─dnsmasq(3677)
        ├─eggcups(23988)
        ├─escd(24002)───{escd}(24011)
        ├─events/0(5)
        ├─gam_server(3746)
        ├─gconfd-2(23941)
        ├─gdm-binary(21342)───gdm-binary(21343)─┬─Xorg(21350)
        │                                       └─gnome-session(23863)─┬─Xsession(23895)
        │                                                              └─ssh-agent(23898)
        ├─gdm-rh-security(21345)───{gdm-rh-security}(21353)
        ├─gnome-keyring-d(23945)
        ├─gnome-panel(23976)
        ├─gnome-power-man(24025)
        ├─gnome-screensav(24094)───slideshow(25474)───{slideshow}(25475)
        ├─gnome-settings-(23947)───{gnome-settings-}(23950)
        ├─gnome-vfs-daemo(23986)
        ├─gnome-volume-ma(23983)
        ├─gpm(3433)
        ├─hald(3150)───hald-runner(3151)─┬─hald-addon-acpi(3158)
        │                                ├─hald-addon-keyb(3164)
        │                                └─hald-addon-stor(3173)
        ├─hcid(3042)
        ├─hidd(3200)
        ├─httpd(3454)─┬─httpd(3540)
        │             ├─httpd(3541)
        │             ├─httpd(3542)
        │             ├─httpd(3543)
        │             ├─httpd(21110)
        │             ├─httpd(21121)
        │             ├─httpd(23749)
        │             ├─httpd(23750)
        │             ├─httpd(23751)
        │             └─httpd(24277)
        ├─iscsid(2208)
        ├─iscsid(2209)
        ├─khelper(6)
        ├─klogd(2776)
        ├─krfcommd(3070)
        ├─ksoftirqd/0(3)
        ├─kthread(7)─┬─aio/0(249)
        │            ├─ata/0(502)
        │            ├─ata_aux(503)
        │            ├─cqueue/0(175)
        │            ├─ib_addr(2167)
        │            ├─ib_cm/0(2183)
        │            ├─ib_inform(2176)
        │            ├─ib_mcast(2175)
        │            ├─iscsi_eh(2116)
        │            ├─iw_cm_wq(2180)
        │            ├─iw_cxgb3(2133)
        │            ├─kacpid(11)
        │            ├─kauditd(545)
        │            ├─kblockd/0(10)
        │            ├─khubd(178)
        │            ├─khungtaskd(245)
        │            ├─kjournald(519)
        │            ├─kjournald(1938)
        │            ├─kjournald(1940)
        │            ├─kjournald(1942)
        │            ├─kjournald(1944)
        │            ├─kjournald(1946)
        │            ├─kmpath_handlerd(1873)
        │            ├─kmpathd/0(1872)
        │            ├─kpsmoused(467)
        │            ├─kseriod(180)
        │            ├─kstriped(510)
        │            ├─kswapd0(248)
        │            ├─local_sa(2177)
        │            ├─mpt/0(498)
        │            ├─mpt_poll_0(497)
        │            ├─pdflush(246)
        │            ├─pdflush(247)
        │            ├─rdma_cm(2186)
        │            ├─rpciod/0(2885)
        │            └─scsi_eh_0(499)
        ├─libvirtd(3535)─┬─{libvirtd}(3739)
        │                ├─{libvirtd}(3740)
        │                ├─{libvirtd}(3741)
        │                ├─{libvirtd}(3742)
        │                └─{libvirtd}(3743)
        ├─login(3683)───bash(20713)
        ├─mapping-daemon(24057)
        ├─metacity(23972)
        ├─migration/0(2)
        ├─mingetty(3684)
        ├─mingetty(3687)
        ├─mingetty(3688)
        ├─mingetty(3697)
        ├─mingetty(3700)
        ├─mixer_applet2(24087)
        ├─mysqld_safe(3300)───mysqld(3409)─┬─{mysqld}(3411)
        │                                  ├─{mysqld}(23729)
        │                                  └─{mysqld}(23809)
        ├─nautilus(23978)
        ├─nm-applet(24017)
        ├─nm-system-setti(24027)
        ├─nmbd(23039)
        ├─notification-ar(24083)
        ├─notification-da(24096)
        ├─pam-panel-icon(24021)───pam_timestamp_c(24022)
        ├─pcscd(3116)─┬─{pcscd}(3136)
        │             ├─{pcscd}(21352)
        │             └─{pcscd}(24003)
        ├─portmap(2854)
        ├─puplet(24015)
        ├─rpc.idmapd(2925)
        ├─rpc.statd(2891)
        ├─scim-bridge(24091)
        ├─scim-helper-man(23951)
        ├─scim-launcher(23938)
        ├─scim-launcher(23954)
        ├─scim-panel-gtk(23952)───{scim-panel-gtk}(23953)
        ├─sdpd(3048)
        ├─smartd(3679)
        ├─smbd(23036)───smbd(23041)
        ├─sshd(21013)───sshd(25375)───bash(25377)───pstree(25482)
        ├─syslogd(2773)
        ├─trashapplet(24045)
        ├─udevd(578)
        ├─watchdog/0(4)
        ├─wnck-applet(24043)
        ├─xfs(3491)
        ├─xinetd(23506)
        └─yum-updatesd(3744)

[root@localhost sys]# ls -Fl
합계 0
dr-xr-xr-x 2 root root 0 10월 22 20:22 crypto/
dr-xr-xr-x 2 root root 0 10월 22 20:22 debug/
dr-xr-xr-x 8 root root 0 10월 22 20:22 dev/
dr-xr-xr-x 7 root root 0 10월 15 14:52 fs/
dr-xr-xr-x 4 root root 0 10월 22 20:22 kernel/
dr-xr-xr-x 8 root root 0 10월 22 20:22 net/
dr-xr-xr-x 2 root root 0 10월 22 20:22 sunrpc/
dr-xr-xr-x 2 root root 0 10월 22 20:22 vm/

1
다양한 환경변수를 확인 할 수 있다.

두 가지 방법을 이용해서 변수를 바꾸어 보자!!
1.
[root@localhost sys]# cat ./net/ipv4/tcp_syncookies
1
[root@localhost sys]# echo 0> ./net/ipv4/tcp_syncookies

[root@localhost sys]# echo 0 > ./net/ipv4/tcp_syncookies
[root@localhost sys]# cat /proc/sys
sys/           sysrq-trigger  sysvipc/
[root@localhost sys]# cat ./net/ipv4/tcp_syncookies
0

2.
[root@localhost sys]# sysctl -n net.ipv4.tcp_syncookies
0
[root@localhost sys]# sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1
[root@localhost sys]# sysctl -n net.ipv4.tcp_syncookies
1

위에서 tcp_syncookies 변수가 1 이므로 ON 즉, 사용한다는 의미이다. OFF의 의미인 0

broadcast 는 왠만해서는 닫아두는 것이 좋다. ex) # wall hi 하면 hi 가 보이는 것이 대표적인 broadcast

- DNS 리다리렉션

이런 설정을 해도 재부팅 후에는 원래의 값으로 다시 초기화된다. ? soft level 커널 튜닝이므로 /etc/rc.d/rc.local 에 설정하여 부팅시마다 자동으로 실행하도록 하여야 한다. 다른 방법으로는 /etc/sysctl.conf

PING 이 되는 것을 막아보자!!
[root@localhost sys]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0
[root@localhost sys]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@localhost sys]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1
[root@localhost sys]# ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.

--- localhost.localdomain ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2350ms

[root@localhost sys]# ping 192.168.10.129
PING 192.168.10.129 (192.168.10.129) 56(84) bytes of data.

--- 192.168.10.129 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2367ms

ping 이 안된다고 해서 네트워크가 다운되었다는 것이 아니다. 프로그램이나 장비쪽에서 단순히 막아둔것이다.

다시 원상태로 갑시다

[root@localhost sys]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@localhost sys]# ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.059 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.050 ms

- Yum 을 이용한 기능-
"yum 업데이트 서버"
update manager => DB안에 받기위한 우선순위가 있다. 1차적으로 국내에서 다음에 yum 업데이트 서버를 확인한다. 그 다음 해외서버를 확인한다.

문제는 서버가 상당히 많이 있다면 ... 회사내에 여러 파일 서버 ... 방송 서버 ... 큐빅 서비스 ... 메일서버가 있다고 보자. 파일서버는 1~30 (30대) 가 있다. 예를 들어 커널을 2.6.xx 를 이용하고 있다. 그런데 xx 버전에 문제가 있어서 업데이트를 하려고 한다. 30 대의 서버에 각각 yum install 커널 을 하면 트래릭 + 과부하 + 데이터 용량이 과다하게 와서 스위치나 라우터가 다운되는 문제가 생길 수 있다. 그래서 회사내에 yum mirror 서버를 나두는 것이다. yum 업데이트 서버? 회사내부에 yum 을 구현해보는 것이다.

트래픽 = 돈 이라고 한다? 트래픽은 자기서버에서 100M 밖에 이용을 못한다. 200 M 파일을 올리려고 하면 서버에 과부하가 즉 트래픽 과부하가 되어서 문제가 생기게 된다.

공식 사이트 : http://yum.baseurl.org/

특정 데몬이 실행될 때는
그 데몬의 pid 값이 파일로 저장이 된다.

그래서 그 데몬의 pid 값과 데몬이 실행되어 메모리에 누적되어 있는 그 pid 값이 일치하지 않으면 Error 를 발생해서 데몬에 정상적으로 이용되지 않는다.
=> yum 뿐만 아니라 Apache 서버때문에 생길 수 있다.

[root@localhost sys]# yum grouplist
Loaded plugins: fastestmirror
Setting up Group Process
Loading mirror speeds from cached hostfile
 * base: ftp.daum.net
 * extras: ftp.daum.net
 * updates: ftp.daum.net
Installed Groups:
   Emacs
   GNOME 데스크탑 환경
   GNOME 소프트웨어 개발
   Java
.
.
.

- “John the Ripper”를 활용한 암호 관리 -
P/W 크래커 => 쉬운 암호를 사용하는 직원들을 검색해서 보안설정을 강화시킬 수 있게 하는 것이다. 네이트온 , 우리나라 PC방이 200% 노출된 곳이다. 집에는 IS 업체에서 해주지만 ... PC 방에서 고정 IP를 사용하는 경우에는 중,고등학생들이 간단한 C 프로그래밍으로 받아올 수 도 있다. 암호가 어려운 것보다도 믿을 수 있는 회사의 서비스를 이용하는 것이 좋다.

존 더 리퍼는 쉬운 암호를 찾아내는 역할을 한다. 어떤 관리자는 스니핑을 걸어두어서 유저들의 암호를 일일이 알아내는 경우도 있지만 이 정도 까지 할 필요는 없다.

다시 LINUX #1 로 돌아가서 생각을 해보자.
- 신입이 첫 출근 -
ID : sinsin
-> 시스템 엔지니어에게 계정을 요청 -> sinsnin 그래서 그 서버에 계정을 만들어주세요. 왜? 신입은 만들수 있는 권한이 없으니까 -> SE 가 아이디와 암호는 뭘로 하실래요? 신입 曰 sinsin // itclass 요 -> SE 서버에서 작업을 합니다. root로 로그인해서 (일반유저는 계정을 만들수 있는 권한이 기본적으로 없어요) -> SE가 작업을 다했어요. 다시 신입한테 전화나 메일로 통보를 해요. sinsin // itclass 해놨어요. 접속하시면 되요. -> 그러면 신입은?? 한가지 암호 작업을 해야한다. -> 신입은 그 서버에 로그인한다. ID : sinsin // pw: itclass 그리고 # passwd 명령어로 자신의 암호를 바꾸는 작업을 해야한다.
$ passwd
현재암호 :
새롭게 바뀔 암호 :
재확인 :
=> 이렇게 한다음에 작업을 하면 된다.

하지만 이 방법이 회사마다 똑같이 사용되지는 않는다.

[root@localhost run]# grep doom3 /etc/shadow
doom3:$1$PPCpavZU$5sNVeyykHJBXizgfEIZN1.:15270:0:99999:7:::
[root@localhost run]# passwd -l doom3
Locking password for user doom3.
passwd: Success
[root@localhost run]# grep doom3 /etc/shadow
doom3:!!$1$PPCpavZU$5sNVeyykHJBXizgfEIZN1.:15270:0:99999:7:::
=> 암호되는 부분에 ** 나 !! 가 오게 되는데 ** 가 오게되는 것은 ssh 기반의 방식으로 로그인 하는 것은 가능하다는 것이다. !! 는 ID/PW 뿐만 아니라 ssh 키기반도 불가능한 것이다. => 접속을 못하는 것이다. 암호나 중요한 작업을 할 때에는 상급자나 팀원들에게 물어보고 하는 것이 좋다

- 쉘로깅 관리 방안-

유저의 쉘은 /etc/passwd 파일에서 정의하고 있는데, 다음과 같이 해당 유저의 쉘 /bin/bash인 것을 알 수 있다.
doom:x:500:500:leesangchul:/home/doom:/bin/bash

Shell 이 없어도 시스템에는 접속할 수 있다. 사용자 명마다 맨끝에 shell 이 있는 것은 아니다. 예를 들어 shell 대신에 특정 명령어를 정리해 둘 수 있다. 명령오도 적을 수 있다는 것이다. 맨끝에 shell 을 정리한다는 것

[root@localhost run]# useradd jack4
[root@localhost run]# passwd jack4
Changing password for user jack4.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost run]# grep jack4 /etc/passwd
jack4:x:506:506::/home/jack4:/bin/bash

[jack4@localhost ~]$
=> jack4 로 접속이 되는 것을 확인 할 수 있다.ㅋ`

[root@localhost run]# usermod -s /sbin/nologin jack4
[root@localhost run]# grep jack4 /etc/passwd
jack4:x:506:506::/home/jack4:/sbin/nologin
=> 이렇게 바꾼 다음에 접속을 하려고 하면 putty 창이 그냥 닫혀버리는 것을 확인 할 수 있다.

그렇다면 nologin 은 언제 사용할까?
외부에서 접속하는 것이 아니라 내 리눅스 시스템안에서 사용할 때 사용이 된다. 내 DB 에 들어가려고 하면
# mysql - u root -p
=> 시스템 안에서 접속하는 것이다.
하지만 NY 에서 접속하려고 하면 문제가 생긴다. 내부용도로만 사용하기 위해서 외부를 차단하는 용도로 사용한다. 같은 예로 /bin/false 도 있는데 ...

[root@localhost run]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/bin/zsh
=> 사용할 수 있는 shell 을 확인할 수 있다. Linux 에 사용할 수 있는 파일을 정의해 놓은 것이다. 그런데 FTP 같은 경우에는 익명(anomymous) 를 사용하는 경우가 많다.

- 명령어에 기록을 남기는 방법 -
[root@localhost run]# history
=> bash shell 에서 확인을 할 수 있는 것이다.
어디에 있는 것인가?
[root@localhost run]# cd ~
[root@localhost ~]# ls -al .bash_history
-rw------- 1 root root 15425 10월 22 20:07 .bash_history
=> 자신의 홈 dir 안에
.bash_history 에 기록이 되는 것이다. 이 파일을 지워버리면 명령어 기록이 삭제 되는 것이다.

[root@localhost ~]# history -c
[root@localhost ~]# history
    1  history
=> 콘솔상에서 클리어 된 것을 확인할 수 있다.

어디에 그 설정이 되어 있을까?
[root@localhost ~]# vi /etc/profile
45번째 줄에  HISTSIZE=1000
=> 1000 줄 까지 기록을 하는 것이다. 만약 1000 -> 0 으로 바꾸어 준다면 치는 명령어 들이 기록이 안되는 것이다.

해커들이 흔적을 지우기 위해 hitory -> null 로 링크를 거는 것을 막는 방법


이를 위해 해당 파일을 /tmp에 생성하자.
왜냐하면 sticky 비트가 설정된 /tmp 에서는 다른 유저가 생성한 파일은 삭제권한이 있어도 본인 이외에는 삭제할 수 없기 때문이다.

[root@localhost ~]# touch /tmp/history
[root@localhost ~]# chmod 602 /tmp/history
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ll
합계 32
drwx------ 3 root   root   4096 10월 22 17:30 gconfd-root
-rw-----w- 1 root   root      0 10월 23 12:55 history
drwx------ 2 root   root   4096 10월 22 17:30 keyring-CUi5xi
srwxr-xr-x 1 root   root      0 10월 22 17:30 mapping-root
drwx------ 2 root   root   4096 10월 22 17:34 orbit-root
-rw-r--r-- 1 root   root      6 10월 23 12:11 scim-bridge-0.3.0.lockfile-0@localhost:0.0
srwxr-xr-x 1 root   root      0 10월 22 17:30 scim-bridge-0.3.0.socket-0@localhost:0.0
srw------- 1 root   root      0 10월 22 17:30 scim-helper-manager-socket-root
srw------- 1 root   root      0 10월 22 17:30 scim-panel-socket:0-root
srw------- 1 root   root      0 10월 22 17:30 scim-socket-frontend-root
-rw------- 1 nobody nobody 2524 10월 22 17:34 sess_508895313f9d9a948f8e2f72dcb8ccf5
-rw------- 1 nobody nobody 2538 10월 22 17:27 sess_5812f73552b4653bbb00c356fb88c0c3
drwx------ 2 root   root   4096 10월 22 17:30 ssh-CfxKg23863
drwx------ 2 root   root   4096 10월 22 17:30 virtual-root.RyVP5S

무슨일이든지 간에 왜 하는지 이유를 알고 해야 된다. 이것을 왜합니까? 하고 물어봐야 한다. 필요한 것인지...

602로 하는 이유는 일반 user 도 기록을 해야 되기 때문에 602 로 한 것이다. 일반 user 들의 명령어를 기록하기 위해서

[root@localhost tmp]# cp /etc/profile /

[root@localhost tmp]# echo $$
25377
=> 현재 shell 에서의 pid

공격자들은 로그인 후 입력된 정보를 남기지 않기 위해 어떻게 할까?

(01) shell 자체를 강제로 비정상 종료함으로써 파일에 저장하지 않는 방법이다. 여기에서 $$는 자신의 쉘pid를 뜻하는데, echo $$를 실행해보면 확인할 수 있다.

(02) history –c 하게 되면 자신이 사용했던 명령어들은 삭제가 된다.

(03) 가장 많이 사용하는 방법으로 .bash_history를 /dev/null로 링크하거나 예 디렉토리를 생성하여, 파일이 생성되지 않도록 하는 방법이 잇다.
# ln –s /dev/null .bash_history
# mkdir .bash_history
또는 앞에서 살펴본 바와 같이 HISTFILE 변수를 변경하는 방법이 있다.
# echo #HISTFILE
/root/.bash_history
# unset HISTFILE 또는 HISTFILE=/dev/null

- 커널 업데이트 및 패치 그리고 원복 -
커널 업데이트는 1년에 한 번 2년에 한 번 ... 옛날 버전같은 경우에는 공격패턴이 누출된다. 10년 동안 2 번 한 적도 있다. 하나의 OS 를 오랫동안 쓰는 경우는 없다. LINUX 같은 경우에도 새로운 것을 5년 주기로 바꾼다.

http://cve.mitre.org => 커널의 취약점을 볼 수 있는 곳

커널버전 홀수 번호를 조심해라. 짝수 번호를 사용하자.

커널 = 사람의 뼈대라고 할 수 있다.

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 athlon i386 GNU/Linux
=> 자신의 커널 버전을 확인할 수 있다.

- 커널 설치 두가지 방법 -
1. 소스 설치
 작업해야 될 것들이 많다. 설정방법이 까다롭다. 권장하지는 않는다.
 장점 : 커널 버전을 지정해서 설치 가능.
2. yum 설치
 자동 설치! 설치가 편하다.
 단점 : 커널 버전을 지정해서 설치를 못한다.

[root@localhost ~]# uname -r
2.6.18-194.el5
=> 현재 커널의 버전을 확인

[root@localhost ~]# yum install kernel
커널이미지는 /boot 안에 있다. 커널을 설치했을 때에는 재부팅을 해주어야 한다. 리눅스가 재부팅하는 경우는 드문데 그 경우중 하나이다.

Installed:
  kernel.i686 0:2.6.18-274.7.1.el5

서버를 운영하다보면 새로운 커널을 업데이트를 해주어야 한다. 기존의 버전을 삭제하지 않는다. 그 이유는? 커널이라는 것이 리눅스의 핵심인데 적용이 안되는 경우가 있다. 이전 버전으로 사용을 해야 한다. 그렇기 때문에 원상복귀를 시키기 위해서 전 버전을 삭제하지 않는다.

커널이 관련된 파일은 /boot/grub/grub.conf 파일이다.

- Grub 에 암호 걸기 -
[root@localhost grub]# vi grub.conf
13번째 줄에서
#hiddenmenu
=> 히든메뉴에 주석을 걸어서 히든을 해제시킨다.

같은 연결을 하나 더
# grub
grub> md5crypt
Password: 1111
Encrypted: $1$bmEDL0$gSABspXAYWMid4EOBP558.

다시 grub.conf 로 와서
제일하단에
password --md5 $1$bmEDL0$gSABspXAYWMid4EOBP558.
이렇게 넣어준다. 저장하고 나간다.

VMWare 를 재부팅 시키면 부팅 시작할 때부터 암호를 물어보게 된다.
Password :
이렇게 나온다.
여기에 아까 적어놓은 P/W 인 1111을 입력해 주어야 부팅이 시작된다.

- 내 시스템에 접속한 유저를 강제로 내쫓는 Skill(Signal kill) -
[root@localhost ~]# who
root     pts/0        2011-10-23 15:37 (192.168.10.1)
root     pts/1        2011-10-23 15:49 (192.168.10.1)
doom     pts/2        2011-10-23 15:54 (192.168.10.1)         //  내 맘에 안드는 Doom 을 쫓아내려고 한다.
[root@localhost ~]# skill -KILL pts/2

- NAS(Network Attached Storage) -
해외의 경우에는 스토리지 시장이 엄청크다. 시장규모도 늘어가고 있는 추세이다. 정보들을 다른 쪽에서 복사를 해놓은 것이다. 911 이후에 사용하는 사람들이 더 늘었다.

cf)
DAS (Direct) : 물리적으로 직접 연결이 되어있는 상태
NAS (Network) : 일반적으로 기업( 큰 금융기업 X )에서 사용. 비용이 적은 편.
SAN (Area Network) : 금융업계에서 사용하는 형식 ex) 금융업계에서 HP 것을 사용하는

장비들이 고가이다 보니까 NAS 방식밖에 구현을 못하는 실정이다.

                                      웹서버
                       \   
|     /
                            NAS    -  파일서버
                        
/   |  
                                     메일 서버 (20대)
NAS는 어떻게 되어있나?

[하드]
[하드][하드][하드]|    A B C D
[하드][하드][하드][하드]|    E F G H
[하드][하드][하드][하드]|     I J K L

=> 이렇게 짝수개로 들어간다 => 12개를 네트워크 연결시킨다. => 장비자체에 RAID 를 구현한다. 보호를 하기 위해 사람이 만든 것이기 때문에 차버리면 깨져버릴 수도 있기 때문이다.

(A,B)(C,D)
(E,F)(G,H)
(I, J) (K,L)
=> 2개를 하나로 묶는다고 하면 꽉찬상태에서 묶어버린다면?
그렇게 되는 것은 안된다. RAID 에 대해서는 4주차에 좀더 자세하게 다룰 것이다.
만약에 A 100G B 100G =>
몇 개만 짚고 넘어가자.
RAID 자체는 데이터 자체를 안전하게 보전하는 것이 주목적이다.
RAID 0  =>
A 100G B 100G  => 200G
장점? 속도가 가장빠르다
문제는 데이터 하나가 날라가 버리면 B 도 날라가 버린다.
RAID 1 => A 100G B 100G => 100G 가 밖에 안되는 것이다. Mirror형
단점? 데이터를 두번쓰기 때문에 속도가 느리다. 하드 디스크 용량 낭비가 심하다 50%
장점?  A 하드가 나가도 B 에는 남아있다.

 - NFS 설치 -
이제 CentOS에 NFS 서버를 설치하고 운영해 보자. 먼저 rpm 명령어로 NFS 패키지들이 설치되어 있는지 확인해보자.

[root@localhost ~]# vi /etc/exports
여기 안에
/mnt/nfs 172.16.10.0/255.2555.0.0(rw,sync)
=> NAS 서버를 연결할 때에
/mnt/nfs 여기 디렉토리에 연결이 되는 것이다.
저장하고 나가자.
172.16.10.0/255.2555.0.0(rw,sync) => 접근할 호스트와 옵션이다.
rw : 읽기 쓰기 가능
ro : 읽기만 가능
no_root_squash : 클라이언트의 root 와 root 를 동일하게 하는 것이다.
데이터를 기록시에 A 서버에 기록을 하면 B 서버에 root 로 기록이 되는 것이다.

[root@localhost ~]# /etc/init.d/portmap start
portmap (을)를 시작 중:                                    [  OK  ]
[root@localhost ~]# /etc/init.d/nfs start
NFS 서비스를 시작 중:                                     [  OK  ]
NFS 쿼터를 시작 중:                                        [  OK  ]
NFS 데몬을 시작 중:                                        [  OK  ]
NFS mountd를 시작 중:                                    [  OK  ]

exportfs (export 를 관리하는 옶션)
( 알아두어야 할 옵션!! : -r : /etc/exports 파일을 다시 읽어 들인다. )

[root@localhost ~]# ps -ef | grep nfs
root       410     7  0 16:50 ?        00:00:00 [nfsd4]
root       412     1  0 16:50 ?        00:00:00 [nfsd]
root       413     1  0 16:50 ?        00:00:00 [nfsd]
root       414     1  0 16:50 ?        00:00:00 [nfsd]
root       415     1  0 16:50 ?        00:00:00 [nfsd]
root       416     1  0 16:50 ?        00:00:00 [nfsd]
root       417     1  0 16:50 ?        00:00:00 [nfsd]
root       418     1  0 16:50 ?        00:00:00 [nfsd]
root       419     1  0 16:50 ?        00:00:00 [nfsd]
root       492  3844  0 17:06 pts/2    00:00:00 grep nfs
[root@localhost ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda8 on /data1 type ext3 (rw)
/dev/sda7 on /data2 type ext3 (rw)
/dev/sda6 on /data3 type ext3 (rw)
/dev/sda5 on /home type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

[root@localhost ~]# mkdir /nfs_client
[root@localhost ~]# mount -t nfs 172.16.10.250:/mnt/nfs /nfs_client/
=>
네트워크로 연결을 하는 것이다.
다시 마운트하면
[root@localhost ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda8 on /data1 type ext3 (rw)
/dev/sda7 on /data2 type ext3 (rw)
/dev/sda6 on /data3 type ext3 (rw)
/dev/sda5 on /home type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
172.16.10.250:/mnt/nfs on /nfs_client type nfs (rw,addr=172.16.10.250)
=> 추가된 것을 확인할 수 있다.

[root@localhost nfs_client]# cd /nfs_client/
[root@localhost nfs_client]# pwd
/nfs_client
[root@localhost nfs_client]# touch jack2
=> 파일이 기록이 안된다. .250 서버에 mount 되어 있기 때문이다.

[정리] NAS 구축
# vi /etc/exports
/mnt/nfs          172/16.10.0/255.255.0.0(rw,sync)

관리 명령어 : exports

# mkdir /nfs_client
# mount






















'Computer Engineering > LINUX' 카테고리의 다른 글

LINUX#2 - Apache  (0) 2011.10.30
LINUX#2  (0) 2011.10.29
LINUX#2 - SAMBA  (0) 2011.10.22
LINUX#2  (0) 2011.10.16
LINUX#2 - 다시 한 번 시작해 봅시다 ^^  (0) 2011.10.15