LoginSignup
27
30

More than 5 years have passed since last update.

Ansibleでsuとsudoを併用する

Last updated at Posted at 2016-03-18

概要

Ansibleでは、becomeという仕組みでsuまたはsudoを実現できるが、suまたはsudoのどちらかに統一しておく必要がある。
例えば、suでユーザ変更した後のsudoが仕様上できない。(sudoで統一しておくのが普通。。)
Ansible 2.0より加わったexpectのモジュールを用いて、対話形式パスワードを乗り越える。

sshユーザ:aaa
Ansibleタスク実行ユーザ(become_user):bbb(aaa -> su -> bbb)
その後、bbbユーザがsudoを使ったコマンドを実行する。

Playbook

webservers-playbook.yml
- hosts: webservers
  vars:
    - password: hogehoge
  tasks:
    - name: yum update
      become: yes
      become_user: bbb
      become_method: su
      expect:
        command: sudo yum update -y
        responses:
          password for bbb: "{{password}}"

実行時に --ask-become-passを付けて、bbbユーザになるため(become)のパスワードを入力

### 実行
$ ansible-playbook -i webservers webservers-playbook.yml --ask-become-pass
SUDO password: (聞かれるので、bbbユーザのパスワードを入力)

セキュリティ対策

上記のやり方だと、playbookにパスワードが直書きになってしまっているため、暗号化を推奨する。

### 暗号化
$ ansible-vault encrypt webservers-playbook.yml
New Vault password: (復号用のパスワードが聞かれる)
Confirm New Vault password: (復号用のパスワード(確認)が聞かれる)
Encryption successful

### 暗号化されたことを確認
$ cat webservers-playbook.yml
$ANSIBLE_VAULT;1.1;AES256
65306337623632636662313263376337313837326233643939613331306261386663636132626334
6633663038333836363835313030393064383239666538650a633066346665313536366664363638
34653038653031623062643931353565613166313539326263646539633863353663646634326332
3031623064623533360a393230346331303564303633353830393430656464303266346435306435
34373635386530383561613231393933646139303532323132626164363633646265366565376530
61313037313339336631366237333338366336666436343938373761623565313064393763383637
37613132623665623535373932653465353135343638343630363238386630366637383333626533
38353830373737333130373061303136663836303239303634346635366237356462393930633163
36383961356134326137636564616364393738326338646632623963663330626435363131633464
39346137363038373130623866333036373164633138386133383434383334613437326665313063
31626462353633656564346163656261356133383261333330393239326564343532393639653531
61656563613730373530643966383932393762333562336262373834336434616266373361396438
35643533623337313763653561343735346663346630393837376531393234343366303431656136
34376562633836356330623235303137373463393236363331666639343765306534353363393339
32643435346334383463323661653563623839323665333765313133356563393738633532623531
34323165323639653038323661393437663566393833616337386138393034356435346637623631
65373238333564343663636539656439383761363038633033383164636666633561

暗号化されたものを実行する。

### 暗号化したものを実行
$ ansible-playbook -i webservers webservers-playbook.yml --ask-become-pass --ask-vault-pass
SUDO password: (聞かれるので、bbbのパスワードを入力)
VAULT password: (聞かれるので、復号用のパスワードを入力)

まとめ

もっと良いやり方がありそうな。。w

27
30
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
27
30