Вопрос или проблема
Я только что настроил массив RAID 1 с использованием mdadm
на Debian. Я пытаюсь включить мониторинг электронной почты mdadm
с помощью msmtp
. Я следую документации msmtp
(https://marlam.de/msmtp/msmtp.html#Examples) и хочу сохранить пароль приложения Gmail с помощью secret-tool
или gpg
.
Оба инструмента работают отдельно:
- Я могу получить пароль приложения с помощью:
secret-tool lookup host smtp.gmail.com service smtp user [username]
или
gpg --no-tty --quiet --decrypt ~/.msmtp-gmail.gpg
- Я также могу успешно отправлять письма, используя:
echo "test email" | msmtp [emailaddess]@gmail.com
Однако, когда я запускаю sudo mdadm --monitor --scan --test -1
, я получаю следующий вывод:
- С использованием
secret-tool
sendmail: cannot read output of 'secret-tool lookup host smtp.gmail.com service smtp user [username]'
- С использованием
gpg
gpg: can't open '/root/.msmtp-gmail.gpg': No such file or directory
gpg: decrypt_message failed: No such file or directory
sendmail: cannot read output of 'gpg --no-tty --quiet --decrypt ~/.msmtp-gmail.gpg'
- С использованием пароля в открытом виде
sudo mdadm --monitor --scan --test -1
работает, когда я сохраняю пароль непосредственно в файле /etc/msmtprc
. Однако я хочу этого избежать.
Вопрос
secret-tool
, gpg
и msmtp
все, кажется, работают корректно, когда запускаются пользователем. Проблема, кажется, возникает, потому что mdadm
запускается с sudo
.
Как я могу обойти эту проблему? Я хотел бы придерживаться лучших практик в отношении разрешений на файлы/безопасности.
В конечном счете, все, что имеет беспрепятственный доступ к каким-то данным, имеет доступ к этим данным.
Шифрование, предоставляемое secret-tool, полезно только потому что данные недоступны, пока вы не войдете в систему (и не используете ваш пароль для входа, чтобы их расшифровать¹) — но если бы они были разблокированы все время для предоставления доступа root, они были бы… разблокированы все время.
¹ это также причина, по которой инструмент не работает, когда запускается от другого пользователя; служба, хранящая расшифрованные данные, работает на уровне пользователя, и mdadm/secret-tool, запущенные от root, просто не знают, что они должны подключиться к хранилищу секретов UID 1001.
То же самое с GPG; вы можете заставить его работать от root, но закрытый ключ придется хранить без пароля, чтобы mdadm мог его использовать, и если зашифрованный файл находится на том же компьютере, что и ключ без пароля, то это тоже самое, что хранить его в открытом тексте.
Есть способы заставить это работать, например, запуск gpg-agent от root, чтобы можно было использовать защищенный паролем ключ, который необходимо разблокировать один раз за загрузку каждый раз при перезагрузке системы — но хотя это хорошо работает для определенных сценариев использования, система мониторинга RAID может не быть одним из них. (Что произойдет, если сервер перезагрузится, и вы просто никогда не разблокируете для него GPG?)
Таким образом, на безголовом сервере относительно нормально хранить учетные данные в открытых текстовых файлах, доступных только root (или другой учетной записи службы). Например, TLS-клиентские или серверные сертификаты обычно находятся в открытых местах, как и ключи Kerberos и закрытые ключи SSH хоста, которые идентифицируют машину.
Хотя частично смягчает риски то, что такие учетные данные обычно не разделяются между многими различными вещами, а принадлежат исключительно этой службе, поэтому можно ограничить их доступ. То есть, вы не должны помещать ваши собстленные данные аккаунта Gmail в /etc, а вместо этого создать отдельную учетную запись электронной почты (любого провайдера) и использовать ее в качестве “отправителя”. Таким образом, вы снижаете последствия утечки этих учетных данных с “ваша вся онлайн-личность под угрозой” до “одноразовый почтовый ящик без чего-либо внутри под угрозой”.
.
Ответ или решение
У вас возникли проблемы с мониторингом электронной почты через msmtp
для массива RAID, настроенного с помощью mdadm
на Debian. Причина, по которой это работает от имени пользователя, но не работает при запуске через sudo
, связана с управлением доступом и приватностью данных.
Проблема и её причины
1. Использование secret-tool
Когда вы запускаете команду с помощью sudo
, она выполняется в контексте суперпользователя root
, а не обычного пользователя. secret-tool
хранит данные безопасности в пользовательском хранилище, которое не доступно другим пользователям, включая root
. Это обусловлено безопасностью: каждый пользователь имеет свое изолированное хранилище, которое расшифровывается только при входе в систему. Таким образом, root
, не имеющий доступа к сеансу пользователя, не может получить эти данные напрямую.
2. Использование gpg
Аналогичный принцип действует и для gpg
. Ваши файлы и ключи, используемые с gpg
, находятся в домашнем каталоге пользователя и не доступны из-под root
, если их напрямую туда не положить. gpg
требует доступ к ключу для расшифровки, а доступ к такому ключу из-под root
невозможен без физического перемещения ключей в директоратуру пользователя root
и снятия пароля для доступа к ключам, что компрометирует безопасность.
Решения
1. Использование текстового пароля
На практике в серверной инфраструктуре часто сохраняют пароли напрямую в конфигурационных файлах, доступных только root
. Хотя это не идеальный с точки зрения безопасности подход, но он работает. Убедитесь, что файл имеет строгие права доступа (например, 600
) и находится под защитой пользователя root
.
2. Создание отдельной учетной записи
Создайте отдельную учетную запись для отправки уведомлений о состоянии RAID-массива. Это уменьшит риски, связанные с утечкой данных, поскольку учетная запись будет предназначена только для этих целей и не будет связана с вашей личной информацией.
3. Дополнительные меры
Вы можете настроить gpg-agent
для работы из-под root
, что позволит разблокировать ключ один раз за сеанс загрузки. Однако это может вызвать проблемы в случае перезагрузки сервера, если вы забудете разблокировать агент.
Заключение
Проблема доступа через sudo
к пользователям данным и ключам, связанным с безопасностью, является следствием архитектурных принципов безопасности. Это также напоминает о важности соблюдения правил безопасности при работе с любой критически важной инфраструктурой. Исполнение мер по созданию специализированных учетных записей и правильного управления доступом к конфигурациям — это практичные и действенные шаги к защите вашей системы от компрометации.