GNU/Linux >> Linux の 問題 >  >> Linux

Ansibleを使用してLinuxユーザーを作成する方法

Ansibleは、オープンソースのソフトウェアプロビジョニング、構成管理、およびアプリケーション展開ツールであり、インフラストラクチャをコードとして有効にします。多くのUnixライクなシステムで動作し、UnixライクなシステムとMicrosoftWindowsの両方を構成できます。

前提条件

このガイドに従うには、次のものが必要です。

  • ローカルシステムにインストールされたPython
  • Pythonpipがインストールされています
  • ローカルにインストールされたAnsible

ステップ

  1. 依存関係をインストールする
  2. passlibパッケージを使用してパスワードを生成します
  3. 必要なタスクを定義するAnsibleプレイブックを作成します
  4. プレイブック全体

1。依存関係をインストールする

これを機能させるには、ansibleとpasslibパッケージが必要です。

ansible passlibパッケージをインストールします:

sudo pip install passlib

ansibleをインストールする

sudo pip install ansible

2。 passlibパッケージを使用してパスワードを生成します

Ansibleは、ユーザーのパスワードをそのまま追加します。パスワードは暗号化されているため、デフォルトのパスワードは機能しません。

次のコマンドで暗号化されたパスワードを取得します:

python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"

出力:

➜ python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"

Password:
$6$8IAGh7Gu2ugAB.sF$zHldDAEBMoiFUPq2RsGpQ.TRwbPOz3/S5ATs5TbfWDLypYjLGfKN8SNxu1Sx5nNfzQgDJqBh37jT9ln7EIHcq0

3。必要なタスクを定義するAnsibleプレイブックを作成します

すべての依存関係がインストールされたので、プレイブックを定義しましょう。

まず、名前、ホスト、変数などの追加情報を定義する必要があります。

- name: Create user on a linux server
  hosts: remote-server
  become: yes
  gather_facts: false
  vars:
    - user: <username here>
    - password: <Password hash generated>

次のセクションはタスク用です。

Linuxユーザーを作成するためのAnsibleタスク

ユーザーを作成したいので、ansible userを使用します モジュール。ユーザーモジュールの詳細については、こちらをご覧ください。

このタスクは、指定されたnameを持つユーザーを作成します およびpassword これは、前に定義した変数から補間されます:

- name: Create a login user
  user:
    name: "{{ user }}"
    password: "{{ password }}"
    groups:
      - wheel
    state: present

オプション:ユーザーのauthorized_keysに公開鍵を追加するためのAnsibleタスク

サーバーへのパスワードなしのログインを許可するために、サーバーの許可されたキーに公開sshキーを追加できます。これを実現するために、ansibleauthorized_keyモジュールが使用されます。

- name: Add public key to authorized_keys
  authorized_key:
    user: "{{ user }}"
    state: present
    key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

オプション:rootsshアクセスを拒否するAnsibleタスク

次のステップは、sshを介したrootログインを拒否することです。 root以外のユーザーがログインできるようにすることをお勧めします。lineinfileを使用します 指定されたファイルに特定の行が存在することを確認するモジュール。行に一致する正規表現を使用します。

- name: Deny root from logging in
  ansible.builtin.lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: '^(#)?PermitRootLogin \w*$'
    line: 'PermitRootLogin no'
    state: present

オプション:許可されたユーザーリストにユーザーを追加するためのAnsibleタスク

適切なセキュリティ対策は、指定されたユーザーのみがシステムにログインできるようにすることです。このタスクはそれを行います。

- name: Allow specific users to log in
  ansible.builtin.lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: '^AllowUsers'
    line: 'AllowUsers {{ user }}'
    state: present

オプション:ユーザーをsudoersファイルに追加して、sudoコマンドを実行できるようにします:

作成したユーザーにパスワードプロンプトなしでsudoコマンドを実行させたい場合は、このタスクを含めます。

ここでは、lineinfileを使用しています モジュールを使用して、ユーザーに一致する正規表現を検索し、コマンドvisudo -cf %sを使用してすべてが期待どおりに機能していることを検証します。 :

- name: Add {{ user }} to sudoers file
  ansible.builtin.lineinfile:
    path: /etc/sudoers
    regexp: '^{{ user }}'
    line: '{{ user }} ALL=(ALL) NOPASSWD: ALL'
    validate: 'visudo -cf %s'

4。プレイブック全体

これは、プレイブック全体がどのように見えるかです。このコンテンツを.yamlに保存します または.yml ファイル。私の場合、create-user.yaml

