ansible-playbookを使用して新しいユーザーを作成し、現在のユーザー「ubuntu」を削除します。

ansible-playbookを使用して新しいユーザーを作成し、現在のユーザー「ubuntu」を削除します。

Ansibleを使用してRaspberry PiまたはOracle Cloudの一部の構成を自動化したいと思います.

作業順序は次のとおりです。

  1. 現在/デフォルト/安全でないユーザー「ubuntu」を使用してスクリプトを実行する
ansible-playbook security.yml -u ubuntu
  1. プレイブックから新しいユーザーを作成します。
    - name: create a new safe user
      user:
        name: "{{ safe_user }}"
        state: present
        groups: "sudo"
        password: "{{ password }}"
        comment: "Safe user"
        shell: /bin/bash
        update_password: on_create
  1. プレイブックは、2番目のステップで作成されたセキュリティユーザーにauthenticate_keysファイルが存在することを確認します。

  2. PlayBookは安全でないユーザー「ubuntu」を削除します

  3. プレイブックは引き続きFail2ban、ufw設定、SSHポートの変更などを行いますが、今は「safe_user」を使用しています。

システムから削除されたUbuntuユーザーを使用してすべての後続の操作を続行しようとするため、手順4〜5で失敗します。

ステップ5で<safe_user>を使用して再接続を指定できますか?

私は現在、すべてのタスクを2つのファイルに分割していますが、1つだけが欲しいのです。

$ ansible-playbook security-1.yml -u ubuntu # will create safe_user
$ ansible-playbook security-2.yml -u safe_user # will delete ubuntu user

なぜUbuntuユーザーを削除するのですか?

  1. これは、悪役がubuntuまたはpiユーザーとしてログインするオプションがない場合は、より安全であると感じるためです。
  2. アンサーブルの限界をもっと深く理解したいです。

答え1

実行中のプロセスを拒否、再所有、または他の方法で偽装するメカニズムがないため、これはまったく可能ではないと思います(ansibleだけでなく基本的に)。

古いユーザーの2番目のユーザー名を変更できますが、なぜ新しいユーザーを作成して他のユーザーを削除するのですか? ansibleではどうなるかわかりませんが、シェルコマンドは次のとおりです。

usermod -l safe_user ubuntu

それでもユーザーを削除するには、削除後にジョブがなくなるようにこのジョブを最後のステップに移動できます。または、追加のスクリプト(プレイブック)で残りのタスクを実行しますsu -c '...' safe_user(ansibleがこの「ネスト」をサポートしているかどうかは不明です)。

別の変形は、ユーザー(usermod -L ubuntu)またはそのログイン(usermod ubuntu -s /sbin/nologin)を完全に削除するのではなく、無効またはロックすることです。

答え2

  1. セキュリティユーザーとしてゲームを実行します。

    • 正しく設定されていることを確認してくださいgather_facts: no 。それ以外の場合は再生が失敗し、host unreachableこのステップでエラーが報告されます。
  2. 最初の操作では、ユーザーがすでに存在することを確認するためにサーバーをpingしてホストに接続できないというエラーを無視します。

    - name: Check if safe user exists
      ansible.builtin.ping:
      register: result
      ignore_unreachable: true
    
  3. pingが失敗した場合は、作成したセキュリティユーザーのデフォルトユーザーを使用してsudo権限を付与し、SSHキーを追加します。

    - name: Handle the error (missing user)
      when: result.failed == true
      vars:
        ansible_ssh_user: "{{ default_user }}"
      block:
        - ansible.builtin.meta: clear_host_errors
        - name: Create safe user
          ansible.builtin.user:
            name: "{{ safe_user }}"
            password: "{{ password | password_hash('sha512') }}"
            groups:
              - sudo
              - users
            append: true
            shell: "{{ shell }}"
        - name: Add Authorized key
          ansible.posix.authorized_key:
            user: "{{ safe_user }}"
            key: "{{ ssh_pub_key }}"
            exclusive: true
    
  4. これで、セキュリティユーザーはSSHアクセス権を持ち、デフォルトユーザーを削除できるようになりました。

    - name: Remove default user
      ansible.builtin.user:
        name: "{{ default_user }}"
        state: absent
    
  5. プレイブックの残りの部分は安全なユーザーとして実行できます。プレイブックは後で再度実行することもできます。 pingが成功し、ユーザーの作成をスキップします。

関連情報