2011年3月15日 星期二

FreeBSD : FTP chroot 導致 client 端看到的時間有誤

平常在學校存取 server 上個人空間的檔案都是透過連線好的網路磁碟機,回家後只能以 FTP 的方式來存取,自從學校主機昇級以後,一直有個困擾,透過 FTP 上載到主機的檔案時間總是慢八個小時,上載又下載以後,整個檔案時間都錯亂了,在備份檔案時肯定會出問題。直覺得的認為是主機系統建置時,時區(timezone) 沒設對,但是奇怪的是,在學校透過網路磁碟機(Samba 服務)儲存的檔案時間卻是對的。由於沒有主機管理的權限了,也就這麼忍著用囉!昨天晚上因為要備份檔案,看到錯誤的檔案時間覺得心煩,決定今天要利用有空的時間好好的把問題找到。和另一位同事研究了半天,終於試出問題所在,並解決了 FTP 時間不對的困擾。

我們學校的 server 跑的是 FreeBSD , FTP 用的是內建的 ftpd ,一般使用者有 chroot,所以透過 FTP 無法切換到個人空間以外的目錄。同事測試發現,如果使用 CuteFTP , FFFTP 或是 Windows 內建的 FTP client 程式連線後,看到的檔案時間是有問題的(慢八個小時),但是使用 FileZilla 卻正常,也發現 FileZilla 還可以在設定裡面自訂要差多少時間。觀察了一下 FileZilla 的訊息,原來它會偵測 server 和 client 的時間,並自動修正,顯示正確的時間。這個工作應該是 server 上的服務程式應該要做的,可見是 server 端出了問題。
有了方向,上網用「freebsd chroot ftp timezone」拜了一下 google 大神,看了很多的文章,雖然沒有看到一樣的問題,但是在 OpenBSD 的一篇 FAQ 裡看到有關 Apache httpd chroot 寫到:
Timezone: httpd(8) inside the chroot(2) will NOT be able to use the system /etc/localtime. If you require localtime logging of events, you will need to copy (not link) the corresponding timezone from /usr/share/zoneinfo/ under /var/www/etc/localtime.
這讓我想起以前在 FreeBSD 3.x 上架設供匿名使用的 FTP server 時曾經遇過,FTP client 連線以後看不到任何檔案清單,因為 chroot 以後,ftpd 找不到查看目錄的指令 /bin/ls ,當時解決的方法是手動為匿名 FTP 的服務目錄中建了一個 bin 的目錄並複製一份 /bin/ls 到該目錄中,才解決看不到檔案的問題。

這一次碰到的是時區的問題,因上 OpenBSD 上的那個 httpd 問題可能發生在 FreeBSD 的 ftpd 上。

試試看,用自己的帳號遠端登入主機後,執行底下的指令:
mkdir ~/etc
cp /etc/localtime ~/etc/
也就是在個人的 HOME 底下建一個名為 etc 的目錄,並且將系統的時區資料檔案 /etc/localtime 複製一份到個人空間下的 etc 目錄。

檔案加完以後,再以 FTP client 程式去連線,問題解決了,收工!

解決了我帳號下的問題,那其它使用者呢?當然是得如法泡製囉!誰來做?哈!這應該是不管 servers 的好處(其實寫個 script 跑一下,應該也很快可以解決)。

如果您管的 server 也有同樣的情形,建議可以在 /usr/share/skel 目錄底下建一個 etc 的目錄,並複製一份 /etc/localtime 放到裡面。這樣,新建立的使用者會自動將該檔案帶到新帳號下。

沒有留言:

張貼留言

 
© 2009. Design by Pocket