run-as-root

Globalкритичнонужен перезапуск

Работать от root или от пользователя pmta
в конфигурации это строкаrun-as-root trueвнутри блока Global
От чьего имени работает почтовик

Выбирает, работать ли PowerMTA от root или от непривилегированного пользователя pmta. Для работы от pmta значение должно быть false — и это не переключатель на лету: смена требует перезапуска службы.

Умолчание — root. Отсутствие строки означает работу с полными правами, а не наоборот. Читая чужую конфигурацию, помнить об этом важнее, чем кажется: непривилегированная работа включается только явно.

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

Что придётся поправить вместе с этим. Руководство перечисляет три требования сразу: значение false, порты приёмников выше 1024 и поднятые пределы на файлы и процессы через /etc/security/limits.conf. А при переходе с root на pmta — ещё и смена владельца пяти каталогов MTA: настроек, состояния, журналов, спула и установки. Файлы там созданы от root, и без этого узел упрётся в отказ по правам.

Главная ловушка. Порты. Узел, переведённый на pmta без переноса приёмников выше 1024, просто не поднимется — и скажет об этом в отдельном файле ошибки старта, а не в обычном журнале. Второй по частоте случай тише: конфигурацию применили перечитыванием, она говорит no, а процесс как работал от root, так и работает.
Что делает Хаб. Не пишет — строка убрана из шаблонов 29.08.2026.

Почему убрали, а не довели до конца. § 2.2.1 требует четырёх вещей разом: false, порты приёмников выше 1024, пределы в /etc/security/limits.conf и смена владельца пяти каталогов MTA. Выполнялась одна — сама строка. Приёмник жалоб оставался на 25-м порту, пределы установщик поднимал командой ulimit внутри сессии подключения, которая тут же закрывается, владельца менял у двух каталогов из пяти и только при установке из rpm. Замеры 27.08 и 29.08 показали итог: процессы на узлах работали от root, потому что перечитывание конфигурации эту строку не подхватывает, а Хаб применяет именно им.

Строка при этом врала: кто открывал конфигурацию, читал «узел непривилегированный». Убрали видимость, а не защиту — поведение узлов не изменилось.

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

Одной строки мало. Она включает намерение, а не результат. Работающая непривилегированная установка — это false плюс порты выше 1024 плюс пределы в limits.conf плюс права на каталоги MTA.

Перезапуск, а не перечитывание. Единственный способ применить — остановить и запустить службу; доставка на это время встаёт, поэтому менять значение стоит в окно, а не «между делом».

Проверять процессом, а не файлом. Написанное в конфигурации ничего не говорит о том, от кого работает узел прямо сейчас.

Всё из руководства: умолчание, требование перезапуска и три условия непривилегированной работы из раздела об установке.
Пример в конфигурации
# переход на пользователя pmta — вступает в силу только после перезапуска
run-as-root no# порты приёмников при этом обязаны быть выше 1024
smtp-listener 0/0:2525
smtp-listener 0/0:2526
Строка директивы из руководства; соседние показывают требование, без которого узел под pmta не поднимется, — приём отчётов при таком переходе уезжает с 25-го порта, и его надо чем-то пробрасывать.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Применяют смену перечитыванием конфигурации

§ 3.3.1.9

Чем чреватоПеречитывание обновляет файл, но не меняет личность работающего процесса. Узел остаётся с полными правами неопределённо долго, а конфигурация утверждает обратное — и её читают как правду.
Как заметитьВ конфигурации run-as-root no, а процесс MTA работает от root. Ошибок при этом нет ни одной.
Как правильноПерезапускать службу и проверять владельца процесса; без проверки отличить сделанное от написанного нельзя.

Переводят на pmta, оставив приёмник на 25-м порту

§ 2.2.1

Чем чреватоНепривилегированный процесс не занимает порты ниже 1024. Причина отказа уходит в отдельный файл ошибки старта, и там её никто не ищет.
Как заметитьПосле перезапуска служба не поднимается, обычный журнал пуст.
Как правильноПеренести приёмники выше 1024, а 25-й отдать пробросу или тому, что умеет держать привилегированный порт.

Меняют значение, не сменив владельца каталогов

§ 2.2.1

Чем чреватоФайлы в пяти каталогах MTA созданы от root. Больнее всего спул: узел не сможет записать очередь, то есть примет письмо и потеряет его.
Как заметитьСлужба стартует и тут же падает на отказах по правам — или работает, но не пишет учёт и журналы.
Как правильноСменить владельца всех пяти каталогов на pmta до перезапуска, а не после.

Считают ulimit в сессии подключения настройкой узла

§ 2.2.1

Чем чреватоulimit действует только внутри той оболочки, где выполнен, и закрывается вместе с ней. Служба стартует со своими пределами — теми, что записаны в системе.
Как заметитьПределы «подняты», а служба всё равно упирается в тысячу с небольшим дескрипторов.
Как правильноПисать пределы в /etc/security/limits.conf (или в юнит службы) и проверять их у работающего процесса, а не в своей сессии.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
run-as-root <boolean>
Значения
yes | no | true | false; умолчание true, то есть работа от root
Умолчание
true § 3.3.1.9
Применение
нужен перезапуск сервиса
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: это свойство процесса целиком, и более узкой области у него не бывает. Строка живёт в корне файла. Перечитыванием (pmta reload) не применяется — только перезапуском службы.
Как проверить на узле
От кого узел работает на самом деле, знает только система:
ps -o user= -C pmtad
pmta — переход состоялся, root — нет, сколько бы ни было написано в конфигурации. Проверять надо после каждого применения, которое трогало эту строку: перечитывание её не подхватывает.
В Хабе
Управляется
Инфраструктура → Параметры узла
Цена ошибки
с перерывом: применение прерывает работу узла
Сценарии
Жизненный цикл конфигурации · Безопасность узла
Важность
критично