GNU/Linux >> Belajar Linux >  >> Linux

Cara membuat Pengguna Linux Menggunakan Ansible

Ansible adalah penyediaan perangkat lunak sumber terbuka, manajemen konfigurasi, dan alat penerapan aplikasi yang memungkinkan infrastruktur sebagai kode. Ini berjalan di banyak sistem mirip Unix, dan dapat mengonfigurasi sistem mirip Unix serta Microsoft Windows.

Prasyarat

Untuk mengikuti panduan ini, Anda memerlukan yang berikut:

  • python diinstal di sistem lokal
  • Pipi python terpasang
  • Dapat dipasang secara lokal

Langkah

  1. Instal dependensi
  2. Buat kata sandi menggunakan paket passlib
  3. Buat pedoman yang memungkinkan untuk mendefinisikan tugas yang diperlukan
  4. Seluruh buku pedoman

1. Instal dependensi

Agar ini berfungsi, kita membutuhkan paket ansible dan passlib.

Instal paket passlib yang memungkinkan:

sudo pip install passlib

Instal mungkin

sudo pip install ansible

2. Buat kata sandi menggunakan paket passlib

Ansible akan menambahkan kata sandi apa adanya untuk pengguna. Kata sandi dienkripsi sehingga kata sandi default tidak akan berfungsi.

Dapatkan kata sandi terenkripsi dengan perintah ini:

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

Keluaran:

➜ 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. Buat pedoman yang memungkinkan mendefinisikan tugas yang diperlukan

Sekarang setelah semua dependensi terinstal, mari kita definisikan buku pedoman kita.

Pertama, Anda perlu menentukan nama, host, dan informasi tambahan seperti variabel:

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

Bagian selanjutnya adalah untuk tugas.

Tugas yang memungkinkan untuk membuat pengguna linux

Karena kami ingin membuat pengguna, kami akan menggunakan user yang memungkinkan modul. Lihat lebih lanjut tentang modul pengguna di sini.

Tugas ini akan membuat pengguna dengan name yang disediakan dan password yang akan diinterpolasi dari variabel yang didefinisikan sebelumnya:

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

Opsional:Tugas yang memungkinkan untuk menambahkan kunci publik ke kunci_otorisasi untuk pengguna

Untuk mengizinkan login tanpa kata sandi ke server, kita dapat menambahkan kunci ssh publik kita ke kunci resmi di server. Modul otorisasi_kunci yang memungkinkan digunakan untuk mencapai hal ini.

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

Opsional:Tugas yang memungkinkan untuk menolak akses root ssh

Langkah selanjutnya adalah menolak login root melalui ssh. Ini adalah praktik yang baik untuk mengizinkan pengguna non-root untuk masuk. Kami menggunakan lineinfile modul yang akan memastikan bahwa sebagai baris tertentu ada dalam file yang ditentukan. Kami menggunakan ekspresi reguler untuk mencocokkan garis.

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

Opsional:Tugas yang memungkinkan untuk menambahkan pengguna ke daftar Pengguna yang Diizinkan

Praktik keamanan yang baik adalah mengizinkan hanya pengguna tertentu yang masuk ke sistem. Tugas ini akan melakukannya.

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

Opsional:Tambahkan pengguna ke file sudoers sehingga mereka dapat menjalankan perintah sudo:

Jika Anda ingin pengguna yang dibuat menjalankan perintah sudo tanpa prompt kata sandi, sertakan tugas ini.

Di sini, kami menggunakan lineinfile modul untuk mencari ekspresi reguler yang cocok dengan pengguna kemudian memvalidasi bahwa semuanya berfungsi seperti yang diharapkan dengan perintah 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. Seluruh pedoman

Ini adalah bagaimana keseluruhan buku pedoman akan terlihat seperti. Simpan konten ini ke dalam .yaml atau .yml mengajukan. Dalam kasus saya 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. Menjalankan buku pedoman

Sekarang kita telah membuat buku pedoman dalam file create-user.yaml di direktori saat ini, kita perlu menyediakan file host yang akan menentukan koneksi ke server kita. Dari definisi buku pedoman, kami mendefinisikan server kami sebagai remote-server . Sekarang mari tambahkan itu ke file host.

Buat file hosts.yaml dengan konten berikut mendefinisikan remote-server :

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

Sekarang kita perlu menjalankan ansible-playbook perintah seperti ini:

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

Pada perintah di atas, -i menentukan file inventaris. -vv memungkinkan verbositas.

Ini adalah output dari server saya:

➜ 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. Cara Membuat Pengguna Sudo di Rocky Linux 8

  2. Cara Membuat Snapshot Sistem File menggunakan Perintah Snapper di Linux

  3. Linux / UNIX :Cara membuat partisi extended menggunakan fdisk

  1. Cara Membuat Banyak Akun Pengguna di Linux

  2. Cara membuat file sparse di Linux menggunakan perintah 'dd'

  3. Cara membuat user di linux menggunakan python

  1. Cara membuat volume fisik di Linux menggunakan LVM

  2. Cara membuat dan menghapus grup pengguna di Linux

  3. Cara Membuat Akun Pengguna Linux secara manual