web-dev-qa-db-ja.com

mailx:nss-config-dir = / etc / pki / nssdb /:そのようなファイルまたはディレクトリはありません

リモートSMTPサーバー(私の場合はoffice365 SMTPサーバー)を使用してmailxを使用して電子メールを送信しようとしています。

コマンドは次のとおりです。

# echo "THis is the Body of the email"  | mailx -v -s "This is email subject" -S smtp-use-starttls -S ssl-verify=ignore  -S smtp-auth=login -S smtp=smtp://smtp.office365.com:587 -S [email protected] -S [email protected] -S smtp-auth-password=user_password [email protected] -S nss-config-dir="/etc/pki/nssdb/"

そして、それは以下のエラーで失敗します:

nss-config-dir=/etc/pki/nssdb/: No such file or directory
"/root/dead.letter" 11/339
Resolving Host smtp.office365.com . . . done.
Connecting to 132.245.80.146 . . . connected.
220 BY2PR02CA0047.Outlook.office365.com Microsoft ESMTP MAIL Service ready at Wed, 5 Nov 2014 10:08:22 +0000
>>> EHLO ip-10-0-1-10.us-west-2.compute.internal
250-BY2PR02CA0047.Outlook.office365.com Hello [54.201.139.35]
250-SIZE 78643200
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250 CHUNKING
>>> STARTTLS
220 2.0.0 SMTP server ready
Missing "nss-config-dir" variable.
"/root/dead.letter" 11/339
. . . message not sent.

したがって、実際のエラーはnss-config-dir=/etc/pki/nssdb/: No such file or directory

これで、以下のnss-config-dirオプションで必要に応じて、必要な証明書とキーを備えた適切なディレクトリができました。

# ls -ld /etc/pki/nssdb/
drwxr-xr-x. 2 root root 4096 Aug 13  2013 /etc/pki/nssdb/

# ls -ltr /etc/pki/nssdb/
total 124
-rw-r--r--. 1 root root 65536 Jan 12  2010 cert8.db
-rw-r--r--. 1 root root 16384 Jan 12  2010 secmod.db
-rw-r--r--. 1 root root  9216 Jan 12  2010 cert9.db
-rw-r--r--. 1 root root 11264 Jan 12  2010 key4.db
-rw-r--r--. 1 root root 16384 Jan 12  2010 key3.db
-rw-r--r--. 1 root root   451 Jan  9  2013 pkcs11.txt

nss-config-dirからのman mailxに関する情報は次のとおりです。

      A  directory  that contains the files certN.db to retrieve certificates, keyN.db to retrieve private keys, and secmod.db, where N is a digit.
      These are usually taken from Mozilla installations, so an appropriate value might be  ‘~/.mozilla/firefox/default.clm’.   Mailx  opens  these
      files  read-only  and  does  not  modify  them.   However,  if the files are modified by Mozilla while mailx is running, it will print a ‘Bad
      database’ message.  It may be necessary to create copies of these files that are exclusively used by mailx then.  Only applicable  if  S/MIME
      and SSL/TLS support is built using Network Security Services (NSS).

SElinuxも無効になっています:

# sestatus
SELinux status:                 disabled

質問:

mailxコマンドがnss-config-dir=/etc/pki/nssdb/: No such file or directoryと言っているのに、必要なディレクトリとキー/証明書ファイルが含まれているのはなぜですか?

これが私の環境情報です:

# uname -a
Linux ip-10-0-1-10.us-west-2.compute.internal 2.6.32-358.14.1.el6.x86_64 #1 SMP Mon Jun 17 15:54:20 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux

# lsb_release -a
LSB Version:    :base-4.0-AMD64:base-4.0-noarch:core-4.0-AMD64:core-4.0-noarch:graphics-4.0-AMD64:graphics-4.0-noarch:printing-4.0-AMD64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 6.4 (Santiago)
Release:        6.4
Codename:       Santiago

# rpm -qa | grep mailx
mailx-12.4-6.el6.x86_64
1
slayedbylucifer

失敗の根本的な理由は、-S nss-config-dir="/etc/pki/nssdb/"設定after受信者の配信アドレスを追加したため、ファイルベースの配信ターゲットとして扱われていることをお勧めします。

これは、回答で提供されるstrace出力で確認できます。

stat("nss-config-dir=/etc/pki/nssdb/", 0x7fff7073a310) = -1 ENOENT (No such file or directory)

statが、ディレクトリnss-config-dir=/etc/pki/nssdb/ではなく、/etc/pki/nssdb/というファイルにアクセスしようとしていることに注意してください。

このように、リストの最後に受信者のアドレスを入れてみてください

echo "This is the body of the email" |
mailx -v -s "This is email subject" \
    -S smtp-use-starttls \
    -S ssl-verify=ignore \
    -S smtp-auth=login \
    -S smtp=smtp://smtp.office365.com:587 \
    -S [email protected] \
    -S [email protected] \
    -S smtp-auth-password=user_password \
    -S nss-config-dir="/etc/pki/nssdb/" \
    [email protected]
2
roaima

何が問題だったのかわかりません。 buntu 12.04上記のコマンドwithoutnss-config-dirオプションを試しましたが、問題なく動作しました。ここにコマンドがあります:

# echo "THis is the Body of the email"  | mailx -v -s "This is email subject" -S smtp-use-starttls -S ssl-verify=ignore  -S smtp-auth=login -S smtp=smtp://smtp.office365.com:587 -S [email protected] -S [email protected] -S smtp-auth-password=user_password [email protected]

なぜRHELで動作しないのかわかりません。このコマンドでRHELでstraceを実行しましたが、問題を理解できませんでした。 straceは以下のメッセージを出しました:

stat("nss-config-dir=/etc/pki/nssdb/", 0x7fff7073a310) = -1 ENOENT (No such file or directory)

strace :(でも、なぜこのディレクトリがまったく検出されないのかわかりません。

また、RHELでは、コマンドがすぐに失敗して以下のエラーが発生するため、nss-config-dirを省略することはできません。

Missing "nss-config-dir" variable.
"/root/dead.letter" 11/346
. . . message not sent.

ただし、Ubuntuでは、nss-config-dirは不要であり、コマンドは正常に実行されました。

いずれにせよ、Ubuntuで生き残ることができるので、このトピックを閉じます。

1
slayedbylucifer

MSにはバグのあるTLS実装があります。

次の構成データでStunnelを使用して、これを克服することができました。

[office365-smtp]
client = yes
accept = 192.168.100.25:25
connect = my-personal-id.protection.Outlook.com:25
protocol = smtp
verify = 2
CAfile = ca-cert.pem
checkHost = my-personal-id.protection.Outlook.com
1
mjoao