Вопрос Какой самый безопасный способ использования разрешений sudo в скрипте?


У меня есть сценарий bash, который должен выполнять некоторые действия при использовании sudo, как с правами пользователя root, так и с разрешениями для других пользователей, такими как основной пользователь в базе данных postgres. Эти действия необходимо выполнить без использования пароля, основные действия - скопировать некоторые файлы, указанные в файле списка, доступ к которым можно получить только root, для запроса, существует ли база данных postgres с определенным именем и сбрасывать с базы данных.

Пользователь, запускающий скрипты, отвечает за запуск нескольких разных сценариев. Я понимаю, что могу редактировать /etc/sudoers файл с visudo с линией вроде:

user ALL=(pg_dump_user) NOPASSWD:/usr/bin/pg_dump

или

user ALL=(pg_dump_user) NOPASSWD:/usr/bin/psql -lqt

Я знаю, что могу сделать команды в файле sudoers более конкретными, добавив опции команды и т. Д.

Было бы безопаснее называть скрипт, который можно редактировать только root и используя этот скрипт в записи sudoers. Очевидно, что при таком подходе мне нужно убедиться, что права на каталоги для местоположения сценария верны или их можно просто заменить чем-то злым. Есть ли какие-либо другие меры, которые я могу предпринять, чтобы сделать это более безопасным?


4
2017-10-05 10:45


происхождения


Безопаснее? Не знаю. Более удобно? Вероятно. Если вы укажете аргументы команде sudoer без подстановочных знаков, sudo будет ожидать, что команда будет предоставлена в точку как есть, поэтому вам, возможно, придется использовать подстановочные знаки и * может открыть банку червей в зависимости от команды. Сценарий может облегчить вам использование этого шаблона, сохраняя при этом некоторую гибкость. Но все зависит от ... - muru
Я думал, что это может быть вполне зависимо от того, какие команды фактически выполняются. - Arronical
Помимо разрешений, в зависимости от того, как параноид вы используете ошибки, такие как shellshock, используйте более простую оболочку, например, для скрипта, или используйте более безопасный язык, такой как Python, где вы должны называть меньшее количество внешних программ. - muru


ответы:


Самое простое решение - просто включить ваш скрипт в sudoers. Это не должно приводить к проблемам, связанным с заменой скрипта ... пока ни один из родительских каталогов не будет доступен для записи пользователям без полномочий root. Однако любые ошибки безопасности в вашем скрипте будут запускаться как целевой пользователь, что может привести к чему-то сомнительному.

Самым безопасным решением является либо эскалация только при необходимости с использованием sudo в вашем скрипте, либо для написания вашего сценария очень тщательно, и его код проверяется кем-то знакомым с вашими проблемами безопасности.

В Второй комментарий муру к вопросу, предполагалось, что чем проще язык сценариев (и код), тем менее он подвержен дефекту безопасности. Я согласен с этим. Ограничить его тире (если у вас есть тире как / bin / sh) действительно поможет в этом. Использование более полного языка, такого как python, увеличивает возможности как для того, что вы хотите, так и для того, что может пойти не так, поэтому я предлагаю только вам, если вам более удобно, чем простой скрипт оболочки POSIX.

В конечном счете это зависит от того, что делает ваш код. Выясните свои риски и сколько усилий потребуется для их контроля, а затем взвесить друг друга. Кто может злоупотреблять этим? Судо оставляет контрольный след, так же как угроза быть уволенной или изгнана настолько, чтобы держать потенциальных насильников в очереди?


0
2017-07-03 20:23