アカウント作成(Ansible)


はじめに

Ansibleを使用してアカウント作成を行う際の手順を記述します
サンプルアプリケーションはgithubになります

前提事項

Ansibleセットアップ手順はREADMEを参照ください
アプリケーション環境構築イメージはアプリケーション環境構築(Ansible)を参照ください

アカウント作成(Ansible)

アカウント作成を行うplaybookを定義します

ファイル 内容
変数ファイル グループやユーザ名等の変数を定義します
タスクファイル ユーザやグループ追加及びSSHDサービスの設定等を定義します

グループ追加

グループ追加を行います

- name: グループ追加
  group:
    name: "{{ group_name }}"
    gid: "{{ group_gid }}"

各項目の説明は以下のとおり

項目 内容
name グループ名を指定します
gid グループ追加時のグループIDを指定します

ユーザ追加

ユーザ追加を行います

- name: ユーザ追加
  user:
    name: "{{ user_name }}"
    group: "{{ group_name }}"
    groups: "{{ group_name }},sudo"
    uid: "{{ user_uid }}"
    password: "{{ user_password | password_hash('sha512') }}"
    shell: /bin/bash
    generate_ssh_key: yes
    ssh_key_passphrase: "{{ user_ssh_key_passphrase }}"
  register: ssh_user

各項目の説明は以下のとおり

項目 内容
name ユーザ名を指定します
group グループ名を指定します
未指定時はOSデフォルトのUserGroupになります
groups グループのサブグループを指定します
sudoを許可するためsudoをサブグループに追加します
uid ユーザ追加時のユーザIDを指定します
password パスワードを指定します
password_hash関数を使用して暗号化を行います
shell bashを有効にします
※Ansibleを使用したユーザ追加ではデフォルトbashが有効にならないため指定します
generate_ssh_key SSHの秘密鍵の作成を指定します
ssh_key_passphrase SSHのパスフレーズを指定します
register SSHの公開鍵を作成するためタスク実行結果を変数に保持します

SSH公開鍵作成

SSH公開鍵を作成します

- name: SSH公開鍵作成
  authorized_key:
    user: "{{ user_name }}"
    state: present
    key: "{{ ssh_user.ssh_public_key }}"

各項目の説明は以下のとおり

項目 内容
user ユーザ名を指定します
state presentを指定してSSH公開鍵が作成済の場合はスキップします
key ユーザ追加時の公開鍵キーをセットします

SSH設定変更

セキュリティを強化するためパスワード認証の無効化等を行います

- name: パスワード認証の無効化
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: "^PasswordAuthentication"
    insertafter: "^#PasswordAuthentication"
    line: "PasswordAuthentication no"

- name: チャレンジ・レスポンス認証の無効化
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: "^ChallengeResponseAuthentication"
    insertafter: "^#ChallengeResponseAuthentication"
    line: "ChallengeResponseAuthentication no"

- name: rootユーザのログイン禁止
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: "^PermitRootLogin"
    insertafter: "^#PermitRootLogin"
    line: "PermitRootLogin no"

各項目の説明は以下のとおり

項目 内容
dest 変更ファイルのパスを指定します
regexp 置換対象の文字列を正規表現で指定します
insertafter 置換文字列の挿入先を指定します
line 置換文字列を指定します

SSHDサービス再起動

SSH設定変更を反映するためSSHDサービスを再起動します

- name: sshdサービスの再起動
  service:
    name: sshd
    state: restarted

各項目の説明は以下のとおり

項目 内容
name sshdを指定します
state restartedを指定して再起動を行います

初期ディレクトリ作成

アプリケーションやログファイルを格納するディレクトリを作成します

- name: 初期ディレクトリ作成
  file:
    path: "/home/{{ user_name }}/{{ item.dir_name }}"
    owner: "{{ user_name }}"
    group: "{{ group_name }}"
    mode: "{{ item.dir_mode }}"
    state: directory
  with_items: "{{ user_dir_info }}"

各項目の説明は以下のとおり

項目 内容
path ディレクトリパスを指定します
owner ディレクトリの所有ユーザを指定します
group ディレクトリの所有グループを指定します
mode ディレクトリの権限を指定します
state ディレクトリ作成を指定します
with_items 変数ファイルからリストを読み込みます

参考情報