2008年3月14日 星期五

完整備份Cafe BBS

以前都是在crontab裡面放個shell script執行每月備份,不過備份的時間都是挑每月四號凌晨四點人少的時候,直接對/home/bbs整個tar czf起來,不過這次想要把整個程式徹底關掉(使用者趕出門)然後再備份(謎之音:您多慮了,沒有人這時候亂搞)。所以就要殺掉bbsd這程式,最近越來越迷戀長指令了。是男人都知道,屌,就是越長越好啊~

ps -ax | grep bbsd | cut -c1-5 | xargs kill

 

因為bbsd會跑出很多分身,所以乾脆直接找出(grep)他們的pid,然後擷取出前面數字(因為排版會填空白對齊,所以cut -d" "無效),用xargs餵給kill,一行指令內殺光所有bbsd,然後咖啡店就倒了。

不過這樣還有幾個standalone的程式還在醉生夢死,所以要單獨一槍一個幹掉他們。主要就是gemd、bpop3、bguard、camera、account、xchat,還好啦,也可以研發一顆銀子彈一槍幹掉所有程式,核心就是

grep bbs

因為程式都是在/home/bbs下面。哈哈!

接下來備份用tar就可以了,此時系統其實就跟單人系統沒有二樣,你可以擁有幾乎全部效能來壓縮。做完備份的tar檔案當然不可以留在主機裡,要拷到遠端的另一台主機,或是用燒錄機備份出來,不然這是哪門子掩耳盜鈴的備份工作啊!要拷檔案有cp指令,不過我們這裡不用這個指令。我簡介一下ssh的子系統scp,secure copy。大家都很熟悉cp source target這個語法,scp其實也沒太大差別,只是有個語法user@hostname:directory,所以可以從本機下

scp ./source_file remote_user@hostname:home_directory

或是從遠端主機下達

scp bak_user@bak_host:path_to_backup_file .

如果ssh的 port不是內定的22,用前置-P port_num URL 來說明用哪個port進入該主機,額外有價值的參數是

-4 強制使用ipv4
-v 列印出很多觀賞性質的進度

然後當成功打開ssh的連線,就會問你密碼,只要你完成ssh連接,就會看到拷貝進度,完成後自動斷線。

至於恢復bbs運作其實沒啥了不起,找到/home/bbs/bin/bbsd激活一下,然後切換成bbs的身份,對camera電擊一下,bbs又恢復心跳了。不然還有終極絕招:其實crontab與script都寫好了,reboot就可以了(不過這樣就遜掉了)。

不過我說啊,沒事不要放一大堆情書在別人的硬碟裡面好嗎?你泡馬子我又沒有分,還要幫你備份保管情書,有沒有道義啊?是不是兄弟啊?不過這是玩笑話,純粹是因為這是DMA66的硬碟,所以tar起來超慢的牢騷。

2008年3月10日 星期一

BlackTea完成後誌

創建一個網誌不難,就像是天堂路一樣充滿血與淚。但是維護與管理技巧卻勝過創建。灌個軟體是很簡單,但是能夠妥善的組合運用上長長久久,那就真的不簡單了。所以當創建成功後,這個日誌才是重點。

首篇先發:如何用rssh創建一個chroot的sftp環境

sftp + chroot (by rssh)

對於apache的應用上,有個很大的幫手ftp。不管你想要編修網頁,或是上傳檔案,你一定需要ftp來幫上這個大忙。但是ftp實在是很不安全的通訊方式,最好是改成採用ssh的子系統:sftp。

sftp是包含在ssh通訊中的一個ftp類介面,不同於於傳統ftp的不只是不開啟port 21/20傳輸資料,更重要的是它過程都用ssh 包裝起來,具有防止竊聽的基本能力,而且對防火牆設定上,你不需要多開port 21/20,而只需要打開port 22。

不過sftp連線進入系統後,使用者就有如進入家一樣,依照本身的權限可以摸到檔案系統裡的任何東西,包含其他人沒設定好權限的電子郵件,如果他有意願而且知道在哪裡。所以這需要另一個技術,chroot。chroot基本上就是良深打造一個「貴賓室」,讓貴賓一進門的時候就待在接待中心,沒有後門通到後面的工地去。在這個chroot環境中,被限制住的使用者所用的/根目錄就不是主機本系統的/,而有可能是/home/foo之類的目錄。這樣使用者就無法超出這個chroot環境去看到他不該看到的東西。要完成這件事,你可以選擇rssh。

解釋完基本概念,首先我們就來安裝rssh

cd /usr/ports/shells/rssh ; make install

然後你就安裝完了rssh,不過接下來就需要靠自己。基本上要先修改/urs/local/etc/rssh.conf,你可以研讀裡面的設定。你可以把所有使用者統統引導到你想要的chroot path底下去,也可以讓不同使用者摸到不同的區段,有如瞎子摸象一般。以我來說,我希望有一個$user可以存取apache的網站,這樣讓我的Dreamweaver可以直接編輯網頁。但是我不希望$user離開/usr/local/www/apache22這個目錄去閒逛。很顯然我的$chroot_path就是/usr/local/www/apache22。

首先你要新增一使用者$user,家目錄設定隨意($chroot_path),shell一定要指定為rssh。

接下來確認$user在rssh.conf裡面是否有確定的設定,以及群組的設定(如加入www群組)。然後我們就要進入蓋碉堡的階段,要製造出一個貴賓室,裡面剛好夠執行sftp。

