2008年9月1日 星期一

在 CentOS 5 安裝 MRTG

1.安裝 snmp 與 MRTG

bang@linuxdiary:~$ yum -y install net-snmp mrtg net-snmp-utils

說明:安裝 net-snmp-utils 是為了使用 snmpwalk。

2.設定 snmp

先備分一份設定檔

bang@linuxdiary:~$ cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

編輯設定檔 /etc/snmp/snmpd.conf
在 snmpd.conf 有好幾段範例,請註解第一段範例,使用者由第二個範例修改。
在第二段範例設定一開始你可以看到

# Here is a commented out example configuration that allows less
# restrictive access.

你需要修改的地方只有 community string,其餘請依序移除註解。

a.設定 community string

#       sec.name  source          community
com2sec local localhost hplus

說明:hplus 即為 community string

b. Map Group name

#       groupName      securityModel securityName
#group MyRWGroup any local

說明:移除紅色 #

c. 設定檢視權限

#           incl/excl subtree                          mask
#view all included .1 80

說明:移除紅色 #


d. 最後,讓群組可以唯讀方式檢視系統

#                context sec.model sec.level prefix read   write  notif
#access MyRWGroup "" any noauth 0 all all all

說明:移除紅色 #

e.啟動 SNMP

bang@linuxdiary:~$ /etc/rc.d/init.d/snmpd start

f.測試 SNMP

bang@linuxdiary:~$ snmpwalk -v 1 localhost -c hplus

若 snmp 安裝完成,會顯示一大堆 snmp 回傳訊息,以下節錄一小段

SNMPv2-MIB::sysDescr.0 = STRING: Linux www.hundredplus.com 2.6.15-1.2054_FC5 #1 Tue Mar 14 15:48:33 EST 2006 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2289589) 6:21:35.89
SNMPv2-MIB::sysContact.0 = STRING: Root (configure /etc/snmp/snmp.local.conf)

g.防火牆

如果不是觀察本機端 SNMP,請記得對方要開啟 UDP PROT 161

3.設定 MRTG

架構說明

觀察對象的 Community String:hplus
輸出設定目錄:/etc/mrtg/
輸出網頁目錄:/opt/lampp/htdocs/mrtg/
目的:建立主機流量圖

a.產生 cfg 檔案
執行以下命令

bang@linuxdiary:~$ cfgmaker --global 'WorkDir: /opt/lampp/htdocs/mrtg' \
--global 'Options[_]: growright' \
--output /etc/mrtg/network.cfg \
hplus@localhost

說明:更多 cfgmaker 設定請參考
http://mrtg.cs.pu.edu.tw/doc/cfgmaker.en.html

b.執行 mrtg

bang@linuxdiary:~$ env LANG=C /usr/bin/mrtg /etc/mrtg/ network.cfg

說明:會出現多行警告訊息如下

Rateup WARNING: /usr/bin/rateup Can't remove localhost_2.old updating log file

請重複執行命令,直到警告消失為止

c.產生網頁

bang@linuxdiary:~$ indexmaker /etc/mrtg/network.cfg > /opt/lampp/htdocs/mrtg/network.html

說明:輸出的網頁只是一種顯示方式,可依據喜好編輯網頁。

e.檢視網頁是否建立成功

http://localhost/mrtg

你應該要看到以下圖片

f.自動排程

編輯 /etc/cron.d/mrtg ,加入已下一行

*/5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg/network.cfg

說明:每五分鐘執行一次,需重新啟動 crond

bang@linuxdiary:~$ /etc/rc.d/init.d/crond restart

4.其他觀察指標

下載 mrtg.zip,利用現成範例檔案,完成其他觀察指標,以記憶體為例,解開壓縮檔後,上傳 mem.cfg 至 /etc/mrtg,並編輯

Target[freemem]: .1.3.6.1.4.1.2021.4.11.0&.1.3.6.1.4.1.2021.4.11.0: hplus@localhost
Title[freemem]: Free Memory
MaxBytes[freemem]: 10000000
kMG[freemem]: k,M
YLegend[freemem]: bytes
ShortLegend[freemem]: bytes
PageTop[freemem]: Free memory, not including swap, in bytes
Legend1[freemem]: Free memory, not including swap, in bytes
LegendI[freemem]: Free Memory:
LegendO[freemem]:
Options[freemem]: nopercent,growright,gauge,noinfo
WorkDir:/opt/lampp/htdocs/mrtg/
Language:big5

編輯檔案時,需確認 Community String@觀察 IP,輸出網頁目錄是否正確。
完成後,執行回到之前 設定 MRTG介紹,重複執行 b,c,e,f 動作即可。

