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. 플레이북은 두 번째 단계에서 생성된 보안 사용자에 대해 authenticate_keys 파일이 존재하는지 확인합니다.

  2. 플레이북은 안전하지 않은 사용자 "ubuntu"를 제거합니다

  3. 플레이북은 계속해서 Fail2ban, ufw 설정, SSH 포트 변경 등을 수행하지만 지금은 "safe_user"를 사용합니다.

시스템에서 삭제된 Ubuntu 사용자를 사용하여 모든 후속 작업을 계속하려고 시도하기 때문에 4-5단계에서 실패합니다.

5단계에서 <safe_user>를 사용하여 재연결을 지정할 수 있나요?

현재 모든 작업을 두 개의 파일로 분할했지만 하나만 갖고 싶습니다.

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

왜 우분투 사용자를 삭제해야 합니까?

  1. 이는 악당이 ubuntu 또는 pi 사용자로 로그인할 수 있는 옵션이 없을 때 더 안전하다고 느끼기 때문입니다.
  2. 앤서블의 한계를 좀 더 깊이 이해하고 싶습니다.

답변1

실행 중인 프로세스를 거부하거나 다시 소유하거나 다른 방식으로 가장하는 메커니즘이 없기 때문에 이것이 전혀 가능하지 않다고 생각합니다(ansible뿐만 아니라 기본적으로).

이전 사용자의 두 번째 사용자 이름을 바꿀 수 있는데 왜 새 사용자를 만들고 다른 사용자를 삭제해야 합니까? 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이 성공하고 사용자 생성을 건너뜁니다.

관련 정보