http://blog.sina.com.cn/s/blog_7695e9f40100pnpa.html
Cyrus SASL介紹
1. 綜述
這篇文檔講述的是系統管理員配置SASL的方法,其中詳細的描述了系統管理員如何利Cyrus SASL庫來安裝一個服務。
2. SASL 概念
SASL的全稱是the Simple Authentication and Security Layer。它的機制是對協議執行驗證。如果有某種f服務(如SMTP或IMAP)使用了SASL,使用這種協議的應用程序之間將會共享代碼。一些明顯使用SASL的應用程序有sendmail( 8.10.0版本以后)和Cyrus imapd(1.6.0版本以后)。
使用SASL庫的應用程序之間將會告訴彼此如何完成 SASL協議的改變,並且告訴改變后的結果。
SASL只是一個框架,特定SASL機制控制着准確地協議改變。如果有n個協議使用m種不同的認證方式,SASL試圖只用n+m種說明寫入SASL庫,並不需要寫入n*m種,而且只要第一次寫入,應用程序就可以運用SASl來執行服務。
3. 認證和授權標志符
"authorization identifier","authentication identifer"是不同的概念,我們需要熟悉兩者之間的不同。
userid (user id, authorization id)
userid是應用程序用來核對可用選項的標識符。如,在unix系統,用戶“bovik”可以用來寫入“/home/bovik” 和它的子目錄,但是不允許寫入”/etc”。
authid (authentication id)
“authentication”是用來被核對標志符。如,”bovik”的密碼是“qqqq”,系統會驗證任何知道“bovik”的密碼為“qqqq”的登錄者。這樣一個用戶擔當另一個用戶的角色是容易被驗證的。示例:Harry正在度假,他讓他的學生jane來幫他查看他的郵箱。他可以讓jane擔當他的角色,jane只需要他的id和密碼驗證即可,但是需要被“bovik”用戶授權。這樣jane通過“jane” id、jane的密碼和“bovik”用戶的授權就可以登錄郵件系統。
應用程序能夠設置它們擁有的代理權限;默認,SASL庫允許相同的用戶去代理其他的用戶(這些用戶是必須是userid,authid)。
4. 領域
Cyrus SASL庫支持領域的定義。一個領域是指用戶和在一個特定領域,特定機制的認證用戶的抽象集。
以單個機器的單個服務的最簡單的案例中,領域可以描述成服務的域名。如果應用程序沒有具體制定SASL的領域,大部分機制默認采用這用方法。
如果一個站點希望在多台機器之間分享的密碼,但可以選擇認證的領域作為域名,如“CMU.EDU”。另一方面,為了防止當一台機器的不安全,使整個網站的安全受到連累,每台服務器可以有它自己的領域。某些機制迫使用戶(客戶端)手動配置他們所處什的領域,使得用戶認證更加堅固。
一個單一的站點可能支持多個不同的領域,這可能會造成應用程序混亂,但應用程序並不希望如此。你需要確保應用程序支持被添加不同領域的用戶到sasldb,並需要設置saslpasswd。
Kerberos機制是把SASL領域當成Kerberos領域。 因此,這個Kerberos的SASL領域默認為服務器上的Kerberos默認領域。他們支持跨域認證;檢查你的應用程序如何處理這個SASL領域。
一些認證機制,如PLAIN和CRAM-MD5,並不支持領域的概念。
5. SASL工作原理及服務器和客戶端是如何精確的選擇、使用SASL來實現那些認證機制
PLAIN
PLAIN自身並沒有安全認證的機制。它的作用是通過另外的標准加密連接。(比如,IMAP命令“STARTTLS”產生一個加密的連接,通過使用PLAIN。)PLAIN工作機制是通過傳送一個userid,一個authentication id和一個密碼給服務器。並且服務器就驗證PLAIN傳送的是否一個三元組。系統管理員首先關注的是怎么樣認證和驗證密碼是否正確。Cyrus SASl庫可以實現這個功能。
passwd
/etc/passwd 可以很好的被SASL庫支持。簡單的配置是把“pwcheck_method”設置成”passwd”。
Shadow
/etc/shadow 有點復雜。如果使用SASL庫的服務使用root用戶來執行,是沒有問題的,只需要把“pwcheck_method”設置成”shadow”。然而為了安全,大部分守護進程並不是采用root用戶,比如說Cyrus imapd。為了能夠使這些服務能夠檢查密碼,他們需要一個root執行的輔助程序,或者特別許可的權限來讀取/etc/shadow。最簡單的方式就是賦給服務程序權限來讀取/etc/shadow。比如,添加用戶組為“shadow”的cyrus 用戶,這樣cyrus用戶就有權限讀取/etc/shadow。
Kerberos_v4
Kerberos v4的建立是在編譯的時候的進行配置的。通過把“pwcheck_method”設置成”Kerberos_v4”,可以對明文的密碼進行檢查。
pam
PAM在linux和solaris里默認采用的驗證用戶的方式。通過配置它可以采用不同的方式檢查密碼。如果你采用pam驗證同時采用Cyrus SASL庫,那么只需在編譯的時候把"pwcheck_method" 設置成"PAM"。采用SASL機制的pam認證,只會對明文驗證有作用。對其他的密碼驗證是沒有效果的。
sasldb
Sasldb是存儲SASL密碼的暗文數據庫。相同的數據庫存儲着暗文共享的方法。它的首先是共享密匙機制的密碼的將會與明文機制的密碼的同步。但是常規系統內置將不使用sasldb。如果你在sasldb里設置明文密碼。你只需要配置“saslpasswd”即把pwcheck_method設置成sasldb。
write your own
最后,也是最重要的,PLAIN最靈活的驗證方法是自己寫自己需要驗證的方式。一些應用程序條用"sasl_checkpass()"慣例或使用PLAIN將會調用自己寫的驗證代碼。最簡單修改驗證慣例的方法是修改lib/server.c(詳細略)。
6. 如何配置SASL
默認配置文件
一般,Cyrus SASL庫從/usr/lib/sasl/app.conf讀取配置文件。其中app是應用程序的命名。比如sendmail從/usr/lib/sasl/sendmail.conf讀取配置文件。
應用程序的配置
應用程序可以重新定義SASl庫尋找配置信息的方式。例如Cyrus imapd 的asl配置項是從它自己的配置文件/etc/imapd.conf內讀取sasl_pwcheck_option”信息。
不幸的是,自從SASL變得高靈活性的情況下,管理員可以很輕松的升級或安裝新認證插件,並不需要重新編譯應用程序。但是他的靈活性也造成編譯的繁瑣。