Ansible
ReluxDay 10

Ansibleでユーザ管理

More than 1 year has passed since last update.

この記事はRelux Advent Calendar10日目の記事です。

サーバを増やす時やユーザを追加する時など、サーバの数やユーザ数が多ければ多いほどコマンドでの実行は辛い作業となります。
ユーザをAnsibleで管理していれば、各サーバに対してplaybookを実行するだけなのであまり手間がかかりません。

実行する内容

  • (必要であれば)グループの作成
  • ユーザの作成
    • ログイン用の公開鍵の登録
  • (必要であれば)sudoersへの追加

以上の内容を実行するplaybookを作成します。

作成するファイル

relux_developers というグループに所属する ohsuka というユーザを 172.16.100.1 というアドレスのサーバに作成する例です。

構成

hosts
roles/
┗ user/
  ┣ authorized_keys/
  ┃ ┗ ohsuka
  ┗ tasks/
    ┗ main.yml
site.yml

内容

hosts
[target]
172.16.100.1
rolses/user/authorized_keys/ohsuka
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDaq4REfnEy7TFRfc33fE15GkNJuhRSk7FDdwcGI8Q4hxDbJHe/GNpfVVa9vq2yxN9bCioTYSrLzYlbbh19v+svxXp7PEK66dKDSOL+ZcYZxQOAPQIA1AFyJIyf/AvIubHNBNQvSuvH4CXcdZiBOTQNpNCWh/ABYg1jFDODVWV6EQAlCftyTz6XwjanKLxW0hy85DssXZ+UcpWx9x9T91LyvbHI2cHx/DqlRA++zgVkPgT+1yZ4BSZm8TDtqC1PWvDAB1Xls4OAaovkQep7CYIldVhR/FUNGcBpM/ACvTX2R1pgZR1Tn6xn4HP1eFYt8Wlwb6Y1wNNj0NweNQUGW/VYwMU+q6RenOdF8Pe293kWrpXS9pja36Pto4lmqqhaDoKWB+tTdID+dhGkjUPRC7VamxE0DXZ7TMALHq81vakgRp4FDBGcb73gCxbyDP8pRtECwRgUc2LvCY/XnnJo4FXYl3jZA51YfhU0nT7D8cneQOPiODo3kEgaDjeB3ShyTwDbwXbwHVH0HLvnCDnpd1Q5q68FBpLfJbwAf6djpdnYhNmP5cUzJUH/PQ1zMmVwG/viHaV6pnAfmbngU9Lq/roE5cOyBFnWJ1AgQ3i2KSmj0HM0jxa5pvw9AJVtme8F4MwvsaeooNAEZgxcThIESMe3pI1houpulI9TMyda80PX8w== ohsuka@localhost
roles/user/tasks/main.yml
- name: create group relux_developers
  group:
    name: relux_developers
    state: present
- name: create user ohsuka
  user:
    name: ohsuka
    state: present
    group: relux_developers
    shell: /bin/bash
- file:
    path: /home/ohsuka/.ssh
    owner: ohsuka
    group: relux_developers
    state: directory
    mode: 0700
- name: set public key to login ohsuka
  copy:
    src: roles/user/authorized_keys/ohsuka
    dest: /home/ohsuka/.ssh/authorized_keys
    owner: ohsuka
    group: relux_developers
    mode: 0600
- name: add ohsuka to sudoers
  lineinfile:
    dest: /etc/sudoers
    backup: yes
    state: present
    regexp: '^ohsuka'
    line: 'ohsuka ALL=(ALL) NOPASSWD: ALL'
site.yml
- hosts: all
  sudo: true
  roles:
    - role: user

main.ymlの解説

groupモジュールでグループを作成します。
システム上にすでにそのグループが存在すれば何もしません。

userモジュールでユーザを作成します。
groupオプションで所属するグループを指定します。
shellオプションを指定しなかった場合には、システムのデフォルトのシェルがログインシェルとなります。

fileモジュール~/.ssh ディレクトリを作成します。
sshdの仕様上、~/.sshのパーミッションは0700(drwx------)である必要があります。

copyモジュールで公開鍵を設置します。
公開鍵はroles/user/authorized_keys/以下にユーザごとに置くようにしました。
sshdの仕様上、パーミッションは0600(-rw-------)である必要があります。

lineinfileモジュールでsudoersへの追記をします。
記述を間違えると最悪の場合誰もsudoできなくなるので、変更・追記する場合には壊れても良いような環境で一度試した方が安全です。

実行

ansible-playbook -i hosts site.yml