Benutzer-Werkzeuge

Webseiten-Werkzeuge


ansible

Dies ist eine alte Version des Dokuments!


Ansible

> ansible-playbook -i inventory.yml -l test01 playbook_update.yml
> ansible-playbook -i inventory.yml -l test02 playbook_update.yml
---
- name: PlayBook Betriebssystemversion anzeigen
  hosts: all
  gather_facts: yes
  become: true
  tasks:

    - name: jammy
      ansible.builtin.debug:
        var: ansible_facts.lsb.codename

    - name: Ubuntu 22.04.4 LTS
      ansible.builtin.debug:
        var: ansible_facts.lsb.description

    - name: Ubuntu
      ansible.builtin.debug:
        var: ansible_facts.lsb.id

    - name: 22
      ansible.builtin.debug:
        var: ansible_facts.lsb.major_release

    - name: 22.04
      ansible.builtin.debug:
        var: ansible_facts.lsb.release
inventory.yml
---
servers:
  hosts:
    test01:
      ansible_host: 10.10.3.11
      become: true
    test02:
      ansible_host: 10.10.3.12
      become: true
include_variables.yml
---
ansible_python_interpreter: "/usr/bin/python3"
 
SSHDCFG: "/etc/ssh/sshd_config"
 
NTP_SERVER1: "192.168.20.5"
NTP_SERVER2: "10.10.11.1"
include_users.yml
---
#------------------------------------------------------------------------------#
# SFTP-Benutzer definieren
#------------------------------------------------------------------------------#
#
# Der User, bei dem Gruppenname und Benutzername sind gleich, ist ein "Master",
# alle weiteren User, die mit dieser gleichen Gruppe angelegt werden,
# sind "Kunden" unterhalb dieses Masters.
#
# Wenn bei einem User der Gruppenname und der Benutzername gleich sind,
# dann wird sein Home-Verzeichnis ganz normal unterhalb von /home angelegt.
# Sind diese Namen unterschiedlich, dann wird sein Home-Verzeichnis unterhalb
# dessen Home-Verzeichnis angelegt, dessen Benutzername dem eigenen Gruppennamen
# entspricht.
#
# Ein "Master" hat kein "datadir", ein "Kunde" braucht immer ein "datadir"!
#
#------------------------------------------------------------------------------#
    users:
      - name: "sftp"
        gruppe: "sftp"
        shell: "/bin/bash"
        ssh_key: "{{ lookup('file', 'ssh-keys/sftp.pub') }}"
        password: "!"
        comment: "Master-User"
 
      - name: "otto"
        gruppe: "sftp"
        shell: "/bin/bash"
        ssh_key: "{{ lookup('file', 'ssh-keys/otto.pub') }}"
        password: "!"
        comment: "Otto der Filmemacher"
        datadir: "DATEN"
 
      - name: "fritz"
        gruppe: "sftp"
        shell: "/bin/bash"
        ssh_key: "{{ lookup('file', 'ssh-keys/fritz.pub') }}"
        password: "!"
        comment: "Fritzchen klein ging allein"
        datadir: "DATEN"
playbook_update.yml
---
# -----------------------------------------------------------
# Upgrade
# -----------------------------------------------------------
- name: "Update"
  gather_facts: false
  become: true
  hosts: servers
  tasks:
    # -------------------------------------------------------
    #  IPv6 abschalten
    # -------------------------------------------------------
    - name: Deactivate ipv6 perm
      lineinfile:
        path: /etc/default/grub
        state: present
        regexp: '^GRUB_CMDLINE_LINUX='
        line: 'GRUB_CMDLINE_LINUX="ipv6.disable=1"'
 
    - name: Deactivate ipv6 temp
      ansible.builtin.shell: |
        sysctl -w net.ipv6.conf.all.disable_ipv6=1
        sysctl -w net.ipv6.conf.default.disable_ipv6=1
        update-grub
        exit 0
      args:
        executable: /bin/bash
 
    - name: Restart systemd-resolved
      service:
        name: systemd-resolved
        state: restarted
 
    # -------------------------------------------------------
    #  apt-get dist-upgrade
    # -------------------------------------------------------
    - name: Perform a dist-upgrade.
      ansible.builtin.apt:
        upgrade: dist
        update_cache: yes
 
    - name: Check if a reboot is required.
      ansible.builtin.stat:
        path: /var/run/reboot-required
        get_md5: no
      register: reboot_required_file
 
    - name: Reboot the server (if required).
      ansible.builtin.reboot:
      when: reboot_required_file.stat.exists == true
 
    - name: Remove dependencies that are no longer required.
      apt:
        autoremove: yes
 
    - name: Check the Uptime of the servers
      shell: "uptime"
      register: Uptime
 
    - debug: var=Uptime.stdout
 
    ### TASK install basic
    - name: Install Tools server
      apt:
        update_cache: yes
        name:
          - systemd-timesyncd
          - vim
          - screen
          - mc
        state: present
playbook_add_user.yml
---
- hosts: servers
  gather_facts: true
  become_user: root
  become: true
  tasks:
 
#==============================================================================#
### SSHD/SFTP-Konfiguration - Anfang
#------------------------------------------------------------------------------#
### die letzte Sektion wird entfernt, weil sie immer am Ende bleiben muss
### und hier aber noch etwas hinzugefühgt (bzw. eingeschoben) werden soll
 
    # 330 # Sicherheitssektion entfernen
    - name: Textblock aus der Datei entfernen
      ansible.builtin.blockinfile:
        path: "{{SSHDCFG}}"
        marker: "# {mark} Sicherheitssektion"
        block: ""
        state: absent
 
