Ansibleを使用してRaspberry PiまたはOracle Cloudの一部の構成を自動化したいと思います.
作業順序は次のとおりです。
- 現在/デフォルト/安全でないユーザー「ubuntu」を使用してスクリプトを実行する
ansible-playbook security.yml -u ubuntu
- プレイブックから新しいユーザーを作成します。
- 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
プレイブックは、2番目のステップで作成されたセキュリティユーザーにauthenticate_keysファイルが存在することを確認します。
PlayBookは安全でないユーザー「ubuntu」を削除します
プレイブックは引き続き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ユーザーを削除するのですか?
- これは、悪役がubuntuまたはpiユーザーとしてログインするオプションがない場合は、より安全であると感じるためです。
- アンサーブルの限界をもっと深く理解したいです。
答え1
実行中のプロセスを拒否、再所有、または他の方法で偽装するメカニズムがないため、これはまったく可能ではないと思います(ansibleだけでなく基本的に)。
古いユーザーの2番目のユーザー名を変更できますが、なぜ新しいユーザーを作成して他のユーザーを削除するのですか? ansibleではどうなるかわかりませんが、シェルコマンドは次のとおりです。
usermod -l safe_user ubuntu
それでもユーザーを削除するには、削除後にジョブがなくなるようにこのジョブを最後のステップに移動できます。または、追加のスクリプト(プレイブック)で残りのタスクを実行しますsu -c '...' safe_user
(ansibleがこの「ネスト」をサポートしているかどうかは不明です)。
別の変形は、ユーザー(usermod -L ubuntu
)またはそのログイン(usermod ubuntu -s /sbin/nologin
)を完全に削除するのではなく、無効またはロックすることです。
答え2
セキュリティユーザーとしてゲームを実行します。
- 正しく設定されていることを確認してください
gather_facts: no
。それ以外の場合は再生が失敗し、host unreachable
このステップでエラーが報告されます。
- 正しく設定されていることを確認してください
最初の操作では、ユーザーがすでに存在することを確認するためにサーバーをpingしてホストに接続できないというエラーを無視します。
- name: Check if safe user exists ansible.builtin.ping: register: result ignore_unreachable: true
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
これで、セキュリティユーザーはSSHアクセス権を持ち、デフォルトユーザーを削除できるようになりました。
- name: Remove default user ansible.builtin.user: name: "{{ default_user }}" state: absent
プレイブックの残りの部分は安全なユーザーとして実行できます。プレイブックは後で再度実行することもできます。 pingが成功し、ユーザーの作成をスキップします。