Это небезопасно иметь доступного пользователя с паролем sudo?

10

Я новичок в Ansible. Большинство руководств по подготовке VPS, которые я видел до сих пор, делают это:

  1. отключить root от входа в систему
  2. создать нового пользователя, который может войти только с ssh(не пароль)
  3. добавить нового пользователя в wheelгруппу с разрешением sudo без пароля

Я понимаю (1) и (2), но не (3).

Конечно, без пароля sudoэто как войти в систему как root? Я понимаю выгоду (удобство), но разве это небезопасно?

Я понимаю, что администраторы управляют своими сетями различными способами, и поэтому это можно назвать «субъективным», но это ОЧЕНЬ распространенная практика, она даже показана в различных официальных документах, а также в руководствах, опубликованных хостинговыми компаниями. Это противоречит здравому смыслу. Какая логика стоит за этим?

Lonix
источник
1
Ansible предназначен для автоматизации административных задач, поэтому обычно требуется доступ верхнего уровня (root), следовательно, «sudo без пароля». Если вам нужно только запустить подмножество команд, доступных в вашей системе, вы можете заблокировать его только для тех команд с более подробной конфигурацией sudo. Без пароля sudo не обязательно означает доступ ко всему, что может сделать root (хотя это становится трудно реализовать, когда вы понимаете, что пользователь может потенциально изменить вашу конфигурацию sudo через sudo, чтобы предоставить себе больший контроль ...).
Дэвид
@DavidSpillett Мне было интересно об этом - то есть определение, какие команды sudo разрешить в файле sudoers ... но я где-то читал, что ansible делает все, интерпретируя с помощью сложных команд python, и что этот подход быстро запутается.
Ионикс

Ответы:

18

Если учетная запись службы может выполнять sudo без пароля, то вы должны защитить доступ к этой учетной записи.

Если учетная запись не имеет пароля и использует только ssh-ключи для входа в нее, это достигается при условии, что вы также можете сохранить личный ключ ssh в безопасности.

Майкл Хэмптон
источник
Таким образом, я "в некотором роде" прав, чувствуя себя встревоженным этим соглашением - и все же, это соглашение для ответного, из необходимости / прагматизма.
Ионикс
Итак, вы говорите, что я по сути "перенес" безопасность ядра с VPS на мою локальную систему, которая содержит ключ ssh ответной учетной записи? В этом случае слабым местом является не сам VPS, а я! И мне нужно быть очень бдительным в защите этого ключа SSH в обмен на удобство, которое дает мне ANSIB.
Ионикс
6
Ключ ssh, фраза-пароль, защищенная с помощью ssh-agent, представляет собой достаточно хорошие учетные данные.
Джон
@lonix Все защищенные системы требуют учетных данных. Защищенные системы максимально безопасны, как меры, которые вы применяете для защиты этих учетных данных, поскольку их наличие обеспечивает 100% -ный доступ к ним. Так что да, вы не можете рассчитывать на защиту вашего VPS, если вы не обеспечите надлежащую защиту своего ключа SSH (или пароля root, или чего-либо еще). Тот факт, что вы конфигурируете sudo без пароля, ничего не значит с этой точки зрения, включение sudo с паролем не меняет того факта, что вам необходимо защитить ключ SSH.
Джакомо Альзетта
@GiacomoAlzetta Я знаю, что я имел в виду, что ответственность переносится с удаленного на локальный компьютер. Поскольку эскалация sudo выполняется без пароля, слабое место становится локальным.
Ионикс
4

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

Поскольку учетная запись не имеет пароля, невозможно sudoзапросить пароль. Также Ansible должен уметь выполнять команды. Наличие дополнительного пароля в том же месте, что и ключ, не повысит безопасность.

RalfFriedl
источник
2

Проблема в том, что ansible предназначен для администраторов и автоматизации, поэтому если вам нужно ввести пароль для запуска сценария, это не самый лучший способ. Также небезопасно хранить пароль для sudo в файле или базе данных и получать его каждый раз при запуске playbook. Таким образом, сочетание sudo без пароля и аутентификации с помощью ключей ssh ​​- лучший способ обеспечить безопасность и отсутствие проблем при запуске playbook. Также вы администратор и знаете, что вы программируете в playbook. Таким образом, playbook не может разрушить ваши серверы.

NicoKlaus
источник
Playbooks может разрушить ваши системы, но если вы используете отдельные ключи тестовой среды, то это не разрушит рабочие хосты.
Джон
Именно это, мы надеемся, является обязательным условием при работе на продуктивных системах.
НикоКлаус
1
Ansible имеет «ansible-vault» и плагины / модули / библиотеки, которые позволяют хранить секреты во многих сторонних системах хранения секретных данных, таких как bitwarden, hashicorp vault, keepass и т. Д.
Зоредаче