<smtp-user>set by the Hub
The line sets the login’s password. It applies only with the password login method — authentication-method set to password, which is also the default.
The password is stored in plain text, and this is a requirement, not an oversight. The manual explains: otherwise the full set of SASL mechanisms cannot be supported — CRAM-MD5 computes the challenge response from the password itself, and a hash is not enough for it. And right away it names the only measure: the permissions on the configuration file must be as strict as possible.
So the node’s configuration file is a password store. Anything that can read it reads them too: the configuration page in the web monitor, the file-based login of the HTTP API, a backup, a copy made for troubleshooting.
The engine does have a passwordless method — certificate login; there this problem does not arise at all.
Revoking access one at a time then becomes impossible: removing access for one means changing the password for everyone.
🔴 There is one password for all of a node’s logins. Both the pool’s common login and the logins of individual “domain plus address” pairs get the same string. The names differ, the secret is shared — so today the separation of logins is nominal.
What to set. The manual places no requirements on the value itself — they come from the circumstances:
| Property | Why |
|---|---|
| unique for each login | otherwise logins separate nothing, and revoking one access affects everyone |
| long and random | the submission port is usually open to the network, and there is no login attempt limit by default |
| no spaces or quotes | the configuration parser reads the value as a single word |
If the password rotation process is so inconvenient that nobody will ever change them, certificate login is the more honest choice: there it is not a secret that needs changing but a certificate, and it has its own expiration date.
# each login has its own password — otherwise the names separate nothing <smtp-user shop-example-com> password 8xK2-qRt7-vD1s-mZ4w source {shop-example-com-auth} </smtp-user>
what people get wrong and how it ends3 mistakes▶
§ 10.1.1
our experience
§ 3.3.8.1
2 relations
ls -l /etc/pmta/config /etc/pmta/virtualhost.txt grep -c '^ *password ' /etc/pmta/virtualhost.txt
3 articles
◇How the node selects a source and combines its settingsA connection falls under all source blocks whose addresses cover it, and they act merged — the narrow one overrides the wide one; named blocks are attached only by direct reference.◇Submission logins, plain-text passwords and per-user settingsA sender logs in with one of three methods; each login is a configuration block with a plain-text password, and that login’s named source overrides what its address would have given.◇A license for a fleet, not for a serverThe license is not bound to a server: it is installed on as many machines as the instance limit allows, and the nodes send volume statistics to the vendor every hour.