mailx: nss-config-dir = / etc / pki / nssdb /: Нет такого файла или каталога

Я пытаюсь отправить электронную почту с помощью mailx с помощью удаленного SMTP-сервера (в моем случае это SMTP-сервер Office365).

Вот команда:

 # 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 from=user@company.com -S smtp-auth-user=user@company.com -S smtp-auth-password=user_password someone@gmail.com -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 "/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 как 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 

Я не знаю, в чем проблема. На Ubuntu 12.04 я попытался nss-config-dir команду без nss-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 from=user@company.com -S smtp-auth-user=user@company.com -S smtp-auth-password=user_password someone@gmail.com 

Я понятия не имею, почему он не работает на RHEL. Я побежал на RHEL на эту команду, но не мог понять проблему. strace дал ниже сообщение:

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

Я не знаю, почему этот каталог вообще не обнаружен даже в strace 🙁

Кроме того, On RHEL, исключение nss-config-dir не является вариантом, так как команда немедленно завершится с ошибкой ниже:

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

Однако, в Ubuntu, nss-config-dir не требуется, и команда работает нормально.

Как бы то ни было, я закрываю эту тему, поскольку я могу выжить с Ubuntu.

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 

Я бы предположил, что основной причиной отказа является то, что вы -S nss-config-dir="/etc/pki/nssdb/" параметр -S nss-config-dir="/etc/pki/nssdb/" после адреса доставки получателя, поэтому он рассматривается как файл- основанный на цели доставки.

Вы можете видеть это в своем выводе 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 from=user@company.com \ -S smtp-auth-user=user@company.com \ -S smtp-auth-password=user_password \ -S nss-config-dir="/etc/pki/nssdb/" \ someone@gmail.com