设置 sendmail php mail() 支持 chrooted Lighttpd 或 Apache web 服务器
一旦将 chroot() 调用应用于chrooted lighttpd或 apache 网络服务器,您将失去与真正的 /usr/sbin/sendmail 程序的连接。
php mail() 函数允许您发送邮件。要使用 Mail 函数,PHP 必须在编译时有权访问您系统上的 sendmail 二进制文件。如果您使用其他邮件程序(如 qmail 或 postfix),请确保使用随附的适当 sendmail 包装器。PHP 将首先在您的 PATH 中查找 sendmail,然后在以下位置查找:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib。强烈建议从您的 PATH 中获取 sendmail。此外,编译 PHP 的用户必须具有访问 sendmail 二进制文件的权限。由于 chroot,您无法访问 jail 之外的任何内容。
即使您复制 /usr/sbin/sendmail,它也不会起作用,因为它需要 /var 中的所有其他目录和 /etc/mail 目录中的 sendmail 配置文件。
那么如何在 chrooted jail webserver 中配置 php mail() 支持?
- 不要使用 php mail() 使用 php SMTP 类发送电子邮件(推荐方法 #1)
- 在 chrooted jail 中安装完整的 sendmail(这个工作量太大了)
- 在 chrooted jail 中安装静态链接的 mini_sendmail 和 /bin/sh。(推荐方法 #2)
任务:为 chrooted apache 或 lighttpd web 服务器设置静态 mini_sendmail
mini_sendmail读取其标准输入直到文件末尾,并将在那里找到的消息副本发送到列出的所有地址。通过连接到本地 SMTP 服务器来发送消息。这意味着 mini_sendmail 可用于从 chroot(2) 区域内发送电子邮件。但是,它需要创建管道,因此您还需要将 shell 复制到 chroot。
安装 mini_sendmail
键入以下命令:
# cd /opt
# wget http://www.acme.com/software/mini_sendmail/mini_sendmail-1.3.6.tar.gz
# tar -zxvf mini_sendmail-1.3.6.tar.gz
# cd mini_sendmail-1.3.6
编译 mini_sendmail
# make
将 mini_sendmail 复制到 chrooted 目录
假设你的 chroot 目录是 /webroot
# mkdir -p /webroot/usr/sbin
# cp mini_sendmail /webroot/usr/sbin/sendmail
为 mini_sendmail (sendmail) 配置 php
转到 /webroot 目录
# vi etc/php.ini
或
# vi /webroot/etc/php.ini
设置 sendmail 路径
sendmail_path = /usr/sbin/sendmail -t -i
重新启动 Apache 网络服务器
# /etc/init.d/httpd restart
# apachectl restart
或者重新启动 lighttpd 网络服务器
# /etc/init.d/lighttpd restart
复制 /bin/sh 或 /bin/bash
# cp /bin/sh /webroot/bin
# l2chroot /bin/sh
测试您的设置
创建php脚本-mailtest.php如下:
<?php
mail("you@yourcorp.com", "PHP Test mail", "Hope this works! ");
?>
将浏览器指向 http://yourcrop.com/mailtest.php
更多故障排除提示
(a)确保在 /webroot/etc 目录的 chrooted jail 中拥有 /etc/resolv.conf 和 /etc/hosts 文件。
(b)确保您的邮件服务器接受来自本地主机的连接(默认)
(c)查阅 jail 外的 /var/log/maillog (或你的 MTA 日志文件)以获取更多信息
# tail -f /var/logm/maillog