ryandaniels.create_users

ansible-role-create-users

CI

Linux上のユーザーを管理するための役割です。
ユーザーリストの設定ファイル(リストはファイル vars/secret にあります)でユーザーを管理します。
特定のUIDでユーザーを追加し、パスワードを変更し、ユーザーアカウントをロック/ロック解除し、sudoアクセスを管理し(ユーザーごと)、SSHキーを使った認証のためにSSHキーを追加し、ユーザーの主グループとGIDを設定し、ユーザーをグループに追加します。グループが存在しない場合は作成されます。
これは、設定ファイルで設定されている「グループ」単位(Ansibleのグループ変数)で行われます。グループは、インベントリファイルでサーバーに設定されたAnsibleグループから来ます。allは、インベントリファイル内のすべてのホストに適用するためにもサポートされています。

詳細な例は、ブログ投稿「Ansibleによるユーザー管理」で見つかります。

注意:ユーザーを削除することは意図的に行っていません。

テストされたディストリビューション

  • Ubuntu 22.04, 20.04, 18.04, 16.04
  • CentOS / RHEL: 9.1, 8.x, 7.x, 6.5, 5.9

依存関係

Ansible 2.6が必要です(以前のバグ20096のため)。

ansible-vault

ansible-vaultを使用して、gitから機密情報を暗号化します。

cat vars/secret
#平文の場合は暗号化します(git commit/pushの前に)
ansible-vault encrypt vars/secret

#暗号化されたファイルを編集する:
ansible-vault edit vars/secret

vi .vaultpass
- パスワードマネージャーからAnsible Vaultのパスワードを入力
chmod 600 .vaultpass
vi ansible.cfg
#以下の行を挿入
[defaults]
vault_password_file = ./.vaultpass

.gitignore

vi .gitignore
#以下の行を挿入
.vaultpass
.retry
secret
*.secret

パスワード生成方法

  • Ubuntu - "whois"パッケージをインストール
mkpasswd --method=SHA-512
  • RedHat - Pythonを使用
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

デフォルト設定

---
# 注意: 'debug_enabled_default: true'を設定すると、ハッシュ化されたパスワードが出力に表示されます。
debug_enabled_default: false
default_update_password: on_create
default_shell: /bin/bash
default_generate_ssh_key_comment: "{{ item.username }}@{{ ansible_hostname }}"

ユーザー設定

ファイル位置: vars/secret

  • username: ユーザー名 - スペースなし (必須)
  • uid: ユーザーのIDの数値(オプション)
  • user_state: present|lock (必須)
  • password: sha512で暗号化されたパスワード(オプション)。設定しない場合、パスワードは"!"に設定されます。
  • update_password: always|on_create(オプション、デフォルトはon_create)
    警告: 'always'の場合、パスワードが設定された値に変更されます。
    既存のユーザーに対して'always'を使用する場合は、必ずパスワードが設定されていることを確認してください。
  • comment: フルネームおよび部門またはアプリケーションの説明(オプション)(設定することをお勧めします)
  • primarygroup: プライマリグループ名(オプション)
  • primarygid: プライマリグループID(オプション)。サーバー上で同じGIDを再使用すると、プレイブックは失敗します。異なるGIDを持つ同じ重複グループが指定された場合、最後の設定が使用されます。 警告: 既存のユーザーのプライマリグループやプライマリGIDを変更しても、そのユーザーに属する既存のファイルの権限は変更されません。また、古いエントリは/etc/groupに残ります。注意して使用してください。
  • groups: ユーザーが追加されるグループのカンマ区切りリスト(追加されます)。グループが存在しない場合、特定のサーバー上で作成されます。これはプライマリグループではありません(プライマリグループは変更されません)
  • shell: シェルへのパス(オプション、デフォルトは/bin/bash)
  • ssh_key: SSHキーを使った認証のために認可されたSSHキーを追加します(オプション)
    注意: 1つのキーは単一の行に入りますが、複数のキーがある場合は、最初の例にあるフォーマットを使用してください。
  • exclusive_ssh_key: yes|no(オプション、デフォルト: no)
    警告: exclusive_ssh_key: yes - ここで定義されていないSSHキーをすべて削除します! no - 指定したすべてのキーを追加します。
  • generate_ssh_key: 対象ユーザーのSSHキーを生成するかどうか(オプション、デフォルトは'no')
    注意: これにより、既存のSSHキーは上書きされません。
  • ssh_key_bits: 作成するSSHキーのビット数をオプションで指定します(オプション、デフォルトはssh-keygenによって設定されます)。
  • ssh_key_passphrase: SSHキーのためのパスフレーズを設定します。パスフレーズが提供されない場合、SSHキーはパスフレーズなしでデフォルト設定されます。
  • generate_ssh_key_comment: 生成されたSSHキーのコメントを指定します(オプション)。指定しない場合は、デフォルトのコメントが使用されます。
  • use_sudo: yes|no(オプション、デフォルトはno)
  • use_sudo_nopass: yes|no(オプション、デフォルトはno)。yes = パスワードなしのsudo。
  • system: yes|no(オプション、デフォルトはno)。yes = システムアカウントを作成(UID < 1000)。既存のユーザーには機能しません。
  • servers: 変更が行われるサーバーのサブ要素リスト。 (必須)
    これらは、AnsibleインベントリファイルからのAnsibleグループです。以下の例では、webserverwebserver1webserver2webserver3の3つのサーバーになります。