同理依序上傳並編輯各個檔案,包含

AttemptFails.cfg
連線嘗試失敗
cpu_act.cfg
CPU 負載率
cpu_idle.cfg
CPU 閒置率
cpu_usr.cfg
CPU 使用者與系統使用率
dsk.cfg
磁碟使用率
estabcons.cfg
目前連線數
hrStorage.cfg
磁碟目前用量
mem.cfg
記憶體使用率
newconn.cfg
新建立連線數

5.監控硬碟項,要注意的地方

a.監控硬碟必須先知道我們掛載的情況

輸入命令

bang@linuxdiary:~$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
471016352 14887036 431817100 4% /
/dev/sda1 101086 10960 84907 12% /boot
tmpfs 1037820 0 1037820 0% /dev/shm

利用以上資訊,編輯 snmp.conf

b.然後在 snmp.conf 指定硬碟

開啟 /etc/snmp.conf`,尋找 # disk checks
你可以看到一些設定範例,可將 df 所得資訊,插入以下兩行

disk / 471016352       #代表第一個要觀察的分割區

disk /boot 101086 #代表第二個要觀察的分割區

c.於/etc/mrtg 編輯 dsk.cfg,內容如下

LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[kontor.root]:dskPercent.1&dskPercent.2:MY_SRTING@localhost
MaxBytes[kontor.root]: 100
Title[kontor.root]: DISK USAGE
PageTop[kontor.root]: DISK / and /boot Usage %
Unscaled[kontor.root]: ymwd
ShortLegend[kontor.root]: %
YLegend[kontor.root]: DISK Utilization
Legend1[kontor.root]: Root disk
Legend2[kontor.root]: /boot disk
Legend3[kontor.root]:
Legend4[kontor.root]:
LegendI[kontor.root]: Root disk
LegendO[kontor.root]: /boot disk
Options[kontor.root]: growright,gauge,nopercent
WorkDir:/opt/lampp/htdocs/mrtg

編輯檔案時,只需確認 Community String,觀察 IP,輸出網頁目錄是否正確。
完成後,執行 設定 MRTG:b,c,e,f 動作即可。

6.編輯 index.html

這是最後結果,可視情況要不要作,當所有範例檔都修改並上傳完成,可根據範例包中 index.html,
修改連結與圖片正確的位址,即完成所有安裝。

範例

<div>
<a href="freemem.html"><img border="1" alt="freemem Traffic Graph" src="freemem-day.png"></a><br>
<small><!--#flastmod file="kontor.root.html" --></small>
</div>

2008年5月14日 星期三

如何知道現在的 Distribution

Distribution 不知道該怎麼翻譯,通常我會叫他「發佈」或「發行」,指的是各個軟體商或社群利用不同版本的核心,自行組裝各種套件,客製化後的各種不同 Linux 版本,如 Slackware、Red Hat、Mandriva、Debian、Ubuntu 等。
隨著發行版本越多,個人手邊安裝的系統也越多,加上版本號不斷更新,常常遊走不同版本之間的人難免會錯亂,現在是第幾版?哪一個 Distribution?核心是多少 ...
以下整理如何解決這些問題:

  • 從開機紀錄著手
    dmesg 可以將開機紀錄列印出來,/var/log/dmesg 也記錄著相同資料。
    bang@linuxdiary:~$ dmesg | head -1

    Linux version 2.6.12-1.1381_FC3smp (bhcompile@porky.build.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Fri Oct 21 04:03:26 EDT 2005

  • 利用 /proc/version
    這裡的結果與 dmesg 顯示的結果相同
    bang@linuxdiary:~$ cat /proc/version

    Linux version 2.6.12-1.1381_FC3smp (bhcompile@porky.build.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Fri Oct 21 04:03:26 EDT 2005

  • 利用 /etc/issue
    這個方式應該是最接近標題問題的正確解答
    bang@linuxdiary:~$ cat /etc/issue

    Fedora Core release 3 (Heidelberg)
    Kernel \r on an \m
  • 如何查詢核心版本
    這是 LPI1 的基本考題
    bang@linuxdiary:~$ uname -a

    Linux hundredplus.com 2.6.12-1.1381_FC3smp #1 SMP Fri Oct 21 04:03:26 EDT 2005 i686 i686 i386 GNU/Linux

2008年3月25日 星期二

如何製作 ssh 的鑰匙

使用 puttygen 製作鑰匙
  1. 點選 PUTTYGEN.EXE 程序 (官網下載頁面)。
  2. 在 Parameters 一欄選擇 Key 類型為「SSH2 DSA」。( 其實這裡的三個選項都可以選,主要式配合你的 ssh )
  3. 點擊 Generate 按鈕。
  4. 在空白處隨機移動鼠標用以產生隨機數據。這些隨機數據將被 Puttygen.exe 用來產生安全的 KEY (密鑰),收集到足夠的隨機數據密鑰就會產生。
  5. 基本上此時鑰匙以建立完成,但若你考慮在鑰匙上加上安全機制,可在"Key passphrase" 和 "Confirm passphrase"處輸入密碼,為你的私鑰加密,當然你也可以選擇不輸入密碼;當使用者利用私鑰要登入伺服器時,會被問起這組密碼。
  6. 保存這對鑰匙,Save private key 保存私鑰,Save public_key 保存公鑰,保存私鑰的附檔名為 .ppk,此文件就是客戶端要使用的私鑰,若你沒有設定 passphrase ,在儲存私鑰同時會詢問 passphrase 是否空白 。基本上,公鑰可以不儲存,可以將文字方塊中的那一長串文字複製於 authorized_keys 中,若真的遺失了,可用 load 私鑰的方式產生公鑰。
  7. Puttygen會在 key 文字方塊中產生一對亂碼,將整段複製,貼於個人資料夾中的 .ssh/authorized_keys ,以下為公鑰範例。
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAz7y1oBJiH6yuW6hOWu3jzTPYOJ5MRwvhvM6pcK9+NAjj8nJk9Msvpt7fwBoQyBNuXN/fZTneUxL16rYbeVQ8M2xWUZ0QbB38aCSRkM3iUaD/JuPXrfGkTsSEvwsztr+jyz8/SCeOiaZ7YXoCUUoTobJ2l4R43C8y6m7Y8DivH/k= rsa-key-20080514

增加使用公鑰的限制

在公鑰的亂碼前加入 from 或 command,可以限制使用公鑰的指令與來源IP如下
from="192.168.101.10" ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAz7y1oBJiH6yuW6hOWu3jzTPYOJ5MRwvhvM6pcK9+NAjj8nJk9Msvpt7fwBoQyBNuXN/fZTneUxL16rYbeVQ8M2xWUZ0QbB38aCSRkM3iUaD/JuPXrfGkTsSEvwsztr+jyz8/SCeOiaZ7YXoCUUoTobJ2l4R43C8y6m7Y8DivH/k= rsa-key-20080514

ssh-keygen 製作鑰匙

首先決定要使用這把公鑰的用戶(可以是 root),並切換至用戶目錄下。
bang@linuxdiary:~$ su bang
bang@linuxdiary:~$ cd ~
產生鑰匙,如同 puttygen,會產生一對鑰匙,公鑰與私鑰,-t 為產生格式,有一般可選擇 dsa 或 rsa,在產生時,系統會詢問你存放地點與使用密碼,你可以直接 Enter 略過,不設密碼,代表使用私鑰時,不須密碼。
bang@linuxdiary:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):/root/.ssh/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /bang/.ssh/id_rsa.
Your public key has been saved in /bang/.ssh/id_rsa.pub.
The key fingerprint is:
f4:b4:55:93:89:f7:d5:b0:4a:38:39:76:36:6c:a4:b6 bang@192.168.1.10

以下是容易忘記的地方,必須完成幾個重要的權限設定,最後將公鑰匯入 authorized_key
bang@linuxdiary:~$ chmod 700 .ssh
bang@linuxdiary:~$ cd .ssh
bang@linuxdiary:.ssh$ touch authorized_keys
bang@linuxdiary:.ssh$ chmod 600 authorized_keys
bang@linuxdiary:.ssh$ cat id_dsa.pub > authorized_keys
有關於私鑰的使用

在Linux上的使用方法,根據 /etc/ssh/ssh_config 的設定,私鑰放置預設路徑為 ~/.ssh/id_rsa
故製作完私鑰後,可以將私鑰內容,複製於 ~/.ssh/id_rsa 之中,但 id_rsa 只能放一把鑰匙,若同時擁有多把主機鑰匙可用以下方式登入。

bang@linuxdiary:~$ ssh -i 鑰匙名稱 root@192.168.1.1
sshd.conf 的相關設定

IdentityFile ~/.ssh/id_rsa
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

IdentityFile: 私鑰檔的路徑與名稱
AuthorizedKeysFile:公鑰檔的路徑與檔名
RSAAuthentication:是否開啟 RSA 認證
PubkeyAuthentication:是否允許公鑰認證

2008年2月11日 星期一

rpm 對照 dpkg

安裝、移除

目的 rpm 範例 長旗標
dpkg 範例長旗標
安裝 rpm -i webmin-1.400-1.noarch.rpm install
dpkg -i webmin_1.400_all.debinstall
移除
rpm -e webmin
erase
dpkg -r webmin (保留設定檔)
dpkg -P webmin (完全移除)
remove
purge

查詢已安裝套件

目的 rpm 範例 長旗標
dpkg 範例長旗標
顯示所有已安裝的套件名稱 rpm -qa query
all
dpkg -llist
顯示套件包含的所有檔案rpm -ql webmin
query
list
dpkg -L webmin
listfiles
顯示特定檔案所屬套件名稱rpm -qf ./webmin.conf
query
file
dpkg -S ./webmin.conf
search
查詢套件檔案資訊rpm -qi webmin
query
info
dpkg -p webmin (顯示詳細資訊)
print-avail
查詢套件安裝檔的資訊rpm -qip webmin-1.400-1.noarch.rpmquery
info
package
dpkg -I webmin_1.400_all.debinfo
查詢套件安裝檔的欲安裝檔案rpm -qlp webmin-1.400-1.noarch.rpmquery
list
package
dpkg -c webmin_1.400_all.debcontent

本文是主要參考
http://cha.homeip.net/blog/archives/2005/08/rpm_vs_dpkg.html
本來想做更詳盡的整理,但原文已夠棒了,就稍微整理一下編排就發布了。
這裡題一下 alien 這命令,它在 LPI1 常考,主要目的是用於 debian 系統上使用 rpm 的套件。

2008年1月4日 星期五

搜尋指令的整理

各種搜尋命令
命令名稱 對象
說明
locate 檔案、目錄
以比對資料庫索引的方式,尋找檔案與目錄。
find
檔案、目錄實際於目錄樹中尋找檔案或目錄。
whereis
命令
顯示命令、命令原始碼、命令 manual page 的位置。
which
命令顯示命令 (二進位檔) 的存放位置。
ldd
命令顯示與命令相依的分享函式庫。
whatis
Man Page
以關鍵字精確搜尋 manual page。
apropos
Man Page以關鍵字模糊搜尋 manual page。
info
Info Page以 Info 格式讀取 manual page。
man
Man Page搜尋 manual page。
whois
網域名稱
查詢網域名稱的註冊資訊。

2008年1月1日 星期二

分割區的管理

分割區的管理其實就是 fdisk 指令的應用,講起來很簡單,但這只是了解 Linux 檔案系統的其中一步而已,以下一個易搞混的例子來說,fdsik -l,mount,df 所顯示資訊的差異,這三個指令顯示的內容有類似的資訊,但事實上完全是兩碼事。
bang@linuxdiary:~$ fdisk -l

Disk /dev/sda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 144 1052257+ 82 Linux swap
/dev/sda3 145 20023 159678067+ 83 Linux

bang@linuxdiary:~$ mount
/dev/sda3 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda1 on /boot type ext3 (rw)
none 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)

bang@linuxdiary:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 157171140 130211572 18975668 88% /
/dev/sda1 101086 11071 84796 12% /boot
none 252752 0 252752 0% /dev/shm
注意
在參考書中,或 man page 中常常遇到,也容易搞混的一個名詞 Filesystem「檔案系統」,此 名詞有兩種不同的意思:一,檔案與目錄在硬碟(或其它儲存裝置)上的具體組織方法,簡單的說就是分割區類型 (partition type)。二,儲存裝置內容的組織結構,意即目錄樹 (directory tree),也可以說將分割區掛載後的目錄結構。
二的解釋是大家熟悉的檔案系統說明,但也許有人會質疑一的說明,認為分割區就分割區,檔案系統就檔案系統,但如果你去 man 一下 filesystem 就會發現在 man page 中,Filesystem 的意義多為一的解釋。
劃分分割區的注意事項
  • 雖然系統可規劃多個分割區,但系統必須在掛載 「/」根目錄的分割區完成開機作業,因此「/bin/」,「/sbin/」,「/etc/」,「/lib/」,「/dev/」此五個目錄必須與根目錄配置於同一分割區。
  • 若硬碟容量有限,建議容量最大的分割區分配給「/user/」使用。
  • 「/root/」,「/home/」為選擇建立 (optional) 的目錄,若硬碟空間不足,可不建立。
  • 「/」,「/var」,「/tmp」,「/usr」,「/usr/local」,「/opt」,「/home」分別配置在不同的獨立分割區,可提高存取效能,增加備份的便利性。

2007年12月23日 星期日

檔案權限

存取控制 文章可知,stat 指令可知道檔案的相關資訊,在存取的部分,你可以看到一行如 Access: (0644/-rw-r--r--) 的資訊,其中 -rw-r--r-- 在 存取控制 中就說明了,而 0644 呢?就是本篇的主角之一。

位元模式

在 Linux 中以 chmod 工具來修改檔案權限。但是使用 chmod 時需要一套簡單的表示法來描述檔案權限,而能表示檔案權限的表示法有兩種,分別為位元模式與存取模式。
-rw-r--r-- 用後九個符號來表示檔案存取,而事實上位元模式的位元有 12 個(其中 3個為特殊權限),若直接用二進位來表達過於冗長且容易搞錯。最理想的方式為八進位,因為每三個八位元的數字剛好能表示 12-bits 位元模式分成 4 組不同意義的組合,而下表即各個進位轉換的對照表:

符號 二進位 八進位
--- 000 0
--x 001 1
-w- 010 2
-wx
011
3
r--
100
4
r-x
101
5
rw-
110
6
rwx
111
7
範例:
rw-r--r--
110100100
644

rwxrwxr-x
111111101
775
字串模式

以八進位表示雖然簡潔,但不容易解讀。因此許多工具會以字串模式來表事檔案權限,如之前常提的 ls -l 的輸出訊息,但 ls -l 只顯示 r、w、x 、特殊權限等符號,不包括身分 (u、g、o) 與操作 (-、+,=) 符號,下表即說明字串模式的各個符號:


符號 說明
身分 u
擁有者 (user)

g 群組

o 其他人

a
所有人
操作
-
移除
r-x
+
添加
rw-
=
設定
權限
r
讀取

w
寫入

x
執行

s
SUID 或 SGID (s 代表同擁有 x 權限,S 則無)

t
Sticky 權限 (t 代表同擁有 x 權限,T 則無)

範例
u+x 讓使用者有執行權限
go-w 移除群組與其他人的寫入權限
o+t 將其他人設定 Sticky 權限
a=rw 所有人都為讀取與寫入權限
我們會用 chmod 來調整檔案或目錄的存取模式,就會大量的用到字串模式的表示法,以下為範例:
範例一:用字串模式將檔案存取權限設定為 rw-r--r--,並顯示操作結果。
bang@linuxdiary:~$ chmod -v u=rw,go=r chmod_test1
mode of `chmod_test1' retained as 0644 (rw-r--r--)
範例二:讓其它使用者無法存取整個 Desktop 目錄,並顯示操作結果。
bang@linuxdiary:~$ chmod -vR o-rwx Desktop
mode of `Desktop' retained as 0750 (rwxr-x---)
mode of `Desktop/abc.txt' changed to 0640 (rw-r-----)
範例三:將 Desktop 目錄設定 SGID,並顯示操作結果。
bang@linuxdiary:~$ chmod -v g+s Desktop
mode of `Desktop' changed to 2750 (rwxr-s---)
範例四:將 Desktop 目錄設定 Stickey 權限,並顯示操作結果。
bang@linuxdiary:~$ chmod -v +t Desktop
mode of `Desktop' changed to 3750 (rwxr-s--T)

