Posted at
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