【連載01】203.Ansibleでユーザーとグループを追加する(On Vagrant)


当記事はケーススタディの連載となっています。目次は【こちら】です。
最新のソースコードは【GitHub】で公開中です。

サーバの責務はこちらで確認ください。

今回は、ユーザーとグループを作成する。Ansibleでユーザー(user)追加モジュールとグループ(group)追加モジュールを使う。
※userのpasswordはハッシュ化する。

1.ユーザー作成概要

一番最初に全てのサーバに対して必要なユーザーとグループを作成する。

2.playbookファイルの相関

3.playbook(site.yml)

${ANSIBLE_HOME}/site.yml
メインとなるplaybook(site.yml)参照

4.ユーザー作成用のplaybook全体

\${ANSIBLE_HOME}/operations/0011_usergroup.yml

0011_usergroup.yml
# ===================
# ユーザーの追加(usergroup.yml)
# ===================

# ===================
# 全サーバ共通のユーザーを作成
# Ansibleは全てuserで行うが、運用時にはinfraユーザー
# を利用しサーバ運用を行う。
# ===================
- hosts: all
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/usergroup.yml
  tasks:
    - name: infraグループ追加
      group: name={{usergroup.infra.group }} gid={{usergroup.infra.gid}}
    - name: infraユーザー追加
      user: name={{usergroup.infra.user}} uid={{usergroup.infra.uid}} group={{usergroup.infra.group}} update_password=always password={{usergroup.infra.password}}

# ===================
# ap_admin(apserv01とadminserv01)に適用
#  ・apacheグループ/ユーザーの用途
#     ・adminserv01
#         ・CI(Jenkins)用HTTPサーバ
#         ・adminserv01はapserv01にデプロイする前にテスト用途としても使用する
#     ・apserv01
#         ・Webアプリケーション用HTTPサーバ
#  ・tomcatグループ/ユーザーの用途
#     ・adminserv01
#         ・CI(Jenkins)用JavaApplicationサーバ
#         ・adminserv01はAPサーバにデプロイする前にテスト用途としても使用する
#     ・apserv01
#         ・Webアプリケーション用JavaApplicationサーバ
# ===================
- hosts: ap_admin
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/usergroup.yml
  tasks:
    - name: apacheグループ追加
      group: name={{usergroup.apache.group }} gid={{usergroup.apache.gid}}

    - name: tomcatグループ追加
      group: name={{usergroup.tomcat.group }} gid={{usergroup.tomcat.gid}}

    - name: apacheユーザー追加
      user: 
    name={{usergroup.apache.user}}
        uid={{usergroup.apache.uid}}
        group={{usergroup.apache.group}}
        update_password=always 
        password={{usergroup.apache.password}}

    - name: tomcatユーザー追加
      user: name={{usergroup.tomcat.user}} uid={{usergroup.tomcat.uid}} group={{usergroup.tomcat.group}}  update_password=always password={{usergroup.tomcat.password}}

# ===================
# db_admin(dbserv01とadminserv01)に適用
#  ・mysqlグループ/ユーザーの用途
#     ・adminserv01
#         ・adminserv01はdbサーバへの本番以降前にテスト用途としても使用する
#     ・dbserv01
#         ・本番データベースサーバ
# ===================
- hosts: db_admin
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/usergroup.yml
  tasks:
    - name: mysqlグループ追加
      group: name={{usergroup.mysql.group }} gid={{usergroup.mysql.gid}}
    - name: mysqlユーザー追加
      user: name={{usergroup.mysql.user}} uid={{usergroup.mysql.uid}} group={{usergroup.mysql.group}}  update_password=always password={{usergroup.mysql.password}}

# ===================
# adminserv01に適用
#  ・seleniumグループ/ユーザーの用途
#     ・adminserv01
#         ・WEBGUIテスティングの起動/制御を行うSelniumGridを動作させる
# ===================
- hosts: adminservers
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/usergroup.yml
  tasks:
    - name: seleniumグループ追加
      group: name={{usergroup.selenium.group }} gid={{usergroup.selenium.gid}}
    - name: seleniumユーザー追加
      user: name={{usergroup.selenium.user}} uid={{usergroup.selenium.uid}} group={{usergroup.selenium.group}}  update_password=always password={{usergroup.selenium.password}}
Ansibleでのグループ(group)追加モジュール

Ansibleでグループを追加するにはgroupモジュールを使う。

書式:

group: name=\${グループ名称} gid=${GID}

例:

group: name={{usergroup.apache.group }} gid={{usergroup.apache.gid}} 
Ansibleでのユーザー(user)追加モジュール

Ansibleでユーザーを追加するにはuserモジュールを使う。ユーザー作成時はグループ名称を指定してGIDは指定しない。

