我试图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