2008-01-02

FreeRadius + pam_pop3 多部mail server pop3認證

工作上需要用到radius來進行無線網路的帳號,可是又不想另外維護獨立的radius的帳號,第一是我太懶了,第二是太麻煩了,但是又還沒建置LDAP把帳號統一,所以把念頭打到了現行的mail server上,可以利用現成的帳號密碼來進行無線認證。
經過測試後發現使用FreeRadius+pam_pop3模組,依預設值的話只能針對一部mail server進行pop3的認證,問題來了,因為認證時可能會同時使用到兩部mail server,所以必須進行程式修改。
在網路上找到了資料,發現交通大學的"北台灣社區網路建置及分析"計劃已有相同的做法,但是沒有source code可供參考 >"<,只好自己挖糞塗牆了。 需要修改的部份有兩個,就是FreeRadius和pam_pop3,雖然交大的文件上說只要修改FreeRadius就可以符合需求,但測了半天覺得兩個都要改到,反正沒source code所以還是用自己的方法吧!
  • FreeRadius
    1. 作業系統FreeBSD-6.2-RELEASE
      > cd /usr/ports/net/freeradius
      >make install
    2. 解開原始檔進行修改
      > tar xvfj /usr/ports/distfiles/freeradius-xx.tar.bz2
    3. 修改rlm_pam.c
      > cd freeradius-xx/src/modules/rlm_pam
      > vi rlm_pam.c
      找到以下字樣的下面那段code把mark掉
      /*
      * FreeBSD 3.x doesn't have account and session management
      * functions in PAM, while 4.0 does.
      */
      if !defined(__FreeBSD_version) || (__FreeBSD_version >= 400000)
    4. 把修改過的FreeRadius重新包裝起來放回/usr/ports/distfiles把原檔覆蓋掉,再用port直接安裝省得麻煩
      > tar cvfj freeradius-xxx.tar.bz2 freeradius-xxx
      > cp freeradius-xxx.tar.bz2 /usr/ports/distfiles/freeradius-xxx.tar.bz2
      > cd /usr/ports/net/freeradius
      > make deinstall
      > make NO_CHECKSUM=yes install clean
    5. 修改radius的相關設定
  • pam_pop3
    1. 一樣使用port安裝並使用已經過patch的code來修改
      > cd /usr/ports/security/pam_pop3/
      > make install
      > cd ~
      > cp -r /usr/ports/security/pam_pop3/work/pam_pop3 .
    2. 修正 pam_pop3.c
      > cd pam_pop3
      > vi pam_pop3.c
      找到 char *pwprompt="Password: "; 在下面插入一行char delim[]="@";
      找到以下的code
      if (username==NULL)
      {
      if (pam_get_user(pamh,(const char **)&username,NULL)!=PAM_SUCCESS)
      {
      syslog(LOG_ERR,"Could not get username from libpam !");
      return result;
      }
      在下面接著以下這兩行
      username=strtok(username,delim);
      hostname=strtok(NULL,delim);
      這樣就可以把xxx@mail.abc.com.tw的格式正確的導到正確的伺服器囉!
    3. 手動compiler後再把原先安裝的pam_pop3.so檔覆蓋
      > make clean
      > cc -O2 -fno-strict-aliasing -pipe -march=pentiumpro -fpic -DPIC -Wall -c pam_pop3.c -o pam_pop3.o
      > ld -x --shared -o pam_pop3.so pam_pop3.o -lpam -lcrypt
      > cp pam_pop3.so /usr/local/lib/pam_pop3.so
    4. 在/etc/pam.d/ 新增一個檔名字叫radius,內容如下
      auth required /usr/local/lib/pam_pop3.so info pwprompt=Passwort: timeout=20

沒有留言: