当前位置:Linux教程 - Ldap - ldap+qmail+postaci安装和用户管理

ldap+qmail+postaci安装和用户管理

ldap+qmail+postaci安装,用户管理

参考文献:
1. 建一个大容量的webmail系统(作者:谢顺华)。目前唯一能找到的中文qmail+ldap资料

2. Postaci Webmail
基于php的webmail系统, 支持pop3, imap, 使用数据库做缓存. 相对于imp和sqwebmail来说, 配置相当容易, 而且界面很好.

3. Simple ldap user admin tool
For Qmail的php版用户管理, 可以设置用户资料, 别名, maillist, 公司组织...

4. Softerra LDAP Browser
win32的ldap查看修改工具

5. Life With qmail-ldap

6. Life With qmail


说明:
考虑到qmail使用系统用户在管理上不大方便. 而使用mysql作为用户又会和mysql用户冲突, 而且mysql的局限性很大, 没有ldap的open和自由扩展特性. 使用ldap后, 利用php的ldap函数就可以实现用户管理, 用户可方便的自行编程解决用户管理.

因为不是虚拟主机, 所以选用了配置简单, 好用的Postaci和Simple ldap user admin tool. 适合单一团体/公司使用.

安装:

1. openldap请参考文献1的步骤1.
在/etc/openldap目录下是openldap的设置, 除了要按参考1中增加qmail的qmailUser类型外, 还要注意修改slapd.conf文件, 关键内容如下:

#你的公司名, 最好用站点名
suffix ""dc=test, dc=com""
#管理员名称, 类似于系统管理员. 很长, 但是很重要.
rootdn ""cn=Manager, dc=test, dc=com""
#管理员密码(这里用的是明文密码)
rootpw secret
#加入基本数据:
ldapadd -D ""cn=Manager,dc=test, dc=com"" -W

dn: dc=test, dc=com
objectclass: dcObject
objectclass: organization
o: test Company
dc: test

dn: cn=Manager, dc=test, dc=com
objectclass: organizationalRole
cn: Manager

2. qmail需要加for ldap的补丁, 并且配置pop3, imap, sendmail.请参考文献1中的步骤2. 其中注意以下事项:

ldap要求qmail使用Maildir格式, 所以, 要修改/var/qmail/rc如下:

exec env - PATH=""/var/qmail/bin:$PATH""
qmail-start ""``cat /var/qmail/control/defaultdelivery``"" splogger qmail

在/var/qmail/control/defaultdelivery中内容如下:

./Maildir/

/var/qmail/control/ldapuid和ldapgid是ldap用户资料中的qmailUid/qmailGid的缺省值, 设置后ldap中可不必设置. 注意此处uid和gid必是存放mail目录的uid/gid, 一般是/mail, 属性是750, 不可对其它人可写, 否则出错. 考虑到要在php中执行管理用户的操作, 所以这个uid/gid和apache的相同, 可以在apache/conf/httpd.conf中修改. 注意虚拟主机时可能会有安全问题.

用tail -n 30 /var/log/maillog可以查看发送mail的过程记录, 错误会被记录在内, qmail出错时会自动回信给发件人, 不加-n 30只会看到自动回信的正确信息!

RedHat7中使用xinetd, 不同于老版的inetd, 配置文件放在/etc/xinetd.d/下, 修改如下:

pop3文件:

#default: off
# description: The POP3 service allows remote users to access their mail
# using an POP3 client such as Netscape Communicator, mutt,
# or fetchmail.

service pop3
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /var/qmail/bin/qmail-popup
server_args = test.com /var/qmail/bin/auth_pop
/var/qmail/bin/qmail-pop3d Maildir
only_from = 0.0.0.0
log_type = FILE /var/log/maillog
disable = no
log_type = FILE /var/log/xinetd.log
log_on_success = HOST
log_on_failure = HOST RECORD
}

smtp文件:
# default: off
# description: The POP3 service allows remote users to access their mail
# using an POP3 client such as Netscape Communicator, mutt,
# or fetchmail.

service smtp
{
socket_type = stream
protocol = tcp
wait = no
user = qmaild
server = /var/qmail/bin/tcp-env
server_args = -R /var/qmail/bin/qmail-smtpd
log_type = FILE /var/log/maillog
env = NODNSCHECK=""""
log_on_success = HOST
log_on_failure = HOST RECORD
only_from = 0.0.0.0
disable = no
}

如果有其它pop3, smtp的服务应该设定其disable项为yes, 以免冲突. /var/qmail/control/下的控制文件可以参考文献1的步骤5,一般需要以下文件:

ldapbasedn,ldaplogin,ldappassword,ldapuid,ldapgid,ldapserver

3. 安装php版ldap用户管理工具.(参考文献3)
主要配置都在common.inc文件里面, 如果你的php系统没有对.inc文件处理, 会暴露出系统配置, 建议修改成common.inc.php, 然后分别修改index.php和format.php的第二行. common.inc.php主要修改如下: 也可以参考postaci的安装文件:

//刚开始的时候可能问题很多, 建议设置成1, 以便观察错误在哪里.
$debug = 0;
//这里有些地方可能适合虚拟主机情况, 这里没用到, 待研究

$root_dn = ""dc=test, dc=com"";
$exchanges_dn = """".$root_dn;
$people_dn = """".$root_dn;
$lists_dn = """".$root_dn;

//这里要注意和步骤1中设置一致
$ldap_host = ""localhost"";
$bind_dn = ""cn=Manager, dc=test, dc=com"";
$pw = ""secret"";
$mainTitle = ""LDAP user admin"";

//这里要和步骤2中设置一致
$qmailuid = 501;
$qmailgid = 501;
$messageStoreDir = ""/mail"";

$mailQuota = ""10000000000S,100000C"";
$generalUser = ""steeven"";

/* not sure on the relevance of this... */
$mailHost = ""test.com"";

//你的公司部门, 可增减, 自己汉化吧 :)
$org_units = array( ""Routed"", ""Switched"", ""Colocation"", ""Networks"", ""Metro"", ""Recruitment"", ""Commercial"", ""Finance"", ""IT"", ""Marketing"" );

$acc_status = array( ""active"", ""nopop"", ""disabled"" );
$default_email = ""test.com"";
$logoImg = ""../poweredby.png"";
$ver = ""0.03"";

这个老外写的管理工具很好用, 可以设置转发mail, 无限mail别名; 按地域划分公司组织, 下面又分部门, 每个部门又可以指定邮件, 发给部门的邮件可以指定哪些人来接受. 也可以自定义一些maillist, 管理参加人员. 充分体现了ldap的灵活性. 难怪notes, windows都向ldap靠拢 :)

如果qmail没有设置成自动创建用户目录, 可以在add.php第188行增加如下代码:
if (!is_dir($messageStoreDir.""/"".$uid[0])){
mkdir($messageStoreDir.""/"".$uid[0],0770);
}
if (!is_dir($messageStoreDir.""/"".$uid[0].""/"".$uid)){
mkdir($messageStoreDir.""/"".$uid[0].""/"".$uid,0770);
}

在add.php中增加用户时的LoginId似乎也有点问题, 可直接采用firstName:
function create_username() {
var first_str = document.user_details.elements[2].value;
document.user_details.elements[11].value = first_str.toLowerCase();
}

利用参考文献4中的LdapBrowser可以看到对LDAP的相关修改, 或者手动修改.

4. 安装Postaci, webmail(参考文献2).
这是一个基于php的webmail, 具有比较完善的功能, 而且支持imap, pop3. 需要mysql支持. 用户可以自行汉化, 文件在lang目录下. 解压后修改includes目录下global.inc文件(有安全顾虑, 参考步骤3), 里面有配置说明.
Following doc/INSTALL to install

安装完成后添加适当用户, 然后就可以通过becky, outlook, foxmail....等收发邮件. 用浏览器打开postaci的安装目录就可以通过web收发mail了.