Как программно добавить secure_path в файл sudoers

11

Я пытаюсь создать сценарий пользовательских данных для экземпляра EC2, который собирает узел и npm из github, а затем запускает службу. Чтобы смазать эти колеса, мне нужно добавить:

:/usr/local/bin

до конца строки в / etc / sudoers, которая начинается:

Defaults        secure_path="

/superuser/927512/how-to-set-path-for-sudo-commands рассказывает об использовании visudo для достижения этой цели, но я хочу сделать это программно в пользовательских данных EC2.

/programming/16282789/adding-sudo-permissions-to-sudoers-for-user-via-shell-script рассказывает о редактировании файла sudoers, но кажется, что он слишком испечен для того, что я пытаюсь достигать.

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

падший ангел
источник

Ответы:

6

Если вы можете жить вместо замены secure_pathзначения, а не добавлять его, вы можете использовать гораздо более простое решение. Обычно в sudo есть каталог конфигурации, например, /etc/sudoers.dкуда вы можете добавить дополнительные файлы конфигурации.

Просто создайте там файл со своим полным secure_pathзначением:

Defaults secure_path="<default value>:/usr/local/bin"

Это перезаписывает значение из основного конфига. Если значение пути одинаково для всех ваших компьютеров, его можно легко развернуть с помощью сценариев или пакета.

Это дает дополнительное преимущество: вам не нужно проверять и, возможно, объединять файлы конфигурации при обновлении пакета sudo в будущем.

Джеральд Шнайдер
источник
2

при условии, что вы знаете, что строка с secure_path существует, простая команда sed для этого

sed -i -e '/secure_path/ s[=.*[&:/usr/local/bin[' /etc/sudoers

или немного сложнее (больше проверки синтаксиса на входе):

sed -i -r -e '/^\s*Defaults\s+secure_path/ s[=(.*)[=\1:/usr/local/bin[' /etc/sudoers
tonioc
источник