顯示具有 安裝設定 標籤的文章。 顯示所有文章
顯示具有 安裝設定 標籤的文章。 顯示所有文章

2011年8月12日

Chrome 擴充功能 - Plus Plurk 介紹

※本 Chrome Extension 已廢止,感謝大家支持,造成不便懇請見諒!

基本上這是一個協助格揆我將發佈在 Google Plus 上的訊息同步到 PlurkGoogle 瀏覽器 擴充套件 / 功能。原本只是格揆個人單純在同步文字訊息使用,但是經過一陣加油添醋式的亂改後覺得也許可以開放給 Google Plus 及 Plurk 的重度使用者試看看,於是就把它上到 Chrome 線上應用程式商店 了。

開發源由歷程

當不小心偷渡進 Google Plus 後,格揆一度因為專心在 Google Plus 上打混而幾乎放棄了在 Plurk 上的活動,此作為連帶使得卡馬值在短短幾天就從 98.x 掉到 97.y,在發現這種情形時原本一度考慮要使用凍結卡馬的方式來欺瞞自己。但此刻一個由 Google Plus 同步訊息到 Facebook 的 Publish Sync 擴充功能上線到線上應用程式商店,經過簡單試用後就有了『不然我也來寫一個從 Google Plus 將訊息同步發送到 Plurk 的擴充功能』的念頭並真正的開始研究 Plurk API ,隔了幾天後突然到 Chrome 線上應用程式商店付了 US$5 的入場券,然後還拗了 他踢 幫忙拉了一個 ICON,最後還賺了一場由 火焰銘王 提供的美國隊長電影,終於在 08/02 開始了募集測試人員的測試流程,然後就是因為一時恍神而在 08/11 莫名其妙的正式把它給弄上 Chrome 線上應用程式商店

核心思想

和 Publish Sync 的規劃不同,這個擴充套件是基於使用者以 Google Plus 為唯一發言人,並想將相關資訊散佈到 Plurk 上的散播模式而開發。換句話說如果您是希望以 Plurk 為主要發言來源,但想將訊息同步到 Google Plus 上訊息傳播模式的話,那這個套件就不會適合您的需要。在安裝前請先理解此一核心思想所造成的設計上的差異。

功能特色

本擴充套件 / 功能的主要特色如下:
  • 直接對 Plurk 發送訊息:所有的訊息都直接對 Plurk 進行操作,訊息分享沒有延遲
  • 訊息分享限制:本擴充功能支援『僅限朋友閱讀』之私噗模式,也能設限回噗對象的範圍
  • 訊息分享格式:依訊息內容的差異,提供 5 種轉噗到 Plurk 上的訊息格式
  • 訊息長度預覽:Plurk 屬微網誌系統,本套件可以預判訊息長度,提前避免傳送失敗的情形
  • 多段訊息轉噗:擔心個人感想太長無法轉送到 Plurk 嗎?沒關係,只要您分段得宜,本套件會自動將各段轉成回噗送上 Plurk

安裝與授權

本套件為 Google 瀏覽器 Chrome 所屬的擴充套件,如果您尚未使用 Google 瀏覽器可以在 Google 瀏覽器 產品頁面下載安裝。另外提醒的是 Google 瀏覽器安裝並不需要系統管理者權限,只要作業系統為 Windows XP 以上的使用者都能直接下載安裝。
安裝 Plus Plurk
請使用您已安裝的 Google 瀏覽器連接到 Plus Plurk - Chrome 線上應用程式商店 上並按下『加到 Chrome』按鈕即可,如附圖:
權限要求
本擴充功能僅存取以下三個網站資料:
  1. www.plurk.com: 將資料傳輸給 Plurk
  2. plus.google.com: 擷取在 Google Plus 上預定發佈的訊息、在 Google Plus 上啟用本擴充套件
  3. www.googleapis.com: 將預定分享到 Plurk 的網址預先進行網址為 http://goo.gl/xxxxx 之用
重新載入 Google Plus
完成安裝後套件會自動將相關程式載入 Google Plus 頁面中,不過您也可以重新載入 Google Plus 頁面,確保相關程式正確的嵌入 Google Plus。只要相關程式已正確嵌入,那麼在輸入訊息時會在分享鈕右側看到多出一個 Plurk Share 圖示。但是因為目前還沒有取得 Plurk 服務授權,所以此刻暫時無法點選。如附圖:
取得 Plurk 服務授權
套件安裝後會自動開啟 Plus Plurk 選項設定頁面以利噗友進行 Plurk 服務授權,另外您也可以按下 Chrome 右上角的 Plus Plurk 圖示,它會直接開啟 Plus Plurk 選項設定頁面,如附圖:

點選『進行授權』鈕後會開啟 Plurk 服務授權存取頁面,不同意的話是沒辦法發送訊息給 Plurk 的喲~~
授權完成後會自動關閉該頁面回到 Plus Plurk 選項設定頁面,其中『授權狀態』欄位會變更為『已完成授權』,同時『授權人』欄位會取得 Plurk 的使用者名稱資訊,如附圖。特別注意的是一旦更換電腦,這個授權動作就要執行一次!
如果授權後發現授權人的名字不是您的名字請先登出 Plurk 後再重新進行授權;如果這是一台公用電話的話請在使用完畢並登出 Google Plus 後一併記得登出 Plurk 及清除 Plus Plurk 授權設定(請注意:Plus Plurk 並非透過 Plurk 帳號及密碼登入 Plurk ,故光是登出 Plurk 並不會取消 Plus Plurk 存取 Plurk 的權限),清除授權設定後則『受權狀態』欄位會恢復為『尚未授權』,如附圖。

一般使用

Plus Plurk 只要完成 Plurk 服務存取授權後,就可以將訊息同步分享到 Plurk 上。不管是心情碎碎念、文章心享、心得感言、照片紀念、還是影音記錄等等等,只要沒有超過 Plurk 內文長度限制,Plus Plurk 都可以幫你噗到 Plurk 上。以下都是將 Google Plus 上輸入的資訊與 Plurk 實際獲得的噗文結果合併後的圖例。
心情碎碎念 / 純文字訊息
心得分享
純文章分享
與『心得分享』最大的差異就是... 沒有心得... (被毆)
內嵌文章分享
0.3.2.2 調整功能
如果是 Plurk 支援的文章連結,則 Plurk 會以部落格區塊轉貼方式呈現,如附圖。
目前 Plurk 支援的 oEmbed 網站列表如下(請參考 Plurk Labs (Chinese)):
  • YouTube
  • Vimeo
  • Slideshare
  • Wordpress.com
  • PIXNET痞客邦部落格、相片/相簿
  • 未來事件交易所
  • ted.com
  • itunes.apple.com
  • Flickr
  • scribd
  • Xuite 隨意窩部落格、相片/相簿
  • 蘋果日報新聞
圖片分享

噗文管理