---
- name: Create user on a linux server
  hosts: remote-server
  become: yes
  gather_facts: false
  vars:
    - user: user1
    - password: $6$8IAGh7Gu2ugAB.sF$zHldDAEBMoiFUPq2RsGpQ.TRwbPOz3/S5ATs5TbfWDLypYjLGfKN8SNxu1Sx5nNfzQgDJqBh37jT9ln7EIHcq0
  tasks:
      - name: Create a login user
        user:
          name: "{{ user }}"
          password: "{{ password }}"
          groups:
            - wheel
          state: present

      - name: Add public key to authorized_keys
        authorized_key:
          user: "{{ user }}"
          state: present
          key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

      - name: Deny root from logging in
        ansible.builtin.lineinfile:
          dest: /etc/ssh/sshd_config
          regexp: '^(#)?PermitRootLogin \w*$'
          line: 'PermitRootLogin no'
          state: present

      - name: Allow specific users to log in
        ansible.builtin.lineinfile:
          dest: /etc/ssh/sshd_config
          regexp: '^AllowUsers'
          line: 'AllowUsers {{ user }}'
          state: present

      - name: Add {{ user }} to sudoers file
        ansible.builtin.lineinfile:
          path: /etc/sudoers
          regexp: '^{{ user }}'
          line: '{{ user }} ALL=(ALL) NOPASSWD: ALL'
          validate: 'visudo -cf %s'

5。プレイブックの実行

これで、ファイルcreate-user.yamlにプレイブックが作成されました。 現在のディレクトリで、サーバーへの接続を定義するhostsファイルを提供する必要があります。プレイブックの定義から、サーバーをremote-serverとして定義します。 。それをhostsファイルに追加しましょう。

ファイルhosts.yamlを作成します remote-serverを定義する次のコンテンツを使用します :

all:
  hosts:
    remote-server:
      ansible_ssh_host: 138.68.150.24
      ansible_ssh_user: root

次に、ansible-playbookを呼び出す必要があります このようなコマンド:

ansible-playbook -i hosts.yaml create-user.yaml -vv

上記のコマンドでは、-i インベントリファイルを指定します。 -vv 冗長性を有効にします。

これは私のサーバーからの出力です:

➜ ansible-playbook -i hosts.yaml create-user.yaml -vv
ansible-playbook [core 2.11.1]
  config file = None
  configured module search path = ['/Users/citizix/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
  ansible collection location = /Users/citizix/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.9.5 (default, May  4 2021, 03:36:27) [Clang 12.0.0 (clang-1200.0.32.29)]
  jinja version = 2.11.3
  libyaml = False
No config file found; using defaults
redirecting (type: modules) ansible.builtin.authorized_key to ansible.posix.authorized_key
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: create-user.yaml *********************************************************************************************************************************************************************************
1 plays in create-user.yaml

PLAY [Create user on a linux server] ***********************************************************************************************************************************************************************
META: ran handlers

TASK [Create a login user] *********************************************************************************************************************************************************************************
task path: /Users/citizix/projects/ansible/create-user.yaml:9
changed: [remote-server] => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"}, "changed": true, "comment": "", "create_home": true, "group": 1000, "groups": "wheel", "home": "/home/rocky", "name": "rocky", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/bash", "state": "present", "system": false, "uid": 1000}

TASK [Add public key to authorized_keys] *******************************************************************************************************************************************************************
task path: /Users/citizix/projects/ansible/create-user.yaml:17
redirecting (type: modules) ansible.builtin.authorized_key to ansible.posix.authorized_key
changed: [remote-server] => {"changed": true, "comment": null, "exclusive": false, "follow": false, "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6gM14zM0+L+ERQFVFYbHBAjtyghKKx/N+qsFXxrcJqVqsyn1lp/erPqg3g6WSu/bwiAB+E22RyG9icS7Td8ssWi9vDE73DHgC5NGLm4KeP2FospEFjY6v8XVjkwQZJ+8YyCfXJ4E5cm0FGKZREakDlYeaonTaIjxkXlsZB3Yl93+KZvZ0g1WiBOU6N6NWpEQVvxYccWK4+EuQiCryELL0o4dCNrwLaYOyv/NbSYQ09m3+mvN0VRnTzo7qSOqy1U6oCVA9bhd+tRyoUsUqp3Up8jdfzEGfWr/Pqskjtl8YXySPHLEROXX/Om4AyT62EQxcPMzedPJ6HGLHnlk4EO9cBLawymdWO7AlghujksVBu9S+alOkAmJkkPzeq76WOjCTmoNxlQmEDlucukiujfWKl4hACdNVtARptvuc5+4uMYA4j4Ql+XtQ964UQa4HiGiNpoiDegzDq9GMEsQW4W5frRuOIm4R7thYGatRBkNFw+uemE5HclF8LXOuPkShhFqpDPgI1oH99covroXggV8/ovEf9ZSoshNLMHX5kXWGAWF983Cn2N5RpmqN8rfcGVq6C93njExvHDfl7bHkhT10axOLV/V4vX4lSktWVV4//vq2wMQLi5F1l7ai8scA3eYeSaWnDaJj2jnz6V5JBOPIOH/3lf7qq4oquZhmuWq3w== citizix", "key_options": null, "keyfile": "/home/rocky/.ssh/authorized_keys", "manage_dir": true, "path": null, "state": "present", "user": "rocky", "validate_certs": true}

