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

我试图build立一个EC2实例的用户数据脚本,从github构build节点和npm,然后启动一个服务。 为了润滑这些轮子,我需要补充:

:/usr/local/bin 

到/ etc / sudoers中的行尾:

 Defaults secure_path=" 

https://superuser.com/questions/927512/how-to-set-path-for-sudo-commands有关使用visudo来实现这一点,但我想在EC2的用户数据编程方式。

https://stackoverflow.com/questions/16282789/adding-sudo-permissions-to-sudoers-for-user-via-shell-script谈到编辑sudoers文件,但它似乎非常过分,我想尝试实现。

我认为这样很容易就可以代替它,但我很难过。 不仅因为那个烦人的closures式的逗号!

如果您可以接受replacesecure_path值而不是附加它,则可以使用更简单的解决scheme。 通常sudo有一个像/etc/sudoers.d这样的configuration目录,你可以在这里删除额外的configuration文件。

只需用你的完整的secure_path值创build一个文件:

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

这将覆盖主configuration的值。 如果所有机器的path值相同,则可以使用脚本或软件包轻松部署。

这还有一个好处,就是在将来更新sudo软件包时,你不必检查和可能的合并configuration文件。

假设你知道有secure_path的行存在,一个简单的sed命令来做到这一点

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

或者更复杂一点(更多的语法检查input):

 sed -i -r -e '/^\s*Defaults\s+secure_path/ s[=(.*)[=\1:/usr/local/bin[' /etc/sudoers