Plus Plurk 一開始預設的 Plurk 訊息是可在河道上自由被檢視及回噗的,但是人生總有些訊息並不想如此大方的公開或是讓人家插花回覆的,有一些開關可以應付這方面的需求。
檢視限制
可以選擇是公開給所有人檢視或僅朋友能檢視。
回噗限制
可以限制是否同意任何人皆可回噗,僅限朋友可以回噗、或完全不能回噗!
同步限制
0.3.1.0 新增功能
應該有不少噗友是利用 Plurk 提供的 Facebook 同步功能將訊息同步到 Facebook 上的,而 Plurk 其實也提供了如何不同步到 Facebook 的方式。Plus Plurk 自 0.3.1.0 版起也提供了指定是否開放讓 Plurk 自動同步臉畫的選項開關,如附圖。

訊息格式管理

和 Twitter 不同(應該吧),Plurk 本身並不是純文字型態的微網誌系統,因此 Plus Plurk 在分享訊息到 Plurk 時依訊息種類提供不同的訊息分享格式。這些設定可以在 Plus Plurk 的選項設定頁中進行修改,修改完後記得要『儲存』後相關設定才會生效。至於那些變數所對應的資料項目可透過點選 符號查閱之。
  • 戳記:在 Facebook 上我們可以看到每一筆訊息的來源為何,但是 Plurk 上卻沒有這方面的設定,所以格揆很堅持的希望在 Plurk 上能一眼的看出來這筆噗文的來源為何。它的預設值為『[fr. G+]』,但因為會佔用到噗浪內文的空間所以格揆已自行改成『[G+]』,您也可以直接設為空白。
  • 訊息 / 純文字分享:如果某筆訊息沒有包含文章連結、影像連結、或圖片連結時,視為單純的訊息分享。此時能使用的變數只有代表訊息的 ${MESSAGE} 及戳記 ${STAMP} 兩種。
  • 心得分享:為預設的分享模式,一份完整的心得分享中會包含個人的心得、感想(${MESSAGE})、文章連結(${LINK})、文章標題(${TITLE})、以及文章圖片(${PICTURE})。
  • 內嵌文章分享:針對 Plurk 能自動讀取特定網站資訊所採取的對應格式,只需文章連結(${LINK})即可由 Plurk 自動帶出連結網址標題及第一張圖片。
  • 文章分享:少了個人心得、感想(${MESSAGE})的訊息分享屬之。
  • 影片分享:目前以連結 ${LINK} 為 Youtube 或 Vimeo 的網址時視為影片分享,Google Plus 在捉取影片資訊時會提供影像連結(${LINK})及影像擷圖(${PICTURE})兩種資訊,由於 Plurk 也會自行捉取影像內的資訊,故通常不會使用到影像擷圖(${PICTURE})這個變數。
  • 圖片分享:當訊息中不含文章連結(${LINK})及文章標題(${TITLE})時即屬圖片分享。您可自行決定圖片要放前面還是放後面。
另外『${DESCRIPTION}』這個變數主要是指一篇文章或影片的內容描述,但因為它本身經常超出 Plurk 內文的上限,所以不建議各位使用。
0.3.3.2 新增功能
自 2011-08-23 起 Plurk 支援訊息斷行顯示,因此在格式設定上也新增了斷行的符號『|』,如上圖中的『訊息分享』即使用了這個斷行符號,斷行的輸入範例如下圖:



需要特別注意的是 Plurk 官方允許的斷行行數是 4 行,如果在格式設定中使用了斷行符號『|』,那麼實際能輸入的訊息行數就只剩下 3 行,下圖即為超過上限行數時的檢查結果,出現第 5 行的原因就是因為 | 多產生了一行戳記(${STAMP})列所導致。。

多段式噗文

因應 Plurk 單則訊息 140 個字的限制,Plus Plurk 支援將訊息分成數段噗在同一筆噗浪主文下成為回噗。但這並不是自動分段,Plus Plurk 的分段依據是透過使用者預先安排的。
Plus Plurk 在處理 ${MESSAGE} 時會針對連續兩個 ENTER 鍵進行訊息切割,訊息切割之後再依序將訊息內容送往 Plurk 河道,這個發送的時間間隔是每秒一筆,以下介紹的兩種應用方式,它們之間的差異只在於有沒有先空個兩行再輸入個人的心得或意見而以。



訊息長度檢測

有時候在下筆如神助、文思如泉湧時的摸門特是很難有心思力氣去一個個數每一段落各有多少字。每次數的結果都不一樣也就罷了,就怕是還沒數完前就讓原本澎湃的思緒化為枯竭的溝流,這樣怎麼有資格當文青呢?
沒關係,Plus Plurk 可以透過某種不明確不科學沒有保證的計算公式提前告知這一篇文章中最長的那一段總共有幾個字,如附圖。特別注意的是這裡的第一段指的是文章的連結、標題、文章內附圖的連結等等的綜合計算結果,並不是心得部份的文字字數。

另外這個燈泡的顏色會隨著文字長度是否超過 140 字上限或是 Plurk 斷行上限而變色,綠色(通常)表示可安心噗文,紅色(幾乎確定)表示有某一段訊息過長或行數過多請予修正。特別注意的是這個檢查結果並不會阻止『分享』鈕的功能,而 Plus Plurk 在收到 Plurk 拒絕噗文的回覆時則會停止後續訊息的發送以便有辦法一行行手動將訊息補進河道內。

常見問題與說明

  1. 問:為什麼在 Google Plus 上明明只是換行,但在 Plurk 上卻成多段式噗文呢?
    這通常是發生在訊息內容是從剪貼簿貼到 Google Plus,Google Plus 雖然顯示上看起來像換行,但實際上捉出來的訊息卻是每行一段,故轉送到 Plurk 時就變成多段式噗文了。

成果示範

在本文剛撰寫時格揆提過當時的卡馬值一度落到 97.y ,經過本套件的協助後在三週內竟然已提升到 99.81,您看看,這套件是不是真的很有用?廢話!老是把 Google+ 上的資料倒進 Plurk 當然會提高卡馬值啊,而且三週才提升 2 似乎有點...

多語系支援

目前並未支援其他語系,非常歡迎有意願者協助翻譯!

感謝

改版記錄

2010年1月15日

把 SFTP 關起來 (CHROOTED)

前言

為了提供少量的檔案共享但又不願意特地去設定 FTP 服務的話,通常第一個想到的會是附屬在 SSH 服務下的 SFTP 傳輸模式,事實上 SFTP 這個服務雖然因為加密的關係會導致傳輸時間略長,但卻一直是格揆我作為檔案傳輸的唯一方式。但這方式雖方便卻有個大問題:登入的使用者可以看到所有的檔案目錄甚至直接下載檔案內容。這在多人使用的環境下顯然會有資安上面的困擾,有沒有辦法把 SFTP 服務關在某個指定的目錄下呢?