TASK [Deny root from logging in] ***************************************************************************************************************************************************************************
task path: /Users/citizix/projects/ansible/create-user.yaml:23
changed: [remote-server] => {"backup": "", "changed": true, "msg": "line replaced"}

TASK [Allow specific users to log in] **********************************************************************************************************************************************************************
task path: /Users/citizix/projects/ansible/create-user.yaml:30
changed: [remote-server] => {"backup": "", "changed": true, "msg": "line added"}

TASK [Add my pub key to authorized_keys] *******************************************************************************************************************************************************************
task path: /Users/citizix/projects/ansible/create-user.yaml:37
ok: [remote-server] => {"changed": false, "comment": null, "exclusive": false, "follow": false, "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6gM14zM0+L+ERQFVFYbHBAjcsTGZKKx/N+qsFXxrcJqVqsyn1lp/erPqg3g6WSu/bwiAB+E22RyG9icS7Td8ssWi9vDE73DHgC5NGLm4KeP2FospEFjY6v8XVjkwQZJ+8YyCfXJ4E5cm0FGKZREakDlYeaonTaIjxkXlsZB3Yl93+KZvZ0g1WiBOU6N6NWpEQVvxYccWK4+EuQiCryELL0o4dCNrwLaYOyv/NbSYQ09m3+mvN0VRnTzo7qSOqy1U6oCVA9bhd+tRyoUsUqp3Up8jdfzEGfWr/Pqskjtl8YXySPHLEROXX/Om4AyT62EQxcPMzedPJ6HGLHnlk4EO9cBLawymdWO7AlghujksVBu9S+alOkAmJkkPzeq76WOjCTmoNxlQmEDlucukiujfWKl4hACdNVtARptvuc5+4uMYA4j4Ql+XtQ964UQa4HiGiNpoiDegzDq9GMEsQW4W5frRuOIm4R7thYGatRBkNFw+uemE5HclF8LXOuPkShhFqpDPgI1oH99covroXggV8/ovEf9ZSoshNLMHX5kXWGAWF983Cn2N5RpmqN8rfcGVq6C93njExvHDfl7bHkhT10axOLV/V4vX4lSktWVV4//vq2wMQLi5F1l7ai8scA3eYeSaWnDaJj2jnz6V5JBOPIOH/3lf7qq4oquZhmuWq3w== [email protected]", "key_options": null, "keyfile": "/home/rocky/.ssh/authorized_keys", "manage_dir": true, "path": null, "state": "present", "user": "rocky", "validate_certs": true}

TASK [Add rocky to sudoers file] ***************************************************************************************************************************************************************************
task path: /Users/citizix/projects/ansible/create-user.yaml:43
changed: [remote-server] => {"backup": "", "changed": true, "msg": "line replaced"}
META: ran handlers
META: ran handlers

PLAY RECAP *************************************************************************************************************************************************************************************************
remote-server              : ok=6    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Linux
  1. LVMを使用してLinuxで物理ボリュームを作成する方法

  2. Linuxでユーザーグループを作成および削除する方法

  3. RockyLinux8でSudoユーザーを作成する方法

  1. Linuxで複数のユーザーアカウントを作成する方法

  2. Linuxユーザーアカウントを手動で作成する方法

  3. Linux で Snapper コマンドを使用してファイルシステムのスナップショットを作成する方法

  1. Linux / UNIX :fdisk を使用して拡張パーティションを作成する方法

  2. 「dd」コマンドを使用して Linux でスパース ファイルを作成する方法

  3. Pythonを使用してLinuxでユーザーを作成する方法