Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

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

1.ユーザー作成概要

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

image

2.playbookファイルの相関

image

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モジュール】」について。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away