格揆經由 Google 大神的協助並多方測試後終於實作出可行方案,就... 再貢獻回給大神吧... XD

設定步驟

※ 本文以 OpenSSH 5.2_p1-r3 為設定環境!

  1. 選定封鎖目錄:如果對像是單一個人時即為該用戶登入 SFTP 時的根目錄;如果對像是一個群組時則該目錄為這群使用者目錄的根目錄。
  2. 在 /etc/ssh/sshd_config 中啟用 sftp subsystem:特別注意要啟用的是 internal-sftp 這個 Subsystem。
    # override default of no subsystems
    #Subsystem      sftp    /usr/lib64/misc/sftp-server               # 系統中原來的設定
    Subsystem       sftp    internal-sftp                                       # 改用 internal-sftp 
    
  3. 一樣在 sshd_config 中指定需要被關起來的使用者資訊及要關到什麼地方去,請在前述修改處之後加上以下設定:
    Match User ada                                 # 要被關起來的使用者,如果是群組的話則將 User 改為 Group 再接群組名稱
                                                              # 例如: Match Group rootedSFTP
    ChrootDirectory /chroot                    # 要關在什麼地方,如果對像是個群組且群組內的每個人有個別目錄設定時,
                                                              # 可以加上 PATTERNS (man ssh_config) 做區隔,如 /chroot/%u ,
                                                              # /chroot 為這群使用者目錄的根目錄。
    ForceCommand internal-sftp            # 一樣要使用 internal-sftp 這個 Subsystem
    
  4. 設定 Chroot 目錄權限:錯誤的目錄權限設定會導致在 log 中出現 "fatal: bad ownership or modes for chroot directory XXXXXX" 的訊息。根據 openssh 5.1 chrootdirectory permissions issue 這篇文章的資訊顯示,目錄的權限設定有兩個要點:
    • 由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是 root
    • 由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入權限
  5. 重新載入 sshd 後即可透過 FileZilla 等支援 SFTP 的軟體測試有無被關起來了...

2009年10月12日

Tomcat: Cannot create PoolableConnectionFactory

因為在修改某系統的部署方式而遇到這個問題,特此記之!

錯誤訊息:
12:15:11,605 ERROR jsp:228 - Cannot create PoolableConnectionFactory (IO 異常: The Network Adapter could not establish the connection)
據說這個例外的成因還不少,但在使用 Oracle 資料庫的情形時有個比較特殊的原因:連線設定參數與資料庫設定不符。最直接的驗證方式是將資料庫連線設定改用 tnsnames.ora 檔案內的寫法取代即可。Ex:
<Resource 
    name="jdbc/oracle" auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.OracleDriver"
    url="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP))(HOST=192.168.1.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MY_DB)))"
    username="賣哀滴"
    password="賣怕死我"
    maxActive="8"
    maxIdle="4"
    maxWait="30"/>

2009年9月7日

安裝 Google Data for Java 套件庫給 Maven 使用

基本上 Google 並未替 Google Data API 建立 Maven 檔案庫,而目前 Google 到的 Maven Repository 又早已過期,所以最終只能自行下載原始檔案後再安裝到本機上的 Maven Repository 中。

Windows 下可以參考 Adding Googles GData Java API to your maven repository,如果是 Linux 的話則可以使用以下的 bash 命令稿:
#!/bin/bash

MVN=$(which mvn)

VER=1.38

for FILE in $(ls *.jar);
do
  T=$(echo $FILE | sed -e 's/\.jar$//')
  V=$(echo $T | gawk -F- '{ print $NF }')
  F=$(echo $T | sed -e 's/'$V'//' | sed -e 's/-$//')
 
  $MVN install:install-file -DgroupId=com.google.gdata \
        -DartifactId=${F} -Dversion=${V}-${VER} -Dfile=${FILE} -Dpackaging=jar \
        -DgeneratePom=true
done;

※註:我使用的版本是 1.38 版,所以設定上是會將 Google 提供的 .jar 檔改名為 -1.0-1.38.jar 之類的版號以方便 Maven 進行版號管理。

2007年6月21日

在 Linux 上觀看數位電視

因為在 XDite 看到 數位電視棒又來了,大家快搶 XD 這則訊息,所以在 博客來 訂了一本用不到的 Windows Vista升級調校高手制霸技 一書,以及所附贈的數位電視棒乙隻。

好了,現在的問題變成如何在 Linux 上看數位電視了。

驅動數位電視棒

其實 Linux 核心已經支援了不少的數位電視控制晶片,所以最簡單的作法就是將這些支援全部編成模組型式。方式有兩種:

  1. 透過 linuxtv.org 上的 DVB 工具,可以參考 Ubuntu Wiki 的 用Linux看數位電視
  2. 直接由 Kernel 重新編譯:也就是勾選 Device Drivers --> Multimedia devices --> Digital Video Broadcasting Devices --> [*] DVB For Linux 及所屬的模組後(當然 Video for Linux 支援也要開啟才行)重新 make; make modules_install 即可。
完成驅動程式準備後即可將電視棒插入 USB 槽中,只要 kernel 有支援的話應該就會出現類似以下的訊息,告知系統找到了什麼裝置(如 MSI Digivox Mini SL),還少了什麼東西(did not found the firmware file ):
usb 2-1: new high speed USB device using ehci_hcd and address 25 usb 2-1: configuration #1 chosen from 1 choice dvb-usb: found a 'MSI Digivox Mini SL' in cold state, will try to load a firmware dvb-usb: did not find the firmware file. ( dvb-usb-dibusb-6.0.0.8.fw ) Please see linux/Documentation/dvb/ for more details on firmware-problems. (-2) dvb_usb_dibusb_mc: probe of 2-1:1.0 failed with error -2 usbcore: registered new interface driver dvb_usb_dibusb_mc usb 2-1: USB disconnect, address 25

安裝 Firmware

Firmware 的問題比較簡單,因為第一次插入電視棒時系統便會主動告知,如上例的 dvb-usb-dibusb-6.0.0.8.fw 這個檔案,然後到 LinuxTV 的 Firmware 下載區 找到對應的檔案後下載並存放到 /lib/firmware 目錄下(可能必須自行建立)即可。不過如果系統無法明白告知所需的 Firmware 檔名的話只能請您結哀順便,等 kernel 改版後再試試看是否支援。

另外 Gentoo 的 portage 中已經提供了一整包 firmware 檔,安裝方式如下例:

# 若知道晶片組時可以指定 DVB_CARDS 變數限制安裝的 firmware,不然會全部安裝的。
$ emerge -v linuxtv-dvb-firmware

完成 firemware 檔案設定後即可重新拔插電視棒乙次,這次系統會自動載入 firmware 並回應初始化作業完成的訊息,如下例:

