web-dev-qa-db-ja.com

sendmailの-bsスイッチがPHPアプリ内からSELinux拒否を引き起こすのはなぜですか?

SELinuxが有効になっているCentOS7.5サーバー(LAMP、PHP-FPM)で、Laraval5.3アプリケーションが電子メールを送信しようとしたときに奇妙な問題が発生しました。

アプリケーションのメール構成は_/usr/sbin/sendmail -bs_を使用するように設定されており、電子メールを送信しようとすると、アプリケーションは_Swift_TransportException' with message 'Expected response code 220 but got code "", with message ""' in vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:383_をスローします。

SELinuxを疑って、私はさらに深く掘り下げ、_audit2why_は次のことを示しています。

type=AVC msg=audit(1553606152.177:1240981): avc: denied { execute } for pid=3896 comm="sendmail" name="smtpd" dev="vda1" ino=12904557 scontext=system_u:system_r:system_mail_t:s0 tcontext=system_u:object_r:postfix_smtpd_exec_t:s0 tclass=file

SELinuxを無効にすると、問題は解決します。代わりにmailドライバーを使用する場合、これはSwiftMailerにPHPのmail()関数(およびその後、デフォルトのphp.iniに従って_-t -i_スイッチのみを含むsendmailビン)を使用するように指示すると思います。 config)動作します。 SMTPドライバーを使用すると機能し、Laravalメール構成のsendmailパスを_/usr/sbin/sendmail -t -i_に変更すると機能します。

Sendmailで_-bs_スイッチを使用するとSELinuxが文句を言うのはなぜですか?

_man sendmail_によると:

_-bs Stand-alone SMTP server mode. Read SMTP commands from standard input, and write responses to standard output.  In stand-alone SMTP server mode, mail relaying and other access controls are disabled by default. To enable them, run the process as the mail_owner user.
_

先に進んでその構成を使用する場合(理由があると思います)、動作を可能にするためにSELinuxモジュールをコンパイルしてインストールすることが本当に期待されていますか? JustWorkTMが必要なもののようです。

ボーナスの質問:PHPがmailを使用できるようにするには、sebool _httpd_can_sendmail_が_1_である必要があるという印象を受けました。確かに、他のプロジェクトにも当てはまることがわかりました。このフラグは、上記のメールドライバーのいずれかを使用する場合、(上記の_-bs_シナリオを除いて)すべてがオンでなくても機能するという点で、まったく影響がないようです。どうして?

1
jamieburchell

通常、(Web)アプリはsmtpdを実行しないでください。これは、中央のSMTPサーバーでより適切に管理および保護されます。 SELinuxは、sendmailをメール送信エージェントのみに制限することに成功しました。

代替のsendmail呼び出しは、このポリシーで許可されているsmtpdを開始せずにメールをキューに入れます。

これはhttpdコンテキストからの移行ではなかったため、ブール値は効果がありませんでした。拒否はsystem_mail_tからpostfix_smtpd_exec_tであったことに注意してください。デフォルトのポリシーでは、sendmailがsmtpdを実行することはまったく許可されていません。

1
John Mahowald