web-dev-qa-db-ja.com

プログラムでsudoersファイルにsecure_pathを追加する方法

私は、githubからノードとnpmを構築し、サービスを開始するEC2インスタンスのユーザーデータスクリプトを構築しようとしています。これらのホイールにグリースを塗るには、以下を追加する必要があります。

:/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ファイルの編集について話しますが、ひどく終わったようです私が達成しようとしていることのために焼きました。

行をgrepして置換するのは簡単だと思いましたが、困惑しています。迷惑な閉じ逆コンマだけではありません!

11
belial

secure_pathの値を追加する代わりに置き換えることで対応できる場合は、はるかに簡単なソリューションを使用できます。通常、Sudoには/etc/sudoers.dのような構成ディレクトリがあり、追加の構成ファイルをドロップできます。

完全なsecure_path値を含むファイルをそこに作成するだけです。

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

これにより、メイン構成の値が上書きされます。パスの値がすべてのマシンで同じである場合、これはスクリプトまたはパッケージで簡単にデプロイできます。

これには、将来、Sudoパッケージが更新されたときに、構成ファイルをチェックしたり、場合によってはマージしたりする必要がないという利点もあります。

5

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
2
tonioc