usb 2-1: new high speed USB device using ehci_hcd and address 27 usb 2-1: configuration #1 chosen from 1 choice dvb-usb: found a 'MSI Digivox Mini SL' in warm state. **WARNING** I2C adapter driver [MSI Digivox Mini SL] forgot to specify physical device; fix it! dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. DVB: registering new adapter (MSI Digivox Mini SL). **WARNING** I2C adapter driver [DiBX000 tuner I2C bus] forgot to specify physical device; fix it! DVB: registering frontend 0 (DiBcom 3000MC/P)… MT2060: successfully identified (IF1 = 1220) input: IR-receiver inside an USB DVB receiver as /class/input/input7 dvb-usb: schedule remote query interval to 150 msecs. dvb-usb: MSI Digivox Mini SL successfully initialized and connected.

設定頻道資訊

因為各地頻率、信號強弱不同的關係,必須先進行頻道掃描後才能提供播放工具訊號源的參考資訊。頻道掃瞄工具由 Linux TV 提供,全名為 linuxtv-dvb-apps 。Gentoo 使用者可以直接 emerge linuxtv-dvb-apps 即可完成安裝程序。

完成頻道掃瞄工具安裝之後即可進行頻道掃描,主要的目的是產生 channels.conf 以提供各類播放工具參考使用。除了 用Linux看數位電視 中的 TW.TXT 頻率參考表外,其實 Linux Kernel 也內建了一個頻率參考表 tw-Taipei(兩者不太一樣)可供參考,可以分別試試看是否可正常使用。

建立頻道列表必須透過頻率參考表進行,在 Gentoo 下(若非使用 Gentoo portage 安裝相關套件者,請自行參考安裝說明內之執行檔名及路徑)可以透過 dvbscan 指令進行,如下例(使用系統內附之頻率參考表,因為我無法使用 tw.txt 內的設定):

$ dvbscan /usr/share/dvb/scan/dvb-t/tw-Taipei > ~/.mplayer/channels.conf
※在掃描過程中若可以看的到頻道名稱,那應該有機會可以進行觀看。

播放節目

若使用 mplayer 的話,只要指定訊號來源為 dvb 即可,如下例:

$ mplayer dvb://

不過因為訊號不佳的關係,目前還沒有機會看到節目內容。

其他參考資訊:

  1. VDR Wiki: Gentoo DVB Driver
※ 2007-06-12 補充
  1. 做了一個小的,短距離的自製天線,規格沒有很正確,長度也不足以拉到窗戶邊,不過卻可以掃描到 TTV 的五個頻道。可惜掃的到並沒有用,在播放時除了要等很久之外還只能顯示出一大堆的雜亂區塊,以及搭配的噪音。
  2. 改善規劃:
    1. 找/買條更長的 Cable 線,讓天線有機會靠近窗戶上。
    2. 製作一正確規格之天線,甚至考慮做成這樣
※ 2007-06-22 補充
  1. 新的自製天線果然發揮了效果,果然天線還是要靠近窗邊才有用。不過這個天線蠻粗糙的,所以只能收到 12 個頻道。
  2. 播放實例 - 這是使用 MPlayer 進行播放,可以用 h 及 k 鍵換台:
    播放效果
  3. 原來交通台晚上沒事幹只好放音樂啊!

2006年1月13日

PCHOME 的垃圾電子報伺服器清單

老實說,我看到這串列表時只有一種反應:直接擋下 PCHOME 這一整段的伺服器 IP 吧!而且馬上就加上去!

PCHOME 的垃圾電子報伺服器清單

2005年2月16日

/etc/xinetd.conf

/etc/xinetd.conf

xinet 預設安裝時,預設僅限於本機使用。要取消此限制請編輯 /etc/xinetd.conf 將 only_from = localhost 一行予以註解掉。

/etc/xinetd.conf
# Sample configuration file for xinetd