預設存取模式

當使用者新增一個檔案或目錄時,系統會根據 umask 設定值,來決定這個檔案或目錄的存取權限,而甚麼是 umask 設定值呢?這是一個設定預設存取權限的命令 umask ,以下為範例

查詢目前的
bang@linuxdiary:~$ umask
0022
新增一個檔案,並檢查預設存取權限
bang@linuxdiary:~$ touch umask_test1
bang@linuxdiary:~$ ls -l umask_test1
-rw-r--r-- 1 bang bang 0 Dec 24 00:18 umask_test1
更改目前的預設權限
bang@linuxdiary:~$ umask 002
bang@linuxdiary:~$ touch umask_test2
bang@linuxdiary:~$ ls -l umask_test
-rw-r--r-- 1 bang bang 0 Dec 24 00:18 umask_test1
-rw-rw-r-- 1 bang bang 0 Dec 24 23:46 umask_test2
我們可以發現 umask 前後,新增檔案的存取權限是相異的。
注意
  • 通常系統預設的 umask 設定,會在 /etc 目錄下的 profile (debian)或 bashrc (red hat)中。這點好像不太重要,因為可以放的地方還蠻多的,FHS 也沒硬性規定一定要放哪,只是喚起對這兩個 shell 設定檔的記憶。
  • 在 red hat 中,一般用戶的 umask 為 0002,而 root 為 0022;debian 皆為 0022,故這邊的範例是以 debian 為例喔,我是用一般用戶 touch 一個檔案。