2011년 11월 21일 월요일

LINUX NIC Bounding

현재 거의 모든 서버들은 랜카드가 1G를 지원한다

하지만 백업서버나 대역폭을 요구하는 서버의 경우 1G 이상이 필요한데

그렇다고 10G 랜카드를 살수 없는것이고. 이럴때 사용하는 기능이 bonding  기술이다

리눅스에서 간단하게 구성할수 있다

환경 : CENTOS


1. bond1 인터페이스 추가

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0  

DEVICE=bond0
IPADDR=10.10.10.66
NETMASK=255.255.255.0
BROADCAST=10.10.10.255
GATEWAY=10.10.10.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=4 miimon=100"


저장

위에 옵션에서 mode 부분은 bond의 모드 부분이다

    [Bonding 모드 종류]
     0 : balance-round robine ( 2개의 NIC 통한 분배 +  Fault Tolerance )
        1 : active-standby ( Active상태의 NIC에 문제 발생시 Fault Tolerance )
     2 : balance-xor ( 0 비슷하지만 xor연산을 이용한 목적지 Mac 근원지 Mac 이용한
                 분배 +    Fault tolerance)
    3 : broadcast ( 2개의 NIC 어떤 규칙 없이 데이터 통신 +  Fault Tolerace)
       4 : 802.3ad (link aggregation) – switch aggregation 그룹생성이 필요



2. 실제 인터페이스 랜카드 eth0 / eth1 내용 수정

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes


