Modoboa: ошибка "sudo: not found" при удалении почтового ящика на сервере с RAID

Board index Администрирование Программное обеспечение Modoboa

Description: Почтовый сервер на базе Modoboa

#1by mexan » 24.02.2026, 11:51

При попытке удалить почтовый ящик через веб-интерфейс Modoboa возникает ошибка:
Code: Select all
Ошибка получения места нахождения почтового ящика (b'/bin/sh: 1: sudo: not found\n')

При этом создание и редактирование ящиков работает нормально. В логах ничего не видно, а ручное выполнение команд от пользователя vmail через sudo работает без проблем.

Причина
  • Modoboa использует uwsgi, который работает от системного пользователя modoboa, а не от www-data.
  • В sudoers не были прописаны права для пользователя modoboa на выполнение команд от имени vmail.
  • Даже когда правила были добавлены, они не работали из-за:
    • Ограничений secure_path в sudo (переопределял PATH)
    • Слишком узкого списка разрешённых команд (Modoboa выполняет не только rm, но и другие команды для определения местоположения ящика)
  • В результате modoboa не мог выполнить нужные команды без пароля, а в неинтерактивном окружении uwsgi это приводило к ошибке sudo: not found.

Решение
  1. Определяем пользователя, от которого работает Modoboa
    Code: Select all
    ps aux | grep -E '(uwsgi|gunicorn)' | grep -v grep
    В нашем случае это был modoboa (uid=1001).
  2. Проверяем владельца почтовой директории
    Code: Select all
    ls -ld /srv/vmail
    Владелец: vmail:vmail
  3. Создаём правильный файл sudoers
    Code: Select all
    sudo visudo -f /etc/sudoers.d/modoboa
  4. Вставляем следующее содержимое:
    Code: Select all
    # Разрешаем modoboa выполнять любые команды от vmail без пароля
    Defaults:modoboa !requiretty
    Defaults:modoboa !secure_path
    Defaults:modoboa env_keep += "PATH"
    modoboa ALL=(vmail) NOPASSWD: ALL

    Пояснения:
    • !requiretty — отключает требование терминала (важно для неинтерактивных вызовов)
    • !secure_path — отключает переопределение PATH (чтобы sudo видел команды в окружении uwsgi)
    • env_keep += "PATH" — сохраняет PATH из окружения
    • modoboa ALL=(vmail) NOPASSWD: ALL — разрешает любые команды от vmail без пароля
  5. Устанавливаем правильные права
    Code: Select all
    sudo chmod 440 /etc/sudoers.d/modoboa
  6. Проверяем синтаксис
    Code: Select all
    sudo visudo -c
  7. Добавляем PATH в конфиг uwsgi
    Code: Select all
    sudo nano /etc/uwsgi/apps-enabled/modoboa_instance.ini
    Добавляем в конец:
    Code: Select all
    env = PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  8. Перезапускаем сервисы
    Code: Select all
    sudo systemctl restart modoboa-uwsgi
    sudo systemctl restart nginx
  9. Проверяем работу sudo из-под modoboa
    Code: Select all
    # Входим в сессию modoboa
    sudo su - modoboa -s /bin/bash

    # Проверяем права sudo
    sudo -l

    # Пробуем выполнить команду от vmail
    sudo -u vmail ls -la /srv/vmail   # должно работать без пароля!

    # Выходим
    exit
  10. Финальная проверка в веб-интерфейсе
    Удаляем тестовый ящик — ошибка исчезла!
Image
mexan
Администратор
Reputation: 0
Posts: 174
Topics: 133

#2by mexan » 24.02.2026, 11:59

Диагностика, которая мне помогла
Ключевые команды для поиска проблемы:
Code: Select all
# Кто владелец почты?
ls -ld /srv/vmail

# От кого работает uwsgi?
ps aux | grep uwsgi

# Какие правила sudo для modoboa?
sudo -u modoboa sudo -l

# Проверка sudo в неинтерактивном режиме
sudo -u modoboa /usr/bin/sudo -n -u vmail ls -la /srv/vmail
Image
mexan
Администратор
Reputation: 0
Posts: 174
Topics: 133


Return to Modoboa