LoginSignup
3
8

More than 5 years have passed since last update.

RundeckからSSH接続したサーバー内でsudoを実行する

Last updated at Posted at 2016-08-22

主な方法

  1. ログインユーザーにnopasswdを指定する
  2. rundeckのoptionで指定して使う

2はうまく動かすの妙にハマった。

ログインユーザーにnopasswdを指定する

手順

jobユーザーにログインするものとして、/etc/sudoersに以下の行を足す。

job ALL=(ALL) NOPASSWD: ALL

これだけだとsudo: sorry, you must have a tty to run sudoなんてエラーが出ることがある。端末がない状態でsudoが出来ない設定がオンになっているためで、今回追加したユーザーに対してのみsudo出来るように設定してやる。

Defaults:job    !requiretty

これで実行してやれば普通に動く。

気になる点

ただし、これだけだと『rundeckサーバー内に格納されている鍵情報を取ることが出来たら接続するリモートのサーバーに対して何でもできちゃう』という状態になってちょっと怖い。後述するけどKey StorageのGUIから鍵を保存すると644で保存される事象もあるので、潜在的に踏み台として使われるリスクを抱えてるシステムってあるんじゃないんだろうか。

rundeckのoptionで指定して使う

手順

  1. /rundeck/menu/storageから"Add or Upload a Key"でユーザーパスワードを登録する
  2. パーミッションを600にする
  3. JobのOptionsで『sudoPassword』という名前のものを作る
  4. Input Typeでsecureを指定して1で作ったストレージをStorage Pathに指定する
  5. Workflowで指定しているscriptに対してecho @option.sudoPassword@ | sudo -S commandといった形式でsudoを実行する
  6. /var/rundeck/projects/{project}/etc/resources.xmlの対象サーバーにsudo-command-enabled="true"の項目を足す※

※2.6.9-1現在ではこれをやらなくてもsudoは通るが、ログに[sudo] password for job:なんてのが残って後味が悪い。

簡単な説明

この方法だと、rundeckサーバーの中にパスワードのファイルが格納されて、rundeckはそれを使用してスクリプト中の@option.sudoPassword@の文字列を置き換える。

サーバー上ではecho password | sudo -S lsといったコマンドが実行されるが、ユーザーのログには残らない。rundeckサーバー内にあるパスワードが書かれた鍵を盗られなければ……

ってあれ?あんまりセキュリティ性向上してなくね?

ハマった点

  • option指定したら勝手にsudoにパスワード詰めてくれるものだと信じて失敗
  • echo @option.sudoPassword@ | sudo lsとやって失敗
  • usageに書かれてるbashのパターンを試して$RD_SUDOPASSWDとか試して失敗する

基本: rundeckにリモートのサーバーにログインする

一応基礎中の基礎だけどそもそもリモートのサーバーにSSHで入ってジョブを実行する方法についても書いておく。

  1. リモートのサーバーにユーザー作って鍵作る
  2. まずプロジェクトを立てる
  3. /rundeck/menu/storageから"Add or Upload a Key"でSSH鍵を登録する
  4. rundeckのサーバーにログインして/var/lib/rundeck/var/storage/content/内の登録した鍵のパーミッションを600にする※
  5. /var/rundeck/projects/{project}/etc/resources.xmlにログイン先のサーバーを登録する※
  6. ジョブのNodesからDispatch to Nodesを選択、Node Filterから指定したサーバーを検索して当てる

※何故か2.6.9-1現在では644で保存される。rundeckで使ってるjschでは問題ないがセキュリティ的な面を鑑みて変更する。
※ノード例:

<
  node name="db"
  description="db server node"
  tags=""
  hostname="10.0.0.1"
  osArch="amd64"
  osFamily="unix"
  osName="Linux"
  osVersion="2.6.32-573.26.1.el6.x86_64"
  username="job"
  ssh-authentication="privateKey"
  ssh-key-storage-path="keys/db"
/>

参考

Rundeck Documentation Tutorials/Jobs

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8