[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes


네트워크 환경 설정 파일 내용 추가

[root@localhost ~]# vi /etc/sysconfig/network
추가
GATEDEV=bond0

3. 모듈 구성

[root@localhost ~]# vi /etc/modprobe.conf

추가
alias bond0 bonding
options bond0 miimon=100

[root@localhost ~]# modprobe bonding

[root@localhost ~]# lsmod | grep bonding
bonding               126649  0
ipv6                  432161  26 bonding,ip6t_REJECT


4. 네트워크 재시작 ( 여기서 네트워크를 재시작시 네트워크가 끊기는 현상이  있으니 로컬에서 작업하는것을 추천)

[root@localhost ~]# service network restart

5. 인터페이스 확인

bond0     Link encap:Ethernet  HWaddr 00:16:17:A2:F8:EB 
          inet addr:10.10.10.1  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::216:17ff:fea2:f8eb/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:172575 errors:0 dropped:0 overruns:0 frame:0
          TX packets:239301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16180948 (15.4 MiB)  TX bytes:28025443 (26.7 MiB)
eth0      Link encap:Ethernet  HWaddr 00:16:17:A2:F8:EB 
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:164853 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57261 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15280216 (14.5 MiB)  TX bytes:7327202 (6.9 MiB)
          Interrupt:169 Memory:dd100000-dd110000
eth1      Link encap:Ethernet  HWaddr 00:16:17:A2:F8:EB 
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:7722 errors:0 dropped:0 overruns:0 frame:0
          TX packets:182040 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:900732 (879.6 KiB)  TX bytes:20698241 (19.7 MiB)
          Interrupt:193 Memory:dd310000-dd320000
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:223 errors:0 dropped:0 overruns:0 frame:0
          TX packets:223 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:55612 (54.3 KiB)  TX bytes:55612 (54.3 KiB)


실제 인터페이스는 2개이며 가상의 bond0 이라는 인터페이스 생성되었다
bond0의 인터페이스는 master이며 실제 물리적 인터페이스는  slave로 표시가 된다

그러면 이제 bonding 이 잘되었는지 확인해 본다



[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Active Aggregator Info:
        Aggregator ID: 3
        Number of ports: 2
        Actor Key: 17
        Partner Key: 1
        Partner Mac Address: 28:c0:da:37:69:00
Slave Interface: eth0
MII Status: up
Link Failure Count: 3
Permanent HW addr: 00:16:17:a2:f8:eb
Aggregator ID: 3
Slave Interface: eth1
MII Status: up
Link Failure Count: 4
Permanent HW addr: 00:16:17:a2:f8:ea
Aggregator ID: 3



위에서 bond모드를 4로 지정을 해서 802.3ad가 나온다 ( 상단에서 LACP기능을 구현)
만약 모드를  1로 지정할 경우 Round robin으로 나올것이다


리눅스 자체 서버에서  2G로 통신이 되는지는 확인할수 가 없어 상단 LACP를 구현한
SW에서 확인

root# run show interfaces ae0        
Physical interface: ae0, Enabled, Physical link is Up
  Interface index: 154, SNMP ifIndex: 162
  Link-level type: Ethernet, MTU: 1514, Speed: 2000mbps, BPDU Error: None, MAC-REWRITE Error: None, Loopback:

LINUX점검사항2

1 . 리눅스 버전 확인.


  - #more /etc/issue     ( cat /etc/issue)

  - #more /proc/version  (cat /proc/version)



2. 시스템 하드웨어 정보 확인. ( /proc)



  - #more /proc/cpuinfo     ( cpu 정보 확인 )

  - #more /proc/meminfo    (memory 정보 확인)

  - #more /proc/pci         (하드웨어 정보 확인)



3. 시스템 로그 확인.



  - #more /var/log/messages   (#tail -f /var/log/messages)

    시스템 로그 확인



- #more /var/log/secure      (#tail -f /var/log/secure)

      Console 접속 로그 ( 접속 실패 접속 성공 IP 확인 )

 ) 접속 성공 로그

Sep  5 test sshd[24780]: Could not reverse map address 211.187.90.4.

Sep  5 15:27:24 test sshd[24780]: Accepted password for root from 211.187.90.4 port 1457 ssh2



  - #more /var/log/boot.log

    리눅스 시스템 설정 셋팅 활성화 확인



  - #more dmesg

    리눅스 부팅 메시지 디바이스 확인.



  - #lastlog

    /etc/passwd 등록된 유저 최근 접속한 아이디 확인

  - #last | more

    마지막 접속한 유저 확인





4.네트워크 확인



  - #ifconfig   (현재 설정된 랜카드 확인)



  - #netstat –an | more  ( #netstat –an | more LISTEN )

     리눅스 시스템에 사용 가능한 포트 확인



  - #netstat –an | grep SYN_RECV

     SYN Flooding 공격여부 가능성 점검



- #mii-tool -v

     네트웍크 상태 확인

     [root@mapo log]# mii-tool -v

eth0: negotiated 100baseTx-FD, link ok  (속도)

  product info: vendor , model 22 rev 2

  basic mode:   autonegotiation enabled 

  basic status: autonegotiation complete, link ok  (네트워크 링크 상태)

  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

  advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

eth1: no link

  product info: vendor , model 22 rev 2

  basic mode:   autonegotiation enabled

  basic status: no link

  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

[root@mapo log]#



  - #tcpdump -i eth0 (eth1)

     Eth0 거처 가는 패킷 헤드 확인



- #tcpdump -i eth0 –c 22

     Eth0 거처 가는 특정 포트 (22) 대한 패킷 헤드 확인



- # ping 해당 아이피  (통신 확인)



5. 시스템 용량 확인



  - #df -h

    파티션 용량 확인



  Fdisk -l

    디스크 파티션 확인



6. cpu , memory 사용률 확인



  #top

3:58pm  up 61 days, 19:03,  1 user,  load average: 0.00, 0.00, 0.00

          (uptime)           (접속유저)

131 processes: 130 sleeping, 1 running, 0 zombie, 0 stopped



CPU0 states:  0.0% user,  0.2% system,  0.0% nice, 99.3% idle

(cpu 0 현재 운용 상태)

CPU1 states:  0.0% user,  0.0% system,  0.0% nice, 100.0% idle

(cpu 0 현재 운용 상태)

Mem:  2064692K av, 2052536K used,   12156K free,       0K shrd,   56816K buff

(실제 메모리)

Swap: 2097112K av,    5564K used, 2091548K free                 1916536K cached

(가상 swap 메모리)      (사용량)      (남은량)



7. swap 확인



  #free

total       used       free     shared    buffers     cached

Mem:       2064692    2052368      12324          0      56844    1916536

-/+ buffers/cache:      78988    1985704

Swap:      2097112       5564    2091548



8. processes 확인



  #ps –ef | more

   시스템에서 운영중인 프로세서 확인.

9. hostname 변경



# vi /etc/sysconfig/network

파일내에 hostname 변경



  #/etc/rc.d/init.d/network restart ( 변경후 네트웍 재부팅 )



10. network ip

LINUX 점검사항

Linux 서버 점검사항들

1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검
find / -user root -perm -4000 -print (SetUID)
find / -user root -perm -2000 -print (SetGID)
find / -user root -perm -4000 -print -xdev
2. 파티션별 디스크사용량 점검
df –h

3. 파일무결성 점검.
tripwire 구성

4. 백도어 설치여부 점검.(/dev 체크 및 rootkit 점검)
find /dev -type f -exec ls -l {} ;
./chkrootkit

5. 현재 열려진 포트 및 응답가능한 포트 점검.
netstat -atp | grep LISTEN (사용 프로토콜 : TCP인가? 또는 UDP인가?
사용중인 포트번호
서버와 연결된 IP 및 도메인명
생성 PID
서비스중인 프로세스명
현재 응답가능상태인가?
lsof | grep LISTEN(현재 서비스 중인 프로세스명(데몬명)
현재 생성중인 PID번호.
현재 서비스중인 프로세스의 소유자
프로토콜 버전 : Ipv4 또는 Ipv6
TCP 또는 UDP의 여부
응답가능 상태인가?

6. 실생중인 프로세스 및 데몬점검.(프로세스의 생성관계)
Pstree

7. 시스템 운용상황 점검.
top -d2

8. 백업점검.
/home2/backup/nexfor/
/home2/backup/websea/

9. 스팸메일 점검.(메일큐 디렉토리 점검)
/var/spool/mqueue (동일한 날짜, 동일한 사이즈를 가진 다수 파일구분)

10. Core 점검.
서버내에 긴급한 이상이 발생하였을 경우나 시스템의 정확한 분석을 위해
서버의 메모리 상태를 순간적으로 dump 받는 경우의 파일
find / -name core -exec ls -l {} ;

11. 파일용량 점검
repquota -av -ag
df –h

12. 최근 서버 접속자 점검.

vi /var/log/secure
last -n 10 최근 10번째까지의 접속기록을 확인.

13. 계정별 최후접속기록 점검.
lastlog는 현재 /etc/passwd에 존재하는 모든 계정을 대상으로 하
여 언제 마지막으로
서버에 접속을 했는가를 확인.
Mail, adm, bin 등의 계정들은 모두 "** Never logged in **" 이라
고 되어 있는것이 정상.
Lastlog

14. 현재 서버접속자 보기
w (telnet)
ftpwho(ftp)

15. root명령어 사용기록 점검.
vi /root/.bash_history (.set nu)
cat /root/..bash_history | wc -l (1000라인 이상 되어야 정상)

16. 계정별 사용명령어파일 점검.
find / -name .bash_history -exec ls -l {} ; (각 계정
별 .bash_history 파일의 존재여부)
find / -name .bash_history -exec cat {} ; (파일의 내용까
지 모두 확인해 볼 수 있음)

17. root소유자 점검(UID와 GID가 0인 사용자 점검)
cat /etc/passwd | grep 0:0

18. 서버내에 중요한 디렉토리 점검
/etc/xinetd.d/ (xinetd로 서비스되는 인터넷서비스 파일들이 존재하는 디렉토리)
/etc/rc.d/ (부팅에 관계된 파일) (파일들을 복사 후 파일용량등을 비교하기) (커널패닉의원인)
/etc/rc.d/init.d/ (부팅시에 특정 서비스나 데몬들을 시작시키는 스키립트 파일)

19. .rhosts 파일 점검
원격에서 패스워드등의 확인과정없이 바로 접속하기 위해서 사용되는 파일

find / -name .rhosts -exec ls -l {} ;
find / -name .rhosts -exec cat {} ;

20. 메모리사용량 점검.
free -m
cat /proc/meminfo (free 와 top 는 이 파일을 참조하여 보여준다.)
top -d2

21. 중요 관리자용명령어 점검.
아래의 명령어들을 퍼미션을 100으로 설정한다. 변경 후 퍼미션 변경여부를 확인.

chmod 100 /usr/bin/top
chmod 100 /usr/bin/pstree
chmod 100 /usr/bin/w
chmod 100 /bin/ps
chmod 100 /usr/bin/who
chmod 100 /usr/bin/find
chmod 100 /bin/df
chmod 100 /bin/netstat
chmod 100 /sbin/ifconfig
chmod 100 /usr/sbin/lsof
chmod 100 /usr/bin/make
chmod 100 /usr/bin/gcc
chmod 100 /usr/bin/g++
chmod 100 /usr/bin/c++

22. su 명령어를 이용한 root권한 사용자 점검.
su 명령어의 사용내역을 확인할 수 있음.
cat /var/log/messages | grep root

23. 최근 n 일전 변경된 파일 점검. (단위는 일)
find / -ctime -1 -print | more

24. http://weblog 점검

25. find 를 이용한 특정파일 점검하기.
.exec 파일찾기
find / -name '.exec' -exec cat {} ; -print
.forward 파일체크
find / -name '.forward' -exec cat {} ; -print
write 퍼미션이 있는 파일(디렉토리)찾기
find / -type f ( -perm -2 -o -perm -20 ) -exec ls -lg {} ;
find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {} ;
SteUID SetGID 체크하기
find / -type f ( -perm -004000 -o -perm -002000 ) -exec ls -
lg {} ;
/dev 체크
find /dev -type f -exec ls -l {} ;
소유자없는 파일 및 디렉토리 찾기
find / -nouser -o -nogroup -print
원격리모트 접속허용 파일(.rhosts)찾기
find / -name .rhosts -print
최근 변경된 파일들 찾기.(파일or디렉토리) 단위는 일
find / -ctime -20 -type f or d
현재 서버에서 열려진 포트 및 접근저보 점검
netstat -an | grep LISTEN (포트들과 열결되어 있는 실행데몬들을 확인)
lsof | grep LISTEN (좀 더 자세히 확인)

26. 관리자용 명령어 퍼미션 수정하기.
chmod 100 /usr/bin/top
chmod 100 /usrbin/pstree
chmod 100 /usr/bin/w
chmod 100 /bin/ps
chmod 100 /usr/bin/who
chmod 100 /usr/bin/find
chmod 100 /bin/df
chmod 100 /bin/netstat
chmod 100 /sbin/ifconfig
chmod 100 /usr/sbin/lsof
chmod 100 /usr/bin/make
chmod 100 /usr/bin/gcc
chmod 100 /usr/bin/g++
chmod 100 /usr/bin/c++

27. 중요한 파일퍼미션과 소유권 제한 및 점검.
chmod 644 /etc/service
chmod 600 /etc/xinetd
chmod 644 /etc/mail/aliases
chmod 600 /etc/httpd/conf/httpd.conf
chmod 644 /var/log/wtmp
chmod 644 /var/run/utmp
chmod 644 /etc/motd
chmod 644 /etc/mtab
chmod 600 /etc/syslog.conf

/etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin
chmod 1777 /tmp
chmod 1777 /var/tmp

28. umask 값 확인하기.
root의 umask 값 확인하기.
umask
022 -->파일은 644 디렉토리는 755로 생성됨.
027 -->파일은 640 디렉토리는 750로 생성됨.

29. /dev 에 device 파일 이외의 것이 존재하고 있는지 확인.
find /dev -type f -exec ls -l {} ;

30. 일반사용자의 명령어 패스
/usr/local/bin:usr/local/mysql/bin:/home/hosting/bin/
일반사용자가 사용가능한 명령어를 모두 이것에 둠.

31. 관리자의 명령어 패스
:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin
/X11:/usr/X11R6/bin:/usr/kerberos/bin:/root/bin

32. 특정 그룹만의 su 사용권한 허용하기
vi /etc/group (wheel구릅에 su 사용권한을 가질 유저 추가하기)
wheel:x:10:root,cream
vi /etc/pam.d/su (두줄 추가하기)
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_wheel.so allow group=wheel
vi /var/log/message 에서 확인

33. chmod 400 /etc/shadow

34. 시스템 기본로그파일.
/var/log/messages
/var/log/secure
/var/log/wtmp
/var/run/utmp
/var/log/lastlog

35. utmp, wtmp, lastlog 파일
utmp파일 : 현재시스템에 접속해 있는 사용자의 정보를 가지고 있음.

strings utmp | more

정보 이용 명령어
login(1), who(1), init(8), last(8), lastcomm(8)
wtmp파일 : 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있음.
strings wtmp | more
정보 이용 명령어
login(1), who(1), init(8), last(8), lastcomm(8)
lastlog 파일
가장 최근에 로그인한 정보를 저장함.
last 라는 명령어로 확인할 수 있음.

36. 패스워드 유출대처방안(웹)
perl을 이용한 방법.

AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
Options Indexes SymLinksIfOwnerMatch IncludesNoExec

Order allow,deny
Allow from all


Order deny,allow
Deny from all


SSI의 exec 명령어를 이용하는 방법
# AddType text/html .shtml
# AddHandler server-parsed .노싀

37. PortSentry를 이용한 실시간 해킹방어 구현.(잘못 사용할시 서버접속 안됨)
tar -xvzf portsentry-1.1.tar.gz
make linux
make install
/usr/local/psionic/portsentry/portsentry -tcp
/usr/local/psionic/portsentry/portsentry -udp
/usr/local/psionic/portsentry/portsentry -stcp
/usr/local/psionic/portsentry/portsentry -atcp
/usr/local/psionic/portsentry/portsentry -stdp
vi /etc/hosts.deny 점검.

38. Chkrootkit 로 백도어 점검.
tar -xvzf chkrootkit.tar.gz
make sense
./chkrootkit (점검명령어)

39 ping 을 이용한 DOS 공격 막는 방법.
vi /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcasts = 1
sysctl -w
/etc/rc.d/init.d/network restart
sysctl -a | grep ignore_broadcasts

40. Nmap를 이용 포트스캔 하여 해킹가능성 체크.
nmap -sS -p80 211.42.48.110 -O -v 도메인
nmap -sS -O -v 211.42.48.114

2011년 11월 16일 수요일

LINUX 시스템 정보확인

01. 시작하기 전에…

컴퓨터의 운영체제를 직접 설치하고 관리를 하기 위해서는 기본적인 하드웨어 지식은 필수입니다. 윈도우즈의 경우에도 처음 OS를 설치한 후에 가장 처음에 하는 작업이 자동으로 설치되지 않은 드라이버를 찾아서 설치를 하는 것입니다.
윈도우즈 운영체제를 써본지가… 너무 오래되서 잘은 모르겠지만 아무리 운영체제의 버전이 올라가더라도 해당 버전의 운영체제가 출시된 이후의 하드웨어에 대해서는 거의 대부분 드라이버 설치 작업이 필요할 것입니다.(운영체제 출시일 이전의 하드웨어의 경우에는 대부분 OS자체에서 드라이버를 지원하는 편입니다.)
리눅스의 경우에도 출시된지 얼마되지 않은 하드웨어로 구성된 컴퓨터에서는 드라이버 작업을 수동으로 해야할 수 있습니다. 그래서 드라이버 설치를 하기 위해서 하드웨어의 이름을 파악하는 것이 필요한 데, 그것을 위한 명령어들을 소개할까 합니다. 그리고 하드웨어 중에서 컴퓨터의 가장 기본이 되는 메인보드의 정보를 확인하는 법을 설명하고, 나중에 다른 포스팅을 통해서 다른 장치들의 정보를 출력하는 법을 설명하도록 하겠습니다.

02. dmidecode 명령어

dmidecode 명령어는 컴퓨터의 메인보드에 있는 DMI(SMBIOS) 테이블의 정보를 사람이 읽을 수 있는 형태로 바꿔서 출력해줍니다. 저도 우분투포럼에서 올라온 답변 게시글을 보고서 궁금해서 직접 명령어를 사용해보면서 테스트를 해봤습니다. 자세한 것은 터미널에 man dmidecode를 입력하면 나오는 맨페이지에서 확인할 수 있습니다.
$ sudo dmidecode -t [매개변수]
위의 형태처럼 사용할 수 있습니다. 위의 매개변수로 들어갈 수 있는 것은 bios, system, baseboard, chassis, processor, memory, cache, connector, slot이 있습니다. 그런데, 이 -t 옵션과 매개변수로 출력되는 출력물들은 자세한 정보를 확인할 때는 좋지만 정확히 원하는 정보만을 출력할 때는 좋지 않습니다. 출력물이 꽤 길기 때문이지요… 그래서 그러한 경우에는 -s 옵션과 매개변수를 이용하면 됩니다.
아래의 명령어를 입력하면 -s 옵션의 어떤 매개변수를 입력할 수 있는지를 확인할 수 있습니다. 빨간색으로 표시한 문자열을 -s 뒤에 넣어주시면 해당 정보를 간단하게 출력해줍니다.
$ sudo dmidecode -s
dmidecode: option requires an argument -- 's'
String keyword expected
Valid string keywords are:
    bios-vendor
    bios-version
    bios-release-date
    system-manufacturer
    system-product-name
    system-version
    system-serial-number
    system-uuid
    baseboard-manufacturer
    baseboard-product-name
    baseboard-version
    baseboard-serial-number
    baseboard-asset-tag
    chassis-manufacturer
    chassis-type
    chassis-version
    chassis-serial-number
    chassis-asset-tag
    processor-family
    processor-manufacturer
    processor-version
    processor-frequency
제 데스크탑에서 간단한 예제를 정리해보면 아래와 같습니다.

03. 바이오스 정보 (제조사/버전/출시일)

바이오스(BIOS:Basic Input/Output System)는 메인보드의 ROM(요즘에는 플레시메모리)이라는 공간에 설치된 아주 작은 소프트웨어입니다. 이 소프트웨어는 컴퓨터 사용에 가장 기본적인 입출력을 담당하는 아주 중요한 부품입니다. 만약에 이 바이오스가 문제가 생기면 컴퓨터는 정상적으로 부팅을 할 수 없습니다. 이러한 바이오스에 대한 정보를 출력하는 명령어는 아래와 같습니다.
$ sudo dmidecode -s bios-vendor
[sudo] password for simplism:
American Megatrends Inc.
정보는 /dev/mem에서 읽어오는 데, 정상적으로 이 파일의 내용을 읽어오기 위해서는 root 권한이 필요하므로 sudo를 이용해서 root 권한으로 실행합니다.(비밀번호를 입력하면 정보를 출력합니다.) 제 메인보드에는경우에는 AMI(American Megatrends Inc.)에서 제조한 Bios가 장착되어 있군요.
$ sudo dmidecode -s bios-version
V4.5
AMI의 바이오스의 버전이 몇인지 위의 명령어를 이용해서 확인해보니 4.5버전이 탑재되어 있습니다.
$ sudo dmidecode -s bios-release-date
02/02/2010
출시일을 확인해보니 2010년 2월 2일자입니다.

04. 메인보드 정보 (제조사/제품명/버전/종류)

이제는 메인보드에 대한 정보를 출력해보도록 하겠습니다. 이에 대한 정보를 출력하기 위해서 매개변수로는 system- 으로 시작하는 것을 입력하거나 baseboard- 로 시작하는 매개변수를 입력해줘야 합니다. 사실 상 두 매개변수의 결과는 유사합니다만… 일반 사용자의 측면에서는 baseboard 쪽의 정보가 더 적당한 것 같습니다. 아무래도 system- 으로 시작하는 매개변수의 출력물들은 좀 더 제조사에서 관리를 위한 정보들인 것 같습니다.(결과는 거의 유사합니다만…)
$ sudo dmidecode -s baseboard-manufacturer
MICRO-STAR INTERNATIONAL CO.,LTD
제 메인보드의 제조사는 대만의 MSI입니다. 해당 출력결과를 확인해보니 회사의 풀네임(?)이 출력되네요. 여담이지만 유명한 메인보드 제조사는 거의 대만에 많이 위치를 하고 있습니다. Asus, Gigabyte, MSI 등… PC에 들어가는 수 많은 부품들이 여전히 대만에서 많이 생산되고 있지요. 저의 경우에도 컴퓨터를 조립할 때에 메인보드를 중요하게 생각하는데, 그래서 고가의 Asus나 Gigabyte 보드를 선호하는 편이었습니다만… 아무래도 단가조절을 위해서 MSI 제품을 선택했었습니다.(그래도 3년 무상AS라서…) 저의 경우에는 주 운영체제를 리눅스를 사용하다보니… 딱히 오버클럭킹의 필요성을 느끼지 못하고 원래 그런 것을 선호하는 성격이 아닌지라… 딱히 MSI 보드를 사용하면서 문제를 일으킨 적은 없습니다.(한 번 접지안되는 멀티탭 쓰다가 스파크로 뻗은 적이 있었지만.. 무상으로 교체받았죠;;ㅋ)
그리고 메인보드의 제품명을 출력해보겠습니다.
$ sudo dmidecode -s baseboard-product-name
P45 Neo3 V2 (MS-7514)
P45 Neo3 V2가 구입할 당시의 제품명입니다. 괄호 안에 들어있는 MS-7514는 system-product-name을 입력했을 시에 출력되는 값인데, 아마도 이 이름은 제조사에서 관리를 위한 모델명이라고 생각됩니다.(baseboard-product-name으로 출력된 결과는 판매를 위한 모델명이구요…)
직접 컴퓨터를 조립하다보면 알게되는 사실이지만… 메인보드의 모델명만 봐도 대강의 정보는 확인할 수 있습니다. 가장 처음에 나오는 P45 같은 경우에는 인텔CPU를 장착할 수 있는 P45 칩셋을 노스브릿지 칩셋을 장착한 메인보드임을 알려줍니다. P45에 대한 정보를 알고 있다면 이 메인보드에 장착할 수 있는 메모리나 CPU를 바로 알 수 있도록 칩셋명을 같이 표기하여 판매하는 것이 대부분입니다.(실제로 최신의 칩셋을 장착한 경우에는 약간의 홍보효과도 됩니다.)
인텔의 P45 칩셋을 장착하였더라도 칩셋 외의 부품이나 다른 이유때문에 조금씩의 차이는 있지만 거의 대부분은 일치하는 편입니다. P45 칩셋의 경우에는 인텔 Core 2 제품군을 거의 다 지원하고, CPU 소켓은 LGA 775입니다. 그리고 메모리에 대한 지원이 1333/1066/800 FSB를 지원하고 있습니다. 이 외에 PCI-Express와 같은 것들이 P45 칩셋을 사용하는 메인보드들은 거의 동일하니 칩셋에 대한 정보만 알고 있어도 대강은 PC에 대한 정보를 확인할 수 있는 것입니다.(자세한 정보나 호환성은 각 메인보드 제조사의 홈페이지에서 확인할 수 있습니다. 또는 메인보드 박스 내의 설명서 내에 첨부되어 있습니다.)
이제는 이 메인보드의 버전을 확인해보도록 하겠습니다.
$ sudo dmidecode -s baseboard-version
2.0
버전은 2.0입니다. 이 정보의 경우에는 메인보드의 모델명의 V2에서도 알 수 있습니다. 이 내용을 적은 이후에 알게된 것이지만… chassis-로 시작하는 매개변수도 system-이나 baseboard-와 유사한 내용을 출력해주는 군요;; 그나마 chassis-type의 경우에는 해당 메인보드의 종류가 어떤 것인지 알려줍니다.
$ sudo dmidecode -s chassis-type
Desktop
위의 출력결과로 나오는 Desktop은 해당 메인보드가 데스크탑용 메인보드임을 알려줍니다. 참고로 제가 지금 서버로 이용 중인 HP mini110-1111TU 넷북에서 위의 명령어를 입력해보니 Notebook으로 출력되네요.

05. CPU 정보 (제조사/버전/클럭스피드)

dmidecode 명령어를 이용하면 현재 메인보드에 장착되어 있는 CPU의 정보도 확인할 수 있습니다. 저의 경우에는 Intel Core 2 Quad Q9550을 사용하고 있습니다. 매개변수로 processor-family를 입력하니 저의 경우에는 <OUT OF SPEC>이 출력되네요… 그래서 나머지 매개변수의 정보들은 아래에 정리해봤습니다.
일단은 CPU의 제조사를 확인해보도록 하겠습니다. P45가 인텔용 CPU를 위한 메인보드이니 결과는 당연히 Intel일 것입니다.
$ sudo dmidecode -s processor-Manufacturer
Intel
그리고 CPU의 버전은 아래와 같습니다.(버전이라기보다는… 사실 상 CPU의 이름과 나머지 대부분의 정보를 출력해줍니다.)
$ sudo dmidecode -s processor-Version
Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz
리눅스를 많이 사용해신 분들은 아시겠지만… 위의 출력결과가 어디에서 많이 보던 것과 동일합니다.
시스템 – 관리 – 시스템 감시를 선택하면 나오는 하면에서 상단의 시스템 탭을 선택하면 나오는 출력정보에서 동일한 문자열을 확인할 수 있습니다. 아무래도 dmidecode로 나오는 출력결과를 이용하는 것이 아닌가… 라는 생각이 듭니다.
이제는 CPU의 클럭스피드를 확인해보겠습니다.
$ sudo dmidecode -s processor-frequency
2833 MHz
Q9550의 클럭스피드는 2.83GHz입니다. MHz 단위로 표시하면 위와 같이 2833MHz로 표시가 되나봅니다.

06. 마치면서…

원래는 시스템의 정보를 확인하는 명령어들과 GUI로 확인할 수 있는 어플리케이션까지 한꺼번에 포스팅을 하려고 했습니다만… 설명이 보다 간단한 GUI 어플리케이션과는 달리 명령어의 경우에는 설명을 할 것이 많아서… 하나의 포스팅을 하기에는 분량이 너무 많은 것 같아서 분리하였습니다.
추후에 시스템의 정보를 확인하는 명령어들(lspci, lshw)과 다른 시스템의 하드웨어를 확인할 수 있는 어플리케이션도 소개를 하도록 하겠습니다.

07. 참고문서

  1. http://ubuntu.or.kr//viewtopic.php?p=73440
  2. dmidecode man page ($ man dmidecode)
  3. http://terms.co.kr/DMI.htm
  4. http://en.wikipedia.org/wiki/Desktop_Management_Interface
  5. http://ko.wikipedia.org/wiki/바이오스
  6. http://ko.wikipedia.org/wiki/노스브리지
  7. http://en.wikipedia.org/wiki/Intel_P45