相关软件及网址:
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 的版本联接