vagrant
Ansible
サーバー構築
centos7
ansible-playbook

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

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