ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

sudoersにはワイルドカードが使える

デーモン管理はUpstartでやっていて、Webアプリケーションサーバwebapp-${project_name}、ジョブワーカーはjobworker-${project_nameみたいな感じの名前で定義しています。

serviceコマンドはrootじゃないと実行出来ないのですが、デプロイのときなど、大量のサーバにいちいちパスワード打てないので、特定のユーザにNOPASSWORDで実行出来るようにします。 ただ、何も考えず/etc/sudoersに設定していくとサブコマンド毎に指定していかないといけないのでなかなか辛いです。

app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 restart
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 reload
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 stop
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 start
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 restart
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 reload
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 stop
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 start
app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 restart
app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 reload
app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 stop
app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 start

かといって、こうしてしまうと、全てのUpstart管理のデーモンをパスワード無しで操作出来てしまうのでかなり危険です。

app ALL=(root) NOPASSWD: /usr/bin/service

なんかうまい方法無いかなとsudoersのmanpageを引いていたらワイルドカードが使えるらしいので、こうしてみました。 これなら権限を絞りつつ、記述も簡潔になって良い感じです。

app ALL=(root) NOPASSWD: /usr/bin/service webapp-* *
app ALL=(root) NOPASSWD: /usr/bin/service jobworker-* *

※ この記述あくまで一例だからこのまま使ってることを意味しないです。念為