- Сообщения
- 202
- Реакции
- 0
При попытке удалить почтовый ящик через веб-интерфейс Modoboa возникает ошибка:
При этом создание и редактирование ящиков работает нормально. В логах ничего не видно, а ручное выполнение команд от пользователя
Причина
Решение
Код:
Ошибка получения места нахождения почтового ящика (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.
Решение
- Определяем пользователя, от которого работает Modoboa
В нашем случае это был modoboaКод:ps aux | grep -E '(uwsgi|gunicorn)' | grep -v grep(uid=1001). - Проверяем владельца почтовой директории
Владелец:Код:ls -ld /srv/vmailvmail:vmail - Создаём правильный файл sudoers
Код:sudo visudo -f /etc/sudoers.d/modoboa - Вставляем следующее содержимое:
Код:# Разрешаем 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 без пароля
- Устанавливаем правильные права
Код:sudo chmod 440 /etc/sudoers.d/modoboa - Проверяем синтаксис
Код:sudo visudo -c - Добавляем PATH в конфиг uwsgi
Добавляем в конец:Код:sudo nano /etc/uwsgi/apps-enabled/modoboa_instance.ini
Код:env = PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - Перезапускаем сервисы
Код:sudo systemctl restart modoboa-uwsgi sudo systemctl restart nginx - Проверяем работу sudo из-под modoboa
Код:# Входим в сессию modoboa sudo su - modoboa -s /bin/bash # Проверяем права sudo sudo -l # Пробуем выполнить команду от vmail sudo -u vmail ls -la /srv/vmail # должно работать без пароля! # Выходим exit - Финальная проверка в веб-интерфейсе
Удаляем тестовый ящик — ошибка исчезла!