#----------------------------------------------------------------------#
### Das SFTP-Sub-System mus umgestellt werden
 
    - name: SFTP-User umask 0002
      ansible.builtin.lineinfile:
        path: "{{SSHDCFG}}"
        line: Subsystem sftp internal-sftp -u 002 -l VERBOSE
        create: yes
 
    #--------------------------------------------------------------------------#
    # SFTP-Log
    #--------------------------------------------------------------------------#
    # 350 # SSHD/SFTP - überprüfen und ggf. konfigurieren
    - name: SFTP - logadmin einrichten
      ansible.builtin.lineinfile:
        path: "{{SSHDCFG}}"
        line: "{{ item }}"
        create: yes
      with_items:
        - '# Log internal-sftp in a separate file'
        - ':programname, isequal, "internal-sftp" -/var/log/sftp.log'
        - ':programname, isequal, "internal-sftp" ~'
 
    #--------------------------------------------------------------------------#
    # 365 # spezieller Benutzer zum lesen von Logs
    - name: SFTP - SSHD-CFG für logadmin
      ansible.builtin.lineinfile:
        path: "{{SSHDCFG}}"
        line: "{{ item }}"
        create: yes
      with_items:
        - '# Create an additional socket for some of the sshd chrooted users.'
        - '$AddUnixListenSocket /home/logadmin/dev/log'
        - '#========================================================================#'
        - 'Match user logadmin'
        - '        ChrootDirectory %h'
        - '        X11Forwarding no'
        - '        AllowTcpForwarding no'
        - '        ForceCommand internal-sftp -l VERBOSE'
 
#==============================================================================#
### SSHD/SFTP-Konfiguration - Mitte
 
#------------------------------------------------------------------------------#
### Master: item['name'] == item['gruppe']
 
    - name: Master-Gruppe anlegen
      ansible.builtin.group:
        name: "{{ item['gruppe'] }}"
        state: present
        local: false
        non_unique: false
      when: item['name'] == item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Master-Benutzer anlegen
      ansible.builtin.user:
        name: "{{ item['name'] }}"
        group: "{{ item['gruppe'] }}"
        home: "/home/{{ item['name'] }}"
        comment: "{{ item['comment'] }}"
        password: "{{ item.password | default('!') }}"
        state: present
        umask: 0002
        append: false
        create_home: true
        generate_ssh_key: false
        local: false
        non_unique: false
      when: item['name'] == item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Master-Home-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['name'] }}"
        owner: root
        group: root
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] == item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Master-DEV-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['name'] }}/dev"
        owner: root
        group: root
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] == item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Master-SSH-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['name'] }}/.ssh"
        owner: "{{ item['name'] }}"
        group: root
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] == item['gruppe']
      with_items:
        - "{{ users }}"
 
#------------------------------------------------------------------------------#
### Kunden: item['name'] != item['gruppe']
 
    - name: Kunde-Benutzer anlegen
      ansible.builtin.user:
        name: "{{ item['name'] }}"
        group: "{{ item['gruppe'] }}"
        home: "/home/{{ item['gruppe'] }}/{{ item['name'] }}"
        comment: "{{ item['comment'] }}"
        password: "{{ item.password | default('!') }}"
        state: present
        umask: 0002
        append: false
        create_home: true
        generate_ssh_key: false
        local: false
        non_unique: false
      when: item['name'] != item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Kunden-Home-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['gruppe'] }}/{{ item['name'] }}"
        owner: root
        group: root
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] != item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Kunden-DEV-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['gruppe'] }}/{{ item['name'] }}/dev"
        owner: root
        group: root
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] != item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Kunden-SSH-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['gruppe'] }}/{{ item['name'] }}/.ssh"
        owner: "{{ item['name'] }}"
        group: root
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] != item['gruppe']
      with_items:
        - "{{ users }}"
 
    - name: Rechte vom Kunden-DATADIR-Verzeichnis setzen
      ansible.builtin.file:
        path: "/home/{{ item['gruppe'] }}/{{ item['name'] }}/{{ item['datadir'] }}"
        owner: "{{ item['name'] }}"
        group: "{{ item['gruppe'] }}"
        mode: '0755'
        recurse: false
        state: directory
      when: item['name'] != item['gruppe']
      with_items:
        - "{{ users }}"
 
#------------------------------------------------------------------------------#
### Alle Benutzer
 
    - name: SSH-Schlüssel ablegen
      authorized_key:
        user: "{{ item['name'] }}"
        key: "{{ item['ssh_key'] }}"
        state: present
      with_items:
        - "{{ users }}"
 
#==============================================================================#
### SSHD/SFTP-Konfiguration - Ende
#------------------------------------------------------------------------------#
    #--------------------------------------------------------------------------#
    # Sicherheitssektion
 
    - name: "Textblock an die Datei anhängen / der muß immer ganz unten in der Datei sein"
      ansible.builtin.blockinfile:
        path: "{{SSHDCFG}}"
        marker: "# {mark} Sicherheitssektion"
        block: "#------------------------------------------------------------------------------#\nMatch group !root,!admin,*\n\t
                ChrootDirectory /tmp\n\t
                X11Forwarding no\n\t
                AllowTcpForwarding no\n\t
                ForceCommand internal-sftp -l VERBOSE\n#------------------------------------------------------------------------------#"
        state: present
 
    #--------------------------------------------------------------------------#
    - name: Restart sshd
        service:
          name: sshd
          state: restarted
          enabled: true
/home/http/wiki/data/attic/ansible.1712239881.txt · Zuletzt geändert: von manfred