defaults { # only_from = localhost instances = 60 log_type = SYSLOG authpriv info log_on_success = HOST PID log_on_failure = HOST cps = 25 30 }

includedir /etc/xinetd.d

另外,/etc/xinetd.d 中有許多可以透過 xinetd 管制的服務,將 disable = yes 改為 disable = no 即可!

2005年2月15日

vixie-crontab 權限設定

vixie-crontab 權限設定

vixie-crontab 預設安裝下是僅限 root 使用的。要開放給特定使用者能用必須確定以下幾件事:

  1. 該使用者必須屬於 cron 群組。
  2. 確定 /etc/cron.allow 及 /etc/cron.deny 檔內容是否限制了該使用者的存取權。
  3. 採正向表列的話要在 /etc/cron.allow 中設定。
  4. 採負向表列的話則在 /etc/cron.deny 中設定,而且這個檔案一定要存在。
以上,被搞了兩天的 Ada 留!

2005年1月17日

/etc/conf.d/iptables

iptables 套件設定

# Location in which iptables initscript will save set rules on
# service shutdown
IPTABLES_SAVE="/var/lib/iptables/rules-save"

#Options to pass to iptables-save and iptables-restore SAVE_RESTORE_OPTIONS="-c"

#Save state on stopping iptables SAVE_ON_STOP="no"

# Enabled Forward for ip4 ENABLE_FORWARDING_IPv4="yes"

iptables 規則設定

iptables-save
# Generated by iptables-save v1.2.3 on Fri Mar 22 00:00:07 2002
*filter
:INPUT ACCEPT [16:1638]
:FORWARD ACCEPT [109916:83620350]
:OUTPUT ACCEPT [2156:327352]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.8/32 -p tcp -m tcp -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.8/32 -p udp -m udp -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.9/32 -p tcp -m tcp -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.9/32 -p udp -m udp -j ACCEPT
-A INPUT -i eth0 -s 69.6.56.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 61.145.71.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 69.6.57.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 69.6.54.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 82.32.217.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 66.205.222.0/24 -j DROP
-A INPUT -i eth1 -d 207.244.119.109/32 -j DROP
-A INPUT -i eth0 -s 203.69.75.163/32 -j DROP
-A INPUT -i eth0 -s 218.94.25.130/32 -j DROP
-A INPUT -i eth0 -s 61.30.121.0/24 -j DROP
-A INPUT -i eth0 -s 61.222.32.0/24 -j DROP
-A INPUT -i eth0 -s 61.66.7.0/24 -j DROP
-A INPUT -i eth0 -s 210.202.68.0/24 -j DROP
-A INPUT -i eth0 -s 167.206.5.0/24 -j DROP
-A INPUT -i eth0 -s 218.20.0.0/16 -j DROP
-A INPUT -i eth0 -s 218.19.0.0/16 -j DROP
-A INPUT -i eth0 -s 217.97.137.0/24 -j DROP
-A INPUT -i eth0 -s 64.49.223.0/24 -j DROP
-A INPUT -i eth0 -s 32.103.231.0/24 -j DROP
-A INPUT -i eth0 -s 63.147.168.0/24 -j DROP
-A INPUT -i eth0 -s 207.248.48.0/24 -j DROP
-A INPUT -i eth0 -s 61.55.0.0/24 -j DROP
-A INPUT -i eth0 -s 32.103.25.0/24 -j DROP
-A INPUT -i eth0 -s 218.49.222.0/24 -j DROP
-A INPUT -i eth0 -s 32.103.225.0/24 -j DROP
-A INPUT -i eth0 -s 200.63.165.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 12.65.168.0/24 -p tcp -m tcp -j DROP 
-A INPUT -i eth0 -s 61.220.184.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 32.103.25.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 202.155.116.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 210.85.15.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.222.106.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 218.32.228.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 203.43.84.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.216.187.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 202.71.144.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 195.232.61.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.92.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.43.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.97.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.53.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.40.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.144.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.146.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.181.0.0/16 -p tcp -m tcp -j DROP
#-A INPUT -i eth0 -s 220.130.11.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.222.179.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 24.123.204.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 203.157.41.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.222.145.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 211.78.134.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.59.38.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 218.224.231.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 142.227.9.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.33.40.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 210.212.255.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 213.219.70.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 202.95.99.0/24 -p tcp -m tcp -j DROP
#-A INPUT -m string --string=root.exe -j DROP
#-A INPUT -m string --string=cmd.exe -j DROP
-A INPUT -s 192.168.0.0/255.255.255.0 -i eth1 -j ACCEPT 
#-A INPUT -i eth0 -p tcp -m tcp --dport 7869 -j ACCEPT
#-A INPUT -i eth0 -p icmp --icmp-type ! echo-request -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --dport 20 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 23 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 110 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 113 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 137 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 137 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 138 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 138 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 139 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 139 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 1521 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 2401 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p udp -m udp --dport 2401 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3000 -j ACCEPT 
#-A INPUT -i eth0 -p tcp -m tcp --dport 5432 -j DROP
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 5801 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 5901 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 6881 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 7100 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 10000 -j ACCEPT
#-A INPUT -i eth1 -p tcp -m tcp --dport 10025 -j ACCEPT 
#-A INPUT -i eth0 -p tcp -m tcp --dport 21000 -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -i eth0 -m state --state INVALID,NEW -j DROP 
-A INPUT -i eth1 -p tcp -m tcp -j ACCEPT
-A INPUT -i eth1 -p udp -m udp -j ACCEPT
#-A INPUT -d 220.130.11.8 -p tcp -m tcp --dport 5190 -j ACCEPT
#-A INPUT -i eth3 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -p udp -m udp -j DROP
COMMIT
# Completed on Fri Mar 22 00:00:07 2002
# Generated by iptables-save v1.2.3 on Fri Mar 22 00:00:07 2002
*nat
:PREROUTING ACCEPT [1452:106931]
:POSTROUTING ACCEPT [227:11773]
:OUTPUT ACCEPT 2269
# -A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 21000 -j DNAT --to-destination 192.168.0.2:21 
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 80 -j DNAT --to-destination 61.222.134.172:8080
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 80 -i eth1 -j DNAT --to-destination 192.168.0.246:3389
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.251:3389 
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.251:80 
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.252:8080
# -A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 20 -j DNAT --to-destination 192.168.0.2:20
#-A PREROUTING -p udp -m udp --dport 17500 -j DNAT --to-destination 192.168.0.34:17500
#-A PREROUTING -p udp -m udp --dport 17501 -j DNAT --to-destination 192.168.0.34:17501
#-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.253:80
-A PREROUTING -p tcp -m tcp --dport 113 -j ACCEPT
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j MASQUERADE 
COMMIT
# Completed on Fri Mar 22 00:00:07 2002

/etc/ssh/sshd.conf

視需要修改以下設定:

# 變更預設 port 
Port 23
# 僅啟用 SSH v2 模式
Protocol 2

# 可以考慮更詳細的 Log 內容 LogLevel INFO

# 限制登入人員帳號 AllowUsers ada # 等待登入時限 - 1 分鐘 LoginGraceTime 1m # 是否接受 root 登入 - 不准! PermitRootLogin no

# To disable tunneled clear text passwords, change to no here! PasswordAuthentication no PermitEmptyPasswords no

# 若要打開 X11 Forwarding 的話要設定以下選項 AllowTcpForwarding yes GatewayPorts yes X11Forwarding yes

/etc/sysctl.conf

kernel 有許多參數可以透過 sysctl 進行設定!請 emerge sys-apps/procps 取得此輔助工具!

系統在初始化時會透過 sysctl 去載入 sysctl.conf 中的設定,因此任何 sysctl 可以存取的設定都可以寫在 sysctl.conf 中,如下例:

# /etc/sysctl.conf:
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/sysctl.conf,v 1.3 2002/11/1819:39:22 azarah Exp $

# Enable packet forwarding net.ipv4.ip_forward = 1 # Disables IP dynaddr #net.ipv4.ip_dynaddr = 0 # Disable ECN net.ipv4.tcp_ecn = 0 # Enables source route verification #net.ipv4.conf.default.rp_filter = 1 # Disables the magic-sysrq key #kernel.sysrq = 0

有多少參數可以設定?請執行以下指令:

root@server # sysctl -a

2005年1月16日

/etc/dhcp/dhcpd.conf

option domain-name "domain.com";
option domain-name-servers 168.95.192.1, 139.175.10.20, 168.95.1.1;

default-lease-time 600; max-lease-time 7200;

ddns-update-style ad-hoc;

subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.32 192.168.0.254; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name-servers 168.95.192.1, 139.175.10.20, 168.95.1.1; }

/etc/conf.d/dhcp

# Copyright 1999-2004 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /home/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcp.conf,v 1.4 2004/03//06 03:30:53 vapier Exp $

# Configure which interface or interfaces to for dhcp to listen on # list all interfaces space separated. IFACE="eth1"

# Insert any other options needed DHCPD_OPTS=""

# If you wish to run dhcp in a chroot, run: # ebuild /var/db/pkg/net-misc/<dhcp version>/<dhcp-version>.ebuild config # and un-comment the following line. # You can specify a different chroot directory but MAKE SURE it's empty. #CHROOT="/chroot/dhcp"

2005年1月14日

/etc/smb/smb/conf

Samba 3 的設定重點:

# 配合 Windows 中文檔名,只有這個重點!

[global]
  unix charset = big5
  dos charset = big5

# 保險起見,最好設定可以連線的 ip

  hosts allow = 192.168.0.

# 帳號管理模式

  security = user
  # 記得用 smbpasswd 新增 samba 使用者帳號

# 檢查 smbpasswd 指定的儲存位置

smb passwd file = /etc/samba/private/smbpasswd

# 建立 smbpasswd 指定的儲存位置

root@server #mkdir /etc/samba/private
root@server #touch /smbpasswd

系統安全檢查

