デーモン管理は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-* *
※ この記述あくまで一例だからこのまま使ってることを意味しないです。念為