Назад | Перейти на главную страницу

Разница между запуском от имени пользователя root или учетной записи службы с записью файла sudoers

У меня есть эволюция Предыдущий вопрос.

Главный вопрос: каковы значимые различия между запуском программы от имени пользователя root и через учетную запись службы с записью файла sudoers?

Мне нужно развернуть сторонний программный агент в среде RHEL моего клиента, заботящегося о безопасности. В результате установки по умолчанию файлы и папки агента принадлежат пользователю root, и он запланирован для запуска при запуске, завершении работы или через файл crontab; но в любом случае он работает как корневой процесс, что никому из службы безопасности, похоже, не нравится.

Поставщик предположил, что более безопасной альтернативой является выполнение агента через учетную запись службы с записью файла sudoers: например:

agent-user ALL=NOPASSWD: /opt/agent/agent-executable

Но действительно ли это лучше с точки зрения безопасности? Или что лучше всего в этой ситуации?

На мой взгляд, в любом случае агент получит привилегированный доступ к серверу. А учетная запись службы - это настройка, которая (хотя и поддерживается поставщиком) кажется возможностью делать ошибки.

Является NOPASSWD: уязвимостью безопасности, и будет предусматривать оболочку /sbin/nologin повысить безопасность?

Каковы значимые различия между запуском программы от имени пользователя root и учетной записью службы via с записью файла sudoers?
Но действительно ли это лучше с точки зрения безопасности? Или что лучше всего в этой ситуации?

TL; DR

Конечный результат действительно тот же: /opt/agent/agent-executable работает с привилегиями root со всеми рисками, связанными с этим уровнем привилегий.

«Лучшая практика - это просто еще одно мнение».


IMHO вариант sudo - это то, что я бы порекомендовал, когда служба состоит из основного процесса и (многих) компонентов, которым для правильной работы не требуются привилегии root и которые с радостью будут работать при использовании agent-user идентичности, но есть некоторые специфические, легко идентифицируемые компоненты (например, agent-executable) действительно нужен такой root-доступ.
Для этого требуется, чтобы администратор предоставил, а основная служба поддерживала возможность запускать эти конкретные компоненты в измененном контексте с повышенными привилегиями. sudo особенно подходит для этого (и гораздо лучший вариант, чем, например, установка бита SUID в исполняемом файле).

Тогда вы соблюдаете безопасность принцип наименьших привилегий.

Когда вы, например, создаете модуль systemd, такой как этот:

[Service]
User=agent-user
ExecStart=sudo /opt/agent/agent-executable 

который инструктирует systemd (который запускается как root) переключиться на идентификатор пользователя-агента для запуска службы в среде с ограниченными привилегиями. Затем, как ограниченный пользователь, вы используете sudo чтобы снова повысить привилегии для запуска службы от имени пользователя root.
В этом сценарии вы просто ведете себя глупо и с таким же успехом можете запустить исполняемый агент с правами root с самого начала и сделать следующее:

[Service]
# User=root
ExecStart=/opt/agent/agent-executable 

Примечание: есть некоторые тонкие различия в результирующей среде, когда вы запускаете процессы через sudo или systemd (с и без явный User=root), которые, вероятно, не актуальны в данный момент.

Является ли NOPASSWD слабым местом безопасности?

В случае услуг и автоматизации часто неизбежны.

Улучшит ли безопасность использование оболочки / sbin / nologin?

В общем: не так много, как думают. См. Например этот вопрос и ответ.