以下是個人用在 Server 上進行安全性檢查的 Script, 放在 /etc/cron.daily 中每日執行乙次!

security.check.sh
#!/bin/bash
CHECKDAY=$(date +%Y-%m-%d)
LOGDAY=$(date -d"1 day ago" +%Y%m%d)
[email protected]

# 檢查 Gentoo 安全公告 # 做此項檢查必須安裝 app-portage/gentoolkit /usr/bin/glsa-check -l | grep "[N]" > /tmp/security.check

if [ -s /tmp/security.check ] then /bin/mailx -s "$CHECKDAY GLSA Security Check List" $EMAIL < /tmp/security.check fi

# 檢查 rootkit 木馬 /usr/sbin/chkrootkit | grep -v "not" | grep -v "packlist" > /tmp/chkrootkit.log /bin/mailx -s "$CHECKDAY Rootkit Check List" $EMAIL < /tmp/chkrootkit.log

# 檢查檔案特殊屬性 /bin/lsattr /sbin | /bin/grep -v ^------------- > /tmp/lsattr.lst /bin/lsattr /bin | /bin/grep -v ^------------- >> /tmp/lsattr.lst /bin/lsattr /usr/bin | /bin/grep -v ^------------- >> /tmp/lsattr.lst /bin/lsattr /usr/sbin | /bin/grep -v ^------------- >> /tmp/lsattr.lst

/bin/mailx -s "$CHECKDAY lsattr check list" $EMAIL < /tmp/lsattr.lst

# 檢查 sshd 登入狀態 及 /var/log/messes 中的錯誤記錄 /bin/grep "failure" /var/log/sshd/$LOGDAY.log > /tmp/sshd.check /bin/grep "failure" /var/log/messages/$LOGDAY.log >> /tmp/sshd.check /bin/mailx -s "$CHECKDAY sshd login status" $EMAIL < /tmp/sshd.check

另外 gentoo 也包了 rkhunter 檢查工具,請先 emerge rkhunter 後,修改 /etc/cron.daily/rkhunter 內容:

/etc/cron.daily/rkhunter
########################## Begin Configuration ###############################

# Default options - more options may be added depending on the # configuration variables you set below RKHUNTER_OPTS="-c --cronjob --skip-keypress"

# Set this to 'yes' to enable ; this script does nothing otherwise ENABLE=yes

# Automatically update rkhunter's dat files prior to running? UPDATE=yes

# Set this to 'yes' if you wish the output to be mailed to you SEND_EMAIL=yes

# NOTE: the following EMAIL_* variables are only relevant if you set the # SEND_EMAIL variable to 'yes' EMAIL_SUBJECT="${HOSTNAME}: rkhunter output" EMAIL_RECIPIENT=root EMAIL_CMD="|mail -s "${EMAIL_SUBJECT}" ${EMAIL_RECIPIENT}"

# Log rkhunter output? LOG=yes

# The default log location is /var/log/rkhunter.log. Set this variable if # you'd like to use an alternate location. #LOGFILE=""

# By default, the log file created by rkhunter is world-readable (0644). If # you'd like to modify the permissions afterwards, set this variable. The # value of this variable, must be a valid chmod argument such as '0600' or # 'u+rw,go-rwx'. See the chmod(1) manual page for more information. LOGFILE_PERMS="0600"

# By default, rkhunter overwrites the previous log. Set this variable # to 'yes' if you'd like the log output appended to the logfile, instead # of overwriting it. SAVE_OLD_LOGS=no

# Set to 1 to recieve only warnings & errors # Set to 2 to recieve ALL rkhunter output # Set to 3 to recieve rkhunter report VERBOSITY=1

########################### End Configuration ################################

2005年1月13日

/etc/syslog-ng/syslog-ng.conf

特別注意:

  1. syslog-ng 預設是將訊息全部寫入 /var/log/messages 這個檔案,以下的設定會嘗試建立一個 /var/log/messages/ 的目錄,因此 /var/log/messages 這個檔案要先刪除,否則 syslog-ng 就不會啟動!
  2. 以下的設定會在 /var/log 下建立多個目錄,並以 $YEAR$MONTH$DAY.log 為檔案建立每一日的記錄檔,因此要記得整理、刪除不要的檔案!
# $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo,v 1.4 2004/07/18 02:25:02 dragonheart Exp $
#
# Syslog-ng default configuration file for Gentoo Linux
# contributed by Michael Sterrett

options { long_hostnames(off); sync(0);

# The default action of syslog-ng 1.6.0 is to log a STATS line # to the file every 10 minutes. That's pretty ugly after a while. # Change it to every 12 hours so you get a nice daily update of # how many messages syslog-ng missed (0). stats(43200); create_dirs(yes); };

source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };

destination messages { file( "/var/log/messages/$YEAR$MONTH$DAY.log" ); };

# By default messages are logged to tty12… destination console_all { file( "/dev/tty12" ); }; # ...if you intend to use /dev/console for programs like xconsole # you can comment out the destination line above that references /dev/tty12 # and uncomment the line below. #destination console_all { file("/dev/console"); };

#log { source(src); destination(messages); }; #log { source(src); destination(console_all); };

#postfix log filter f_postfix { program("postfix"); }; destination d_mail { file( "/var/log/mail/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_postfix); destination(d_mail); };

#driver log filter f_driver { program("drivers/usb/input/"); }; destination d_driver { file( "/var/log/drivers/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_driver); destination(d_driver); };

#POP3 log filter f_pop { program("pop3"); }; destination d_pop { file( "/var/log/pop/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_pop); destination(d_pop); };

#cron log filter f_cron { program("CRON"); }; destination d_cron { file( "/var/log/cron/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_cron); destination(d_cron); };

filter f_cron_daemon { program( "cron" ); }; destination d_cron_daemon { file( "/var/log/cron/daemon-$YEAR$MONTH$DAY.log" ); }; log { source( src ); filter( f_cron_daemon ); destination( d_cron_daemon ); };

#sshd log filter f_sshd { program("sshd"); }; destination d_sshd { file( "/var/log/sshd/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_sshd); destination(d_sshd); };

#spam log filter f_spam { program("spam"); }; destination d_spam { file( "/var/log/spam/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_spam); destination(d_spam); };

#amavisd log filter f_amavisd { program("amavis"); }; destination d_amavisd { file( "/var/log/amavisd/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_amavisd); destination(d_amavisd); };

#dhcpd log filter f_dhcpd { program("dhcpd"); }; destination d_dhcpd { file( "/var/log/dhcpd/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_dhcpd); destination(d_dhcpd); };

#webmin log filter f_webmin { program( "webmin" ); }; destination d_webmin { file( "/var/log/webmin/$YEAR$MONTH$DAY.log" ); }; log { source( src); filter( f_webmin ); destination( d_webmin ); };

#all other log filter f_other { not match( 'ctrl urb status' ); }; log { source(src); filter( f_other ); destination(messages); flags(fallback); };

配合前述的設定檔,每月進行一次 log 檔的整理、壓縮動作。

#!/bin/bash

LOG_DIR="amavisd cron dhcpd mail messages spam sshd webmin" LOG_HOME="/var/log" ARCHIVE_MONTH=$(date -d"1 month ago" +%Y%m) LOG_FILE="/tmp/logArchive.log"

for DIR in $LOG_DIR; do cd $LOG_HOME/$DIR echo "Creating $DIR-$ARCHIVE_MONTH.tar.bz2" >> $LOG_FILE echo "---------------------------------------------------------------" >> $LOG_FILE tar -cjvvf $DIR-$ARCHIVE_MONTH.tar.bz2 $ARCHIVE_MONTH*.log >> $LOG_FILE echo "---------------------------------------------------------------" >> $LOG_FILE echo "Removing $DIR $ARCHIVE_MONTH log files" >> $LOG_FILE rm $ARCHIVE_MONTH*.log echo "===============================================================" >> $LOG_FILE echo >> $LOG_FILE done;

/bin/mailx -s "$ARCHIVE_MONTH archived log files" <系統管理員信箱> < $LOG_FILE

2004年6月29日

Jabber 伺服器設定

設定 Jabberd 伺服器

  • 安裝 jabberd 1.4.3 版
emerge -v jabberd
  • 編輯 /etc/jabber/multiple.xml,將
<host>
  <jabberd:cmdline flag="h">localhost</jabberd:cmdline>
</host>
改為
<host>
  <jabberd:cmdline flag="h">Jabber Server 的 FQDN</jabberd:cmdline>
</host>
  • 打開接受使用者註冊的設定
<!-- commented out so no one can register!!! -->
  <register notify="yes">
    <instructions>
      Choose a username and password to register with this server.
    </instructions>
    <name/>
    <email/>
  </register>
  • 設定 jabberd 載入註冊支援模組
<!-- commented out so no one can register!!! -->
  <mod_register>/usr/lib/jabberd/jsm.so</mod_register>
  • 在 service id="c2s" 中填入欲監聽的 ip 位址,若要變更 port 號也在此修改。若要啟用 ssl 連線的話,則開放 <ssl...></ssl> 設定
<service id="c2s">
    <!-- .... -->
      <!--
      Use these to listen on particular addresses and/or ports.
      Example: <ip port="5222">127.0.0.1</ip>
      Default is to listen on port 5222 on every interface.
      Remove the <ip/> section to disable non-ssl client connections.
      <ip port="5222"/>
      -->
      <ip port="5190">xx.xx.xx.xx</ip>

<!-- The <ssl/> tag acts pretty much like the <ip/> tag, except it defines that SSL is to be used on the ports and IP addresses specified. You must specify an IP address here, or the connections will fail. <ssl port='5223'>127.0.0.1</ssl> <ssl port='5224'>192.168.1.100</ssl> --> </pthcsock> </service>

測試 jabberd 是否正常

  • 執行以下命令啟動 jabber server
jabberd -c /etc/jabber/multiple.xml -D
看到這行訊息表示 jabberd 啟動了
[notice] (-internal): initializing server
  • 使用 telnet 登入 jabber server
telnet <Jabber Server 的 FQDN> 5190 # 此為於 service is='c2s' 中指定的 port number
應該要回應以下訊息,如未回應請檢查 jabber server 是否正確啟動
Trying xx.xx.xx.xx
Connected to <Jabber Server 的 FQDN>
Escape character is '^]'.
  • 送出以下命令給 Jabber Server
<stream:stream
  to='Jabber Server 的 FQDN'
  xmlns='jabber:client'
  xmlns:stream='http://etherx.jabber.org/streams'>
  • Server 回應下列訊息表示接受連線
<stream:stream xmlns:stream='http://etherx.jabber.org/streams' 
                         id='40E04E48' xmlns='jabber:client' 
                       from='jabber.jspbb.net'>
  • 送出要求註冊的訊息
<iq id='reg1' type='get'>
  <query xmlns='jabber:iq:register'/>
</iq>
  • 若回應如下訊息即表示設定完成,可以開始安裝其他 IM 的轉接器了
<iq id='reg1' type='result'>
  <query xmlns='jabber:iq:register'><password/><password/>
        <instructions>
          Choose a username and password to register with this server.
        </instructions>
        <name/>
        <email/>
      <username/></query>
</iq>

2004年6月20日

Cygwin 中文化

目前網路上找的的 Cygwin 中文化說明對於新版的 Cygwin 似乎不甚正確,害我之前試了半天都失敗。這次在安裝 Cygwin 時,其 Cygwin DLL 的版號是 1.5.10-1 ,如果一直無法讓 Cygwin 顯示中文字的話,也許可以照以下方式試試看。

初始化 Cygwin

當第一次執行 cygwin 時,多半會出現以下的訊息要求建立使用者:

Your group is currently "mkpasswd".  This indicates that
the /etc/passwd (and possibly /etc/group) files should be rebuilt.
See the man pages for mkpasswd and mkgroup then, for example, run
mkpasswd -l [-d] > /etc/passwd
mkgroup  -l [-d] > /etc/group
Note that the -d switch is necessary for domain users.
此時使用以下指令完成使用者建置動作:
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
  • 若使用者有加入網域中,則要加上 -d 選項,如下例:
mkpasswd -l -d > /etc/passwd
mkgroup -l -d > /etc/group

完成上述指令後,請先離開 Cygwin 環境再重新進入,此時應該會看到 Cygwin 開始建立使用者的基本設定檔:

Copying skeleton files.
These files are for the user to personalise
their cygwin experience.

These will never be overwritten.

`./.bashrc' -> `/home/bill//.bashrc' `./.bash_profile' -> `/home/bill//.bash_profile' `./.inputrc' -> `/home/bill//.inputrc'

完成中文化相關設定

當完成上述設定後,Cygwin 才會建立使用者的基本設定,此時才能依照網路上所找到的方式完成 Cygwin 中文化設定。

1. 編輯 ~/.inputrc ,加入以下設定:
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

2. 編輯 ~/.bash_profile ,加入以下設定:

alias ls='ls --show-control-chars'

2004年5月19日

SNMP 服務設定

這篇是個人在 Gentoo Linux 1.4 上設定 snmp 服務的記錄。

安裝 snmp 服務套件

www snmp # emerge -pv net-snmp

These are the packages that I would merge, in order:

Calculating dependencies ...done! [ebuild N ] net-analyzer/net-snmp-5.0.9-r1 -ipv6 +ssl +tcpd 0 kB

Total size of downloads: 0 kB

www snmp # emerge -v net-snmp

透過公用程式 snmpconf 完成 snmpd.conf 設定檔設定作業

www snmp # snmpconf

