WITH POSTFIX, CYRUS IMAP, OPENLDAP, HORDE|IMP.


相关软件及网址:



    www.postfix.org
    postfix-19991231-pl08

    www.horde.org
    horde-1.2.3
    imp-2.2.3

    http://asg.web.cmu.edu/cyrus/
    cyrus-imapd-v1.5.19

    www.linc-dev.com
    pwcheck_ldap.c for cyrus




TODO LIST:



    相关软件文档
    用户管理功能
    安全
    安装脚本
    分布扩展
    分布管理




维护人:ai_ya 



    email: ai_ya@21cn.com
    http://ai_yaya.home.chinaren.com
    http://ai_ya.myetang.com

错漏很多,请多多指正!非常希望听到改进的意见!

本文是 www.horde.org/papers/Scalable_webmail_HOWTO.php 的详细安装步骤及一点扩展,本文没有包含基本原理及概念,如有需求,请访问该网址。

本文假设你使用的是 redhat 6.2 , 已经设置好 apache 、php4 、postgresql、DNS。



准备LDAP服务器


    LDAP服务器在本例中用的是 Redhat 6.2 自带的openldap-1.2.9-5。



1. 设置dns服务器


    主要是对 /etc/openldap/ldap.conf /etc/openldap/slapd.conf 两个培植文件的修改。ldap.conf 是 ldap 客户端的配置文件,要修改的配置参数如下:


   #-----<
    BASE dc=your, dc=com
    HOST ldap.your.com
    PORT 389
    #----->

    slapd.conf 是 ldap 服务器的配制文件,主要修改如下参数其中,directory 是ldap数据储存的位置,默认值为 /tmp,是 redhat 的 bug,要改
   


   #-----<
    database ldbm
    suffix "dc=your, dc=com"
    rootdn "cn=Manager, dc=your, dc=com"
    rootpw yourpassword
    directory /usr/local/openldap/ldbm
    #----->


2. 分析LDAP数据结构


    现在使用如下结构作为例子:

    dn: uid=testnn,ou=email_auth,ou=service,o=it,dc=your,dc=com
    uid: testnn
    maildrop: testnn@mail.your.com
    mailacceptinggeneralid: testnn
    signup_ip: 132.97.102.175
    objectclass: account
    userpassword: nn


3. 将以上数据储存在一个文本文件中,并以*.ldif为其命名。然后使用以下命令将数据增加入ldap服务器。


    # ldapadd -D "cn=Manager, dc=your, dc=com" -W < test01.ldif


4. 通过下面命令从ldap服务器检索数据


    # ldapsearch -L -b "dc=your, dc=com" "(objectclass=*)"


5. 从ldap服务器删除数据


# ldapdelete -D "cn=Manager, dc=your, dc=com" "dc=your, dc=com"


配置安装postfix


1. 删除 sendmail



    # rpm -e sendmail


2. 使用如下命令配置postfix使其支持LDAP


    # make tidy
    # make makefiles CCARGS="-I/usr/include -DHAS_LDAP" AUXLIBS="/usr/lib/libldap.a /usr/lib/liblber.a"
    # make


3. 增加 postfix 用户


    # useradd -c postfix -d /no/where -M -s /no/shell postfix


4. 为postfix在/etc/aliases增加一个alias:


    postfix: root


5. 使用如下命令安装:


    # sh INSTALL.sh


6. 修改 /etc/postfix/main.cf


6.1. 域名环境设置



    myhostname = mail.your.net
    #myhostname = virtual.domain.name

    mydomain = your.net

    #myorigin =  $myhostname
    myorigin =  $mydomain

    inet_interfaces = all
    #inet_interfaces =  $myhostname
    #inet_interfaces =  $myhostname, localhost

    #mydestination =  $myhostname, localhost. $mydomain
    #mydestination =  $myhostname, localhost. $mydomain  $mydomain
    mydestination =  $myhostname, localhost. $mydomain,  $mydomain,mail. $mydomain, www. $mydomain, ftp. $mydomain


6.2. 对cyrus的支持


    mailbox_transport = cyrus
    local_transport = cyrus


6.3 修改 /etc/postfix/main.cf, 增加 LDAP 搜索数据属性



    alias_maps = hash:/etc/aliases, ldap:ldapsource
    ldapsource_server_host = ldap.your.com
    ldapsource_search_base = ou=email_auth, ou=service, o=it, dc=your, dc=com