cd $chroot_path
mkdir -p usr/bin usr/libexec usr/local/libexec usr/lib lib libexec bin dev etc
cp /usr/bin/scp usr/bin/
cp /usr/libexec/sftp-server  usr/libexec/
cp /usr/local/libexec/rssh_chroot_helper  usr/local/libexec/

搬好了基本程式以後,千萬不要忘記程式的函式庫。為了確認這點,所以我們要用ldd來確認

ldd /usr/bin/scp
ldd /usr/bin/sftp

得到的結論就是

cp /usr/lib/libssh.so.3 /usr/lib/libgssapi.so.8 /usr/lib/libkrb5.so.8
/usr/lib/libasn1.so.8 /usr/lib/libcom_err.so.3 /usr/lib/libroken.so.8
usr/lib/
cp /lib/libcrypt.so.3 /lib/libcrypto.so.4 /lib/libz.so.3 /lib/libc.so.6
/lib/libmd.so.3 lib/

然後繼續複製重要的輔助

cp /libexec/ld-elf.so.1 libexec/
cp /bin/sh bin/

接著幫這個chroot環境製造出/dev這個檔案系統,不然在裡面執行的程式將會沒有stdin、stderr這種超基礎建設。

echo "none $chroot_path devfs   rw 0 0" >> /etc/fstab
echo "devfs_set_rulesets="$chroot_path/dev=devfsrules_jail"" >> /etc/rc.conf

不過在本機的例子,要注意的是因為blacktea本身就已經是個被chroot過的jail,在裡面又在疊一層chroot,所以在fstab裡面你所寫的參數傳遞給mount時,就會出現「認知落差」。這時候你要在fstab寫出完整的、真實的路徑才能成功掛載devfs。

然後我們要幫這個環境製造出一個保全的密碼檔。方法不難:

grep $user /etc/passwd etc/passwd
grep $user /etc/master.passwd etc/passwd

pwd_mkdb -d $chroot_path/etc
$chroot_path/etc/master.passwd

這樣製造出只有一個使用者的密碼檔(呵!裡面沒有牽拖到其他任何使用者,所以失竊的結果就是只有一個人倒楣)。測試的方法就是從別機器用sftp $user@$host ,就可以看看這個chroot有沒有囚著自己。

不過上述的方法有個缺點,就是如果你make world 升級後,有可能產生程式的連結不同步。所以要手動的再次複製函式庫。解決的辦法就是寫個script 吧!

附記述一點,如果你要讓Dreamweaver使用sftp連線方式,你還要修改/etc/ssh/ssd_config 這個設定檔,將PasswordAuthentication yes。這樣就可以用Dreamwaever來吸下整個網站回本機編輯啦!

還有一個用法,如果你覺得Gallery2的上傳方式有檔案大小的限制,也可以使用上述方法建立一個專門帳號及chroot到一個"dropzone",然後到Gallery2介面裡設定,就可以直接抓各種支援格式的檔案到Gallery裡面。

2008年3月5日 星期三

FlyBook惡搞日誌005

現在來到對硬體加強的時候了。基本上這台Flybook對於硬體的惡搞程度絕對不低於一般正常架構。因此對於各項硬體的驅動是一場混戰。它的強項觸控螢幕沒有驅動、第二強項滑鼠除了是XY相反(在2.6版的核心),所以有另類選擇:外接一隻usb滑鼠。

不過這場戰爭不是我的,因為已經有第一滴血了。更甚者還出現了wiki,未免.....
http://gentoo-wiki.com/HARDWARE_Dialogue_Flybook

2008年3月4日 星期二

FlyBook惡搞日誌004

能用firefox上網以後,最先要做的除了安裝Mouse Gestures滑鼠手勢、Right Encoding右鍵改變網頁編碼的add-ons以外,最重要的是要灌flash player。不然很多「現代化」網頁都很喜歡在門口擺個flash動畫,然後skip做在動畫裡...是打算讓沒有flash player的瀏覽器不要進網站就對了。

2008年3月2日 星期日

FlyBook惡搞日誌003

windows與linux雙系統的一個問題,就是linux等UNIX系統喜歡把硬體時鐘設定為UTC,但是Windows喜歡主機板上映體時間就是該時區的時間。這樣會造成當Windows校正時間後(以台灣為例,會認為慢了八小時),回到Linux就會變成再加快八小時。如果發生這種回到未來的問題,unix將會發生一些詭異的問題,比如軟體編譯失敗。不過這也不是不治之症,第一種解決方法是將校正時間、將ntpclock、ntpdate加入啟動群組、開機腳本。第二種是Windows新增個機碼,就可以解決這問題了。

2008年3月1日 星期六

FlyBook惡搞日誌002

安裝完Windows XP,接下來就是安裝Xubuntu的時刻了。我的選擇是用Xubuntu 7.10 alter CD作為安裝媒介,同時一開使只安裝Command Line System。

FlyBook惡搞日誌 001

身為一個現代化的電腦玩家,沒有laptop是很奇怪的一件事。不過當年買筆電時心智未開,不認為效能就是一切,所以做了有點錯誤的選擇:
Dialogue FlyBook A33iG-Tri-b

江川科技當年作A33i時,最令人折服的就是觸控螢幕的變身,整體唯一的缺點,就是選用Transmeta Crusoe TM5800的處理器。省電固然好,但是爆慢令人受不了。