I can create the following types of configuration files for you. Select the file type you wish to create: (you can create more than one as you run this program)

1: snmpd.conf 2: snmp.conf 3: snmptrapd.conf

Other options: quit

Select File: 1

逐一設定 snmpd.conf 各內容:

The configuration information which can be put into snmpd.conf is divided
into sections.  Select a configuration section for snmpd.conf
that you wish to create:

1: Access Control Setup 2: Trap Destinations 3: Monitor Various Aspects of the Running Host 4: Agent Operating Mode 5: System Information Setup 6: Extending the Agent

Other options: finished

Select section: 5

System Information Setup 內容:

Section: System Information Setup
Description:
  This section defines some of the information reported in
  the "system" mib group in the mibII tree.

Select from:

1: The [typically physical] location of the system. 2: The contact information for the administrator 3: The proper value for the sysServices object.

Other options: finished, list

Select section:

* The [typically physical] location of the system:

請填入系統所在的地理位置作為識別,一般應該會以設備名稱 + 部門、樓層等為識別字串。

Configuring: syslocation
Description:
  The [typically physical] location of the system.
    Note that setting this value here means that when trying to
    perform an snmp SET operation to the sysLocation.0 variable will make
    the agent return the "notWritable" error code.  IE, including
    this token in the snmpd.conf file will disable write access to
    the variable.
    arguments:  location_string

The location of the system: room

* The contact information for the administrator

請填入聯絡人資訊,可以輸入電話或郵件地址等。

Configuring: syscontact
Description:
  The contact information for the administrator
    Note that setting this value here means that when trying to
    perform an snmp SET operation to the sysContact.0 variable will make
    the agent return the "notWritable" error code.  IE, including
    this token in the snmpd.conf file will disable write access to
    the variable.
    arguments:  contact_string

The contact information: Ada Hsu

* The proper value for the sysServices object.

使用 0 (否) 或 1 (是) 回答相關問題,由系統算出 sysServices 的值。

Configuring: sysservices
Description:
  The proper value for the sysServices object.
    arguments:  sysservices_number

does this host offer physical services (eg, like a repeater) [answer 0 or 1]: 0 does this host offer datalink/subnetwork services (eg, like a bridge): 0 does this host offer internet services (eg, supports IP): 1 does this host offer end-to-end services (eg, supports TCP): 1 does this host offer application services (eg, supports SMTP): 1

Finished Output: sysservices 0*1 + 0*2 + 1*4 + 1*8 + 1*64

輸入 finished 後結束 System Information Setup 設定回主選單

Select section: finished

The configuration information which can be put into snmpd.conf is divided into sections. Select a configuration section for snmpd.conf that you wish to create:

1: Access Control Setup 2: Trap Destinations 3: Monitor Various Aspects of the Running Host 4: Agent Operating Mode 5: System Information Setup 6: Extending the Agent

Other options: finished

Select section: 1

進行存取控制設定 Access Control Setup

Section: Access Control Setup
Description:
  This section defines who is allowed to talk to your running
  snmp agent.

Select from:

1: a SNMPv3 read-write user 2: a SNMPv3 read-only user 3: a SNMPv1/SNMPv2c read-only access community name 4: a SNMPv1/SNMPv2c read-write access community name

Other options: finished, list

Select section:

* a SNMPv1/SNMPv2c read-only access community name

這是指定用來讀取 SNMP 訊息用的群組帳號名稱,大部份的 SNMP 代理者多以 public 為其預設的名稱,但建議要另行設定較好。設定完畢後請輸入 finished 回到主選單中。

Configuring: rocommunity
Description:
  a SNMPv1/SNMPv2c read-only access community name
    arguments:  community [default|hostname|network/bits] [oid]

The community name to add read-only access for: snmpmgr The hostname or network address to accept this community name from [RETURN for all]: The OID that this community should be restricted to [RETURN for no-restriction]:

Finished Output: rocommunity snmpmgr

啟動 snmpd 服務

當完成上述設定後即可在主選單中輸入 finished 結束 snmpd.conf 設定作業,最後輸入 quit 離開 snmpconf 設定工具。

I can create the following types of configuration files for you.
Select the file type you wish to create:
(you can create more than one as you run this program)

1: snmpd.conf 2: snmp.conf 3: snmptrapd.conf

Other options: quit

Select File: quit

The following files were created:

snmpd.conf

These files should be moved to /usr/share/snmp/ if you want them used by everyone on the system. In the future, if you add the -i option to the command line I'll copy them there automatically for you.

Or, if you want them for your personal use only, copy them to /root/.snmp . In the future, if you add the -p option to the command line I'll copy them there automatically for you.

上述的說明似乎有點不正確,snmpd.conf 在 Gentoo 中應該要放入 /etc/snmp/ 下,否則 snmpd 是無法正確啟動的。當將 snmpd.conf 複製到 /etc/snmp/ 下後即可啟動 snmpd 服務。

www root # cp snmpd.conf /etc/snmp/
www root # /etc/init.d/snmpd start
 * Starting net-snmpd…                                                  [ ok ]
www root # ps -ef | grep snmp
root     18048     1  0 15:12 ?        00:00:00 /usr/sbin/snmpd -P /var/run/snmpd.pid -a -s -l /dev/null
root     18053 10326  0 15:13 pts/15   00:00:00 grep snmp

使用 snmpwalk 對本機進行訪談,snmpwalk 中要指定在 Access Control Setup 中所設定的帳號名稱,如範例。若 snmpd.conf 設定正確應可看到畫面輸出一長串好幾十頁的訊息。

www root # snmpwalk localhost -c snmpmgr -v 1

若想查看先前在 System Information Setup 所做的設定,可以使用以下方式達成。有關 1.3.6.1.2.1.1 所代表的意義表示為該 SNMP 代理者所記錄的系統資訊,詳細請參閱 SNMP 中有關 OID 的說明。

www root # snmpwalk localhost -c snmpmgr -v 1 1.3.6.1.2.1.1

你可能會發現主機名稱不是完整的領域名稱(FQDN),這可以透過修改 /etc/snmp/snmpd.conf 重新設定,只要加上 sysname 參數即可。但是請注意: 當使用 snmpconf 重新設定 snmpd.conf 內容時,sysname 的設定可能會遺失。

sysname "www.t-times.net"

重啟 snmpd 後重新查詢即可確定設定是否正確。

www root # snmpwalk localhost -c snmpmgr -v 1 1.3.6.1.2.1.1.sysName.0
SNMPv2-MIB::sysName.0 = STRING: "www.t-times.net"

snmp 中提供不少系統的各項資訊,如 1.3.6.1.2.1.2 中記載了系統各種網路界面的資訊,同樣可以使用 snmpwalk 進行查詢。

完成以上動作後,snmpd 即完成設定,最後記得將 snmpd 設定為開機後自動啟動。

www root # rc-update add snmpd default