標籤:

日曆服務

【遷移】日曆服務

經歷了 Kerberos, Exim, Dovecot, RoundCube,Sieve 的折騰後,郵件服務算是告一段落了,接下來是跟郵件服務關係極為密切的日曆服務。MS Exchange 就是一個結合郵件和日曆服務的好例子,N 多企業都沒法離開這貨,悲劇的是 MS 的 Kerberos 加入了私有特性,郵件協議私有,日曆協議私有,一個勁的把用戶捆綁在 Windows 上。可我對 Outlook 很厭惡,主題樹狀視圖比 ThunderBird 差的不是一星半點,看個郵件源碼都不知道怎麼看(Outlook 有隱藏功能可以看郵件頭的源碼,可以看 html 郵件的 html 源碼,但是不知道怎麼看郵件的源碼),作為郵件客戶端,Outlook 太二了,但是伊的日曆功能是相當贊的,訂會議室、查看會議參與人的空閑時間檔、會議助手,等等。可惜 ThunderBird 的兩個 Outlook 插件都對日曆支持不是很給力,不然開啟 Exchange 的 IMAP 支持後完全可以拋棄 Outlook。

開源的日曆伺服器絕大多數都用 CalDAV 協議,日曆使用 iCalendar 格式存儲,CalDAV 協議是對 WebDAV 協議的擴充,允許多個客戶端安全的同時操作伺服器上的一個 iCalendar 文件。

開源的日曆服務端主要有三個:Apple 開源的 Darwin Calendar Server,PHP 寫就的 DAViCal,Python 寫就的 Radicale。DCS 原來是 Apple 的商業產品,也是用 Python 寫的,應該是目前做的最企業級的開源日曆服務程序了,支持多種認證方式,多種用戶存儲方式,XMPP 通知等等,Kerberos 認證自然支持的很好,難能可貴的是可以在 Kerberos 認證通過後自動創建 DCS 自己的帳號。

DAViCal 據說比較成熟,支持很多 CalDAV 客戶端,托 Apache + mod_krb 的福氣,也可以支持 Kerberos 認證,但是悲劇的是伊不支持自動創建日曆用戶,需要管理員預先在 DAViCal 里為每個用戶創建帳號,因此管理上不是很方便。DAViCal 是用 PHP 寫的,很自然的一大優點是有 Web 管理界面,不過個人覺得沒太大意義,默認許可權設置就行了,普通帳號並不需要什麼許可權定製。

Radicale 的出發點是想盡量簡化,只負責通過 CalDAV 協議存儲 iCalendar 文件,沒什麼高級功能,個人玩玩不錯,使用簡單,但據說伊當前的設計是每來一個請求都去磁碟上載入 iCalendar 文件再返回,並發請求多了性能會很差。

配置 DCS 挺簡單的,需要注意的是 /var/spool/caldavd 所在文件系統要啟用 user_xattr 載入選項,裝好後伊用 Python Twisted 實現了專用的 http/https server,監聽非標準埠,在其前面用 Apache + mod_proxy 擋一下,一個 DCS 服務就搞定了。這裡比較悲劇的是 Debian 打包的 DCS 很舊了,而且在 Debian testing 里居然被刪除了,搞的我原來用 Debian testing 做試驗,後來只能切換到用 Debian Sid,看來哪天還是折騰一把源碼安裝 DCS 得了。

DAViCal 的配置也不是太麻煩,伊的官方文檔為了簡單,對 PostgresSQL 的訪問控制把 davical_dba, davical_app 兩個 SQL 帳號設置成 local trusted 了,由於我開了 ssh 服務,這個要求就太不靠譜了,所有本地用戶都可以用那兩個帳號訪問 PostgreSQL 了。所以我修改了下安裝腳本,讓它支持 PostgreSQL 的 md5 密碼認證方案。DAViCal 最近在搞網上調查,有興趣的同學可以過去捧捧場:andrew.mcmillan.net.nz/

客戶端的配置是很容易的,使用 ThunderBird + Lightning + Kerberos 認證,然後在 Config Editor 里把 network.negotiate-auth.trusted-uris 設置成 http://corp.example.com 以讓 CalDAV 所用的 HTTP 協議順利使用 Negotiate 認證方式。然後新建日曆,DCS 的地址是 http://calendar.corp.example.com/calendars/users/dieken/calendar/,DAViCal 是 http://cal.corp.example.com/caldav.php/dieken@CORP.EXAMPLE.COM/calendar/,這裡 dieken 是我的賬戶名,DAViCal 要是能把 @http://CORP.EXAMPLE.COM 自動去掉就好了——實在是不想去看去改 PHP 代碼,太粗了,根子上就粗,連 #!... 都不支持,根據文件後綴判斷,造就無數攻擊。


推薦閱讀:

TAG:Linux |