書式:

user: name=\${ユーザー名} uid=\${UID} group={グループ名称} update_password=${パスワードの更新(always または on_create)}

例:

user: name={{usergroup.selenium.user}} uid={{usergroup.selenium.uid}} group={{usergroup.selenium.group}}  update_password=always
var_filesの構造

var_filesもyamlの法則に従い階層構造で記述。以下のような設定から、uid:1200の値をplaybookから取得したい場合は

usergroup:
  tomcat:
    user: tomcat
    group: tomcat
    uid: 1200
    gid: 1200
    home: /home/tomcat
    shell: /bin/bash

usergroup配下tomcatの配下のuidを取得する為、
usergroup.tomcat.uidと【.(ピリオド)】で定義を繋ぎ、左右を{{ }}で括り、

{{usergroup.tomcat.uid}}

※以前のAnsibleでは${ }で取得可能だったが現在のAnsibleでは取得できない為注意。

5.playbook(/vars/usergroup.yml)

\${ANSIBLE_HOME}/vars/usergroup.yml

※userモジュールのpassword(パスワード)はハッシュ化が必要。

0011_usergroup.ymlでは変数設定をしている。
userモジュールのパスワードはハッシュ化する必要があることに注意。

ハッシュ化するには今回はmanageterm(Ansible管理端末)から以下を実行。

書式:

python -c 'import crypt; print crypt.crypt("パスワード", "\$6\$ソルト$")'

例:

python -c 'import crypt; print crypt.crypt("apache123", "$6$apachesolt$")'

以上の設定で「apache123」というハッシュ化されたパスワードがサーバ設定されることになる。

# ===================
#ユーザー情報を変数定義します。
#パスワードはハッシュ化する必要がある為、pythonのコマンドにてハッシュ化したパスワードを設定
# python -c 'import crypt; print crypt.crypt("パスワード", "$6$ソルト$")'
# ===================
  usergroup:
    tomcat:
      user: tomcat
      group: tomcat
      uid: 1200
      gid: 1200
      home: /home/tomcat
      shell: /bin/bash
      # ===================
      # python -c 'import crypt; print crypt.crypt("tomcat123", "$6$tomcatsolt$")'
      # ===================
      password: $6$tomcatsolt$Dz8QThSePXH5WZ0EjLQbUA8pZJrgIl4.2qsflSWkn1gV.RqD84vPT0.tdThOEn1VyowWJBsTgm2rmv5oJixDJ1
    apache:
      user: apache
      group: apache
      uid: 1100
      gid: 1100
      home: /home/apache
      shell: /bin/bash
      # ===================
      # python -c 'import crypt; print crypt.crypt("tomcat123", "$6$tomcatsolt$")'
      # ===================
      password: $6$apachesolt$PnTyYlBO7ZAmPmXNBxAgWj03udlCNxqOqWvfik.fM3A84UTG.Un0cWUaXEl2vT2Acme.lMsPVRapEOZ9MhWYr0
    mysql:
      user: mysql
      group: mysql
      uid: 1300
      gid: 1300
      home: /home/mysql
      shell: /bin/bash
      # ===================
      # python -c 'import crypt; print crypt.crypt("tomcat123", "$6$tomcatsolt$")'
      # ===================
      password: $6$mysqlsolt$IeAbOR9NxGYA3Os9p43DRjdGvuTae62i707gWa2/XP/IFVyjHIYsEe/gH5uc15pxwyhAk8kGuRbi6Iinga5wh/
    infra:
      user: infra
      group: infra
      uid: 1400
      gid: 1400
      home: /home/infra
      shell: /bin/bash
      # ===================
      # python -c 'import crypt; print crypt.crypt("tomcat123", "$6$tomcatsolt$")'
      # ===================
      password: $6$infrasolt$a2vFx7QL/cV2Nplcy1AxeRp8Ss34MPTjkbKpu7au.kq.PXshj8K177TUH9Pj5wtG8Y83Ea5Nv8UlvRuBMN5Fu0
    selenium:
      user: selenium
      group: selenium
      uid: 1600
      gid: 1600
      home: /home/selenium
      shell: /bin/bash
      # ===================
      # python -c 'import crypt; print crypt.crypt("tomcat123", "$6$tomcatsolt$")'
      # ===================
      password: $6$seleniumsolt$fl7ibc.Xf/.xnbIFqIXuGA3rtddYdZiUILqVvJO06cjGXy.HmpDh1LjXZYLKqzZymjn1GqmQkz2ndc8lfbfTz/

次回は「yumにて必要なライブラリ/ミドル/ソフトウェアをインストールする【Ansible yumモジュール】」について。

連載の目次は【こちら】です。