password

<smtp-user>Хаб задаёт сам

Пароль логина подачи
в конфигурации это строкаpasswordвнутри блока <smtp-user>
Секрет, который обязан лежать открытым

Строка задаёт пароль логина. Она действует только при парольном способе входа — authentication-method со значением password, которое и есть умолчание.

Пароль хранится открытым текстом, и это требование, а не недосмотр. Руководство объясняет: иначе не поддержать весь набор механизмов SASL — CRAM-MD5 считает ответ на вызов из самого пароля, и хеша ему мало. И тут же называет единственную меру: права на файл конфигурации должны быть настолько строгими, насколько возможно.

Значит файл конфигурации узла — хранилище паролей. Всё, что умеет его прочитать, читает и их: страница конфигурации в веб-мониторе, файловый вход HTTP API, резервная копия, копия для разбора.

Способ без пароля у MTA есть — вход по сертификату; там этой задачи не возникает вовсе.

Главная ловушка — один пароль на несколько логинов. Логины заводят, чтобы разделить отправителей, а пароль ставят общий — так проще раздавать и проще менять. Разделение после этого только на бумаге: зная один пароль, отправитель входит под любым именем и получает права любого именованного источника.

Отзыв доступа при этом невозможен поштучно: снять доступ одному — значит сменить пароль всем.

Что делает Хаб. Пишет — в каждом блоке логина рабочей конфигурации. Значение задаёт пользователь в кабинете (от 8 до 64 знаков, без пробелов и кавычек), Хаб держит его в зашифрованном поле рабочей конфигурации и кладёт на узел открытым текстом: иначе MTA его не примет.

🔴 Пароль один на все логины узла. И общий логин пула, и логины отдельных пар «домен плюс адрес» получают одну и ту же строку. Имена разные, секрет общий — значит разделение логинов сегодня номинальное.

Рекомендуемые значения

Что ставить. Требований к самому значению руководство не предъявляет — они приходят из обстановки:

Свойство Почему
свой на каждый логин иначе логины ничего не разделяют, а отзыв одного доступа задевает всех
длинный и случайный порт подачи обычно открыт сети, а предела попыток входа по умолчанию нет
без пробелов и кавычек значение читается разбором конфигурации как одно слово

Если механизм ротации паролей неудобен настолько, что менять их никто не будет, — честнее вход по сертификату: там менять нужно не секрет, а сертификат, и срок у него есть свой.

Требование хранить открытым текстом, причина (поддержка SASL) и совет о правах на файл — из руководства, § 10.1.1 и § 3.3.8.1. Требования к значению наши.
Пример в конфигурации
# у каждого логина свой пароль — иначе имена ничего не разделяют
<smtp-user shop-example-com>
    password 8xK2-qRt7-vD1s-mZ4w    source {shop-example-com-auth}
</smtp-user>
Пароль лежит в файле открытым — так требует MTA. Защищает его только одно: права на сам файл.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается3 ошибки▶

Обращаются с конфигурацией как с файлом настроек

§ 10.1.1

Чем чреватоКопия для разбора, вложение в переписку, ветка в хранилище кода уносят все пароли подачи узла разом. Сменить придётся все, потому что лежат они рядом.
Как заметитьФайл конфигурации встречается вне узла.
Как правильноОбращаться с ним как с файлом ключей и не выносить с узла.

Дают всем логинам один пароль

наш опыт

Чем чреватоЛогины перестают разделять отправителей: под любым именем входит любой, кто знает единственный секрет. Отозвать доступ одному нельзя, не сломав подачу всем.
Как заметитьВ файле подачи одинаковая строка пароля у всех блоков пользователя.
Как правильноСвой пароль на логин. Тогда отзыв одного доступа не задевает остальных.

Задают пароль при другом способе входа

§ 3.3.8.1

Чем чреватоПри входе по сертификату или через LDAP строка не действует вовсе — и остаётся в файле лежать без дела, но с полным риском утечки.
Как заметитьВ блоке логина стоят и пароль, и способ входа, отличный от парольного.
Как правильноУбрать строку: секрет, который ничего не открывает, всё равно остаётся секретом в открытом файле.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
password <string>
Значения
строка
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<smtp-user>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <smtp-user> и относится к одному логину. Наследования у неё нет: блоки пользователей не сливаются между собой, как сливаются источники, — каждый описывает свою учётную запись целиком.
Как проверить на узле
Проверять стоит не значение, а права на файл, в котором оно лежит:
ls -l /etc/pmta/config /etc/pmta/virtualhost.txt
grep -c '^ *password ' /etc/pmta/virtualhost.txt
Читать файл должны только процесс узла и администратор. Вторая команда показывает, сколько паролей в нём лежит; если строк несколько, а значение одно — логины не разделены.
В Хабе
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла · Разделение отправителей