如何以编程方式在sudoers文件中添加secure_path


11

我正在尝试为EC2实例构建用户数据脚本,该EC2实例从github构建node和npm,然后启动服务。为了给这些轮子加脂,我需要添加:

:/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文件的问题,但是对于我正在尝试的工作似乎已经过头了实现。

我以为grep行并替换它会很容易,但是我很沮丧。不仅因为那个令人讨厌的倒置逗号!

Answers:


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.