7. 修改 /etc/postfix/master.cf



    cyrus unix - n n - - pipe
    flags=R user=cyrus argv=/usr/cyrus/bin/deliver -e -m  ${extension}  ${user}


配置安装Cyrus


0. 铲除 IMAP



rpm -e imap


1. 配置pwcheck


1.1. 复制 pwcheck_ldap.c 到 pwcheck 目录


1.2. 修改 pwcheck_ldap.c



    #----------Before
    25 define MY_LDAP_SERVER "ldap.your.com"
    26 define MY_LDAP_BASEDN "ou=email_auth, ou=service, o=it, dc=your, dc=com"
    27 define MY_LDAP_UIDATTR "uid" 
    87 if ((ldap_count_entries(ld,result) != 1)
    #----------After
    25 #define MY_LDAP_SERVER "ldap.your.com"
    26 #define MY_LDAP_BASEDN "ou=email_auth, ou=service, o=it, dc=your, dc=com"
    27 #define MY_LDAP_UIDATTR "uid" 
    87 if ((ldap_count_entries(ld,result)) != 1)


1.3. 修改 pwcheck 目录下的 Makefile.in



    #----------Before
    DEPLIBS = ../lib/libcyrus.a @DEPLIBS@
    #----------After
    DEPLIBS = ../lib/libcyrus.a -lldap -llber @DEPLIBS@


2. # cp et/com_err.h /usr/include


3. 


# rm -f config.cache
# ./configure --with-login=unix_pwcheck --with-pwcheck=ldap --with-cyrus-group=cyrusmail --without-krb


4. # make depend


5. # make all 


6. 为 Cyrus 建立系统用户和组



    Cyrus 的默认用户是 cyrus, 组是 mail,如果系统中已经存在相同的用户和组,那你必须为 Cyrus 指定一个不同的用户以及组。特定用户的指定是在 ./configure 时设置 with-cyrus-user= 选项,特定组的指定是在 ./configure 时设置 with-cyrus-group= 选项。
    在本例中特定用户为cyrus ;组为cyrusmail


7. # make install


8. 修改 /etc/syslog.conf


    增加如下设置:
    local6.debug /var/adm/imapd.log


9. 建立 imapd.log 文件



    # mkdir /var/adm
    # touch /var/adm/imapd.log


10. 建立 /etc/imapd.conf 文件


   加入如下设置,并将你的 Cyrus IMAP 管理员加在 admins: 项目后面
    configdirectory: /var/imap
    partition-default: /var/spool/imap
    admins: cyrus curtj abell
    srvtab: /var/imap/srvtab


11. 根据 imapd.conf 文件中的 configdirectory 选项,建立目录


   命令如下
    # cd /var
    # mkdir imap
    # chown cyrus imap
    # chgrp cyrusmail imap
    # chmod 750 imap


12. 在configuration目录中,制作空的文件 mailboxes 和相关的空目录:



    # cd imap
    # true >> mailboxes
    # mkdir user quota proc log msg
    # chown cyrus *
    # chgrp cyrusmail *

13. 按照 /etc/imapd.conf 文件里的设置,建立 partition 目录


   在这里,我们使用 /var/spool/imap 作为 partition 目录
    # cd /var/spool
    # mkdir imap
    # chown cyrus imap
    # chgrp cyrusmail imap
    # chmod 750 imap
    partition 目录在概念上与 /var/spool/news 相似,是mailboxes储备的地方。与大部分的网络新闻服务系统不同,Cyrus 允许你有1以上的partition。由于 "news" 是一个保留字,所以不要它作为 partition 的名字。


14. Linux系统:将 configuration, user, quota 以及 partition 目录设置为同步更新


   不这样样做,在系统崩溃后可能导致数据出错或丢失。
    # cd /var/imap
    # chattr +S . user quota
    # chattr +S /var/spool/imap


15. 建立“/var/pwcheck”目录,把它设置为只允许 cyrus 用户读取:



    # mkdir /var/pwcheck
    # chown cyrus /var/pwcheck
    # chmod 700 /var/pwcheck


16. 如果 /etc/services 文件内不存在如下内容,请增加



    pop3 110/tcp
    imap 143/tcp
    imsp 406/tcp
    kpop 1109/tcp


17. 把下面几行加入 /etc/inetd.conf 文件中



    imap stream tcp nowait cyrus /usr/cyrus/bin/imapd imapd
    #(If you want to run the POP3 protocol, add the following line.)
    pop3 stream tcp nowait cyrus /usr/cyrus/bin/pop3d pop3d
    #(If you want to run MIT's KPOP (Kerberized POP) protocol, add the following line)
    kpop stream tcp nowait cyrus /usr/cyrus/bin/pop3d pop3d -k
    #("cyrus" is the Cyrus user and "/usr/cyrus/bin/" is the path name to the executable.)


18. 用 vigr 编辑 /etc/group ,将 daemon 用户加入到 cyrusmail 组


    这样将允许 sendmail 运行“deliver”程序将邮件传递给 IMAP 服务器。


19. 在 /etc/rc.d/rc.local 加入下面内容,并重启


    postfix start
    /usr/cyrus/bin/pwcheck &


20. 在LDAP和Cyrus IMAP里增加用户并使用 outlook、Netscape 进行测试


20.1. LDAP 按介绍加入用户


20.2. cyrus 用户的管理使用下面命令


    # /usr/local/bin/cyradm -u cyrus yourcyrushost
    具体的操作细节可以键入 help 得到


设置HORDE|IMP


    1. 将两个 tar 包解压,将 horde-x-x-x 移入html 的根目录,并更名为 horde;将 imp-X-X-X 移入 horde 目录下,更名为 imp。

    2. 复制 horde/phplib/子目录到 usr/local/apache/phplib/

    3. 在 httpd.conf 中加入:

    # Added for Horde
    <Directory /home/httpd/htdocs/horde>
            Options Indexes FollowSymLinks
            AllowOverride None
            order allow,deny
            allow from all
         <IfModule mod_php3.c>
            php3_include_path '/usr/local/apache/phplib:.'
            php3_auto_prepend_file /usr/local/apache/phplib/prepend.php3
            php3_magic_quotes_gpc Off
            php3_track_vars On
        </IfModule>
        <IfModule mod_php4.c>
            php_value include_path '/usr/local/apache/phplib:.'
            php_value auto_prepend_file /usr/local/apache/phplib/prepend.php3
            php_flag magic_quotes_gpc Off
            php_flag track_vars On
        </IfModule>
    </Directory>

4. 修改 /usr/local/apache/phplib 文件夹中的local.inc(设置 SQL)及prepend.php3

5. 执行下面命令设置horde所用的数据库:
    # su - postgres
    # ./pgsql_cuser.sh(如果pgsql 是使用 tarball 安装的,那你必须更改 pgsql_cuser.sh)
    # psql template1 < pgsql_create.sql

6. 将 horde/config/horde.php3.dist复制为 horde/config/horde.php3,并根据你的需要进行修改。

7. 修改httpd.conf
    DirectoryIndex index.html index.php3

8. # kill -HUP <httpd's pid>

9. 浏览 www.youdomain.com/horde/test 进行测试。

10. 按照下面的步骤对IMP进行设置:
    # cd <horde dir>
    # sh ./install.sh

11. 浏览下面的地址设置你的 IMP
    http://<your imp server>/<your horde home>/setup.php3

12. 设置完成后,执行下面的命令取消设置文件的访问权:
    # cd <horde dir>
    # sh secure.sh

13. 修改数据库口令
    /home/httpd/htdocs/horde/scripts/database/dbpasswd.sh

14. 复制简体译文到 horde/imp/locale/

15. 修改 horde/imp/config/lang.php3 ,加入简体中文配置,并取消你不用的语言

16. 修改 signup.php3,并将其复制到 horde/,覆盖原有文件。

17. 复制changepasswd.php3 至 horde/, 修改 horde/imp/config/menu.txt,加入 changepasswd.php3

18. 根据你的需要定制IMP。

18.1. 减少浏览窗口、取消软件介绍
 $default->minimum_popups = true;
 $default->newuser_link = false;

18.2. 根据你的需要修改 cn/login.lang、cn/status.lang 里的 IMP 版本标题

18.3. 在 horde/imp/templates/status/body.inc里更改 IMP 的版本联接