注意: 異なる設定を持つ異なるサーバー上で同じユーザー名を持つことができます。以下の例では、testuser102がインベントリのwebserverグループに定義されているサーバーにsudo権限を持つ一方、databaseグループにはsudo権限がありません。

サンプルAnsibleインベントリファイル

[webserver]
webserver1
webserver2
webserver3

[database]
db1
db2
db3

[monitoring]
monitor1

サンプル設定ファイル (vars/secret)

---
users:
  - username: testuser101
    password: $6$/y5RGZnFaD3f$96xVdOAnldEtSxivDY02h.DwPTrJgGQl8/MTRRrFAwKTYbFymeKH/1Rxd3k.RQfpgebM6amLK3xAaycybdc.60
    update_password: on_create
    comment: Test User 100
    shell: /bin/bash
    ssh_key: |
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8crAHG/a9QBD4zO0ZHIjdRXy+ySKviXVCMIJ3/NMIAAzDyIsPKToUJmIApHHHF1/hBllqzBSkPEMwgFbXjyqTeVPHF8V0iq41n0kgbulJG testuser101@server1
      ssh-rsa AAAA.... testuser101@server2
    exclusive_ssh_key: yes
    use_sudo: no
    use_sudo_nopass: no
    user_state: present
    servers:
      - webserver
      - database
      - monitoring

  - username: testuser102
    password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
    update_password: always
    comment: Test User 101
    groups: testcommon, testgroup102web
    shell: /bin/sh
    use_sudo: yes
    user_state: present
    servers:
      - webserver
      - all

  - username: testuser102
    password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
    update_password: always
    comment: Test User 101
    groups: testcommon, testgroup102db
    shell: /bin/sh
    user_state: present
    servers:
      - database

  - username: testuser103
    password: $6$wBxBAqRmG6O$gPbg9hYShkuIe3YKMFujwiKsPKZHNFwoK4yCyTOlploljz53YSoPdCn9P5k8Qm0z062Q.8hvJ6DnnQQjwtrnS0
    user_state: present
    servers:
      - webserver

  - username: testuser104
    primarygroup: testgroup104primary
    ssh_key: ssh-rsa AAAB.... test103@server
    exclusive_ssh_key: no
    generate_ssh_key: yes
    generate_ssh_key_comment: 生成されたSSHキーのためのカスタムコメント
    use_sudo: no
    user_state: present
    servers:
      - webserver
      - monitoring

  - username: testuser105
    uid: 1099
    password: $6$XEnyI5UYSw$Rlc6tXtECtqdJ3uFitrbBlec1/8Fx2obfgFST419ntJqaX8sfPQ9xR7vj7dGhQsfX8zcSX3tumzR7/vwlIH6p/
    primarygroup: testgroup105primary
    primarygid: 2222
    ssh_key: ssh-rsa AAAB.... test107@server
    generate_ssh_key: yes
    ssh_key_bits: 4096
    use_sudo: no
    user_state: lock
    servers:
      - webserver
      - database

サンプルプレイブック create-users.yml

---
- hosts: '{{inventory}}'
  vars_files:
    - vars/secret
  become: yes
  roles:
  - create-users

準備

  • ansibleをインストール
  • 鍵を作成
  • クライアントにSSHで接続し、known_hostsファイルにエントリを追加
  • クライアントサーバーのauthorized_keysを設定
  • ansibleコマンドを実行

使用方法

すべてのユーザーを作成する

ansible-playbook create-users.yml --ask-vault-pass --extra-vars "inventory=all-dev" -i hosts
プロジェクトについて

Role to manage users on linux

インストール
ansible-galaxy install ryandaniels.create_users
ライセンス
mit
ダウンロード
187.6k
所有者
Ansible all the things