22.10. 使用 smrsh 保护 Sendmail 安全

smrsh 程序旨在替代/bin/sh在 Sendmail 的程序邮件器定义中。它是一个受限的 shell 实用程序,可以通过/etc/smrsh目录,指定可供 Sendmail 使用的可执行程序列表。更准确地说,即使心怀恶意的人能够让 Sendmail 运行程序而无需通过 aliases 或 forward 文件,smrsh 也会限制他或她可以执行的程序集。当与 Sendmail 结合使用时,smrsh 有效地将 Sendmail 的程序执行范围限制为仅 smrsh 目录中指定的那些程序。如果您已按照我们上面的步骤操作,则 smrsh 程序已在您的计算机上编译并安装在以下位置:/usr/sbin/smrsh.

  1. 我们需要做的第一件事是确定 smrsh 应允许 Sendmail 运行的命令列表。默认情况下,我们包括但不限于:

    • /bin/mail-如果您的系统上安装了它

    • /usr/bin/procmail-如果您的系统上安装了它

    Warning

    您不应在可接受的命令列表中包含解释器程序,例如 sh(1)csh(1)perl(1)uudecode(1)sed(1) - 流编辑器。

  2. 接下来您需要填充/etc/smrsh目录,其中包含允许 Sendmail 执行的程序。为了防止程序重复并做好工作,最好从/etc/smrsh而不是将程序复制到此目录。要允许 mail 程序/bin/mail,请使用以下命令
             [root@deep] /# cd /etc/smrsh
             [root@deep ]/smrsh# ln -s /bin/mail mail
             
    要允许 procmail 程序/usr/bin/procmail,请使用以下命令
             [root@deep] /# cd /etc/smrsh
             [root@deep ]/smrsh# ln -s /usr/bin/procmail procmail
             
    这将允许 mail 和 procmail 程序从用户的.forward文件或一个aliases文件中运行,该文件使用程序语法。

    Important: Procmail 仅在邮件枢纽服务器中是必需的,而在本地客户端邮件服务器中则不需要。如果您已将系统配置为邮件枢纽服务器,则按照上述说明创建与 procmail 的链接;如果您已将系统配置为本地客户端服务器,则跳过上述 procmail 步骤。

  3. 现在我们可以配置 Sendmail 以使用受限 shell。程序邮件器由 Sendmail 配置文件中的单行定义,/etc/mail/sendmail.cf。您必须在sendmail.cf文件中修改这单行 Mprog 定义,方法是将 /bin/sh 规范替换为/usr/sbin/smrsh。编辑sendmail.cf文件,vi/etc/mail/sendmail.cf并更改行

    示例 22-3。sendmail.cf

             Mprog,  P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
             
    应更改为
             Mprog,  P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
             

  4. 现在使用以下命令手动重启 sendmail 进程
             [root@deep] /# /etc/rc.d/init.d/sendmail restart
             

Note: 在我们的sendmail.mc上述邮件枢纽服务器的配置文件中,我们已经配置了此行 Mprog 以使用受限 shell/usr/sbin/smrsh使用 m4 宏FEATURE(`smrsh',`/usr/sbin/smrsh'),所以如果/usr/sbin/smrsh规范已在您的/etc/mail/sendmail.cf邮件枢纽中继的文件中设置,请不要感到惊讶。

相反,对网络中的其他/etc/mail/sendmail.cf文件(例如使用用于 nullclient 本地或邻居客户端和服务器的文件)使用上面显示的技术。null.mc宏配置文件生成的/etc/mail/sendmail.cf文件。