]> gitweb.hamatoma.de Git - ansknife.git/commitdiff
improvements
authorHamatoma <author@hamatoma.de>
Fri, 16 May 2025 07:12:02 +0000 (09:12 +0200)
committerHamatoma <author@hamatoma.de>
Fri, 16 May 2025 07:12:02 +0000 (09:12 +0200)
docu/70_postgresql.md [deleted file]
docu/de/70_postgresql.md [new file with mode: 0644]
docu/de/90_wartung.md [new file with mode: 0644]
playbooks.templates/pg_dbs.yaml
playbooks.templates/pg_users.yaml
playbooks.templates/system_files.yaml [new file with mode: 0644]
playbooks/create_project.yaml
templates.install/project_ansible.md [deleted file]
templates.vars/pg.yaml

diff --git a/docu/70_postgresql.md b/docu/70_postgresql.md
deleted file mode 100644 (file)
index d385320..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# POSTGRESQL
-
-## Zielsetzung
-Hier wird beschrieben, wie die Datenbank- und Rechteverwaltung unter PostGreSQL funktioniert.
-
-## Eigenheiten von PostGreSQL
-### Root-Zugriff (automatisch eingerichter Superuser)
-Die Rechteverwaltung findet in der DB postgres statt.
-
-Man erhält Zugriff auf alles, wenn man mit dem (Linux-)Benutzer "postgres" auf die zugreift:
-```
-sudo -u postgres psql postgres
-```
-
-## Rollen, Gruppen, Benutzer
-
-- Für die Rechteverwaltung gibt es nur ein Objekt, die Rolle.
-- Eine Rolle kann ein Benutzer sein: Dann hat sie normalerweise das Attribut LOGIN, darf sich also anmelden. Eine Rolle mit LOGIN braucht ein Passwort.
-- Eine Rolle kann eine Gruppe sein: Dann hat sie normalerweise das Attribut NOLOGIN und kein Passwort.
-- Eine Rolle kann mehreren anderen Rollen zugeordent werden (Gruppeneigenschaft), die dann die Rechte dieser Rolle übernehmen
-
-```
-# Anlegen einer Gruppe admins:
-CREATE ROLE admins WITH CREATEDB CREATEROLE NOLOGIN;
-# Anlegen eines Benutzers dba:
-CREATE ROLE dba LOGIN PASSWORD 'NoOneKnows';
-# Anlegen weiteren Benutzers admbackup:
-CREATE ROLE admbackup LOGIN PASSWORD 'ForgetAtOnce';
-# Zuordnen zur Gruppe:
-GRANT admins TO dba, admbackup;
-# Ändern des Passworts:
-ALTER USER dba WITH PASSWORD 'NoOneKnows';
-```
-
-## Datenbanken
-- Es gibt keinen globalen Zugriff auf alle Datenbanken (Superuser): Jede berechtigte Rolle muss explizit zugewiesen werden.
-- Eine DB braucht einen Besitzer (Rolle)
-
-Konvention:
-- Jede Datenbank hat eine gleichnamige Gruppe (Rolle), die Besitzer der DB ist
-- Über Gruppenzugehörigkeit wird der Zugriff auf andere Benutzer gewährt
-
-### Anlegen der Datenbank mydb
-```
-# Anlegen der Rolle
-CREATE ROLE mydb WITH CREATEDB CREATEROLE NOLOGIN;
-# Anlegen der DB:
-CREATE DATABASE mydb OWNER = mydb;
-# Zugriff von Benutzer Jonny auf mydb:
-GRANT mydb TO jonny;
-```
\ No newline at end of file
diff --git a/docu/de/70_postgresql.md b/docu/de/70_postgresql.md
new file mode 100644 (file)
index 0000000..d385320
--- /dev/null
@@ -0,0 +1,51 @@
+# POSTGRESQL
+
+## Zielsetzung
+Hier wird beschrieben, wie die Datenbank- und Rechteverwaltung unter PostGreSQL funktioniert.
+
+## Eigenheiten von PostGreSQL
+### Root-Zugriff (automatisch eingerichter Superuser)
+Die Rechteverwaltung findet in der DB postgres statt.
+
+Man erhält Zugriff auf alles, wenn man mit dem (Linux-)Benutzer "postgres" auf die zugreift:
+```
+sudo -u postgres psql postgres
+```
+
+## Rollen, Gruppen, Benutzer
+
+- Für die Rechteverwaltung gibt es nur ein Objekt, die Rolle.
+- Eine Rolle kann ein Benutzer sein: Dann hat sie normalerweise das Attribut LOGIN, darf sich also anmelden. Eine Rolle mit LOGIN braucht ein Passwort.
+- Eine Rolle kann eine Gruppe sein: Dann hat sie normalerweise das Attribut NOLOGIN und kein Passwort.
+- Eine Rolle kann mehreren anderen Rollen zugeordent werden (Gruppeneigenschaft), die dann die Rechte dieser Rolle übernehmen
+
+```
+# Anlegen einer Gruppe admins:
+CREATE ROLE admins WITH CREATEDB CREATEROLE NOLOGIN;
+# Anlegen eines Benutzers dba:
+CREATE ROLE dba LOGIN PASSWORD 'NoOneKnows';
+# Anlegen weiteren Benutzers admbackup:
+CREATE ROLE admbackup LOGIN PASSWORD 'ForgetAtOnce';
+# Zuordnen zur Gruppe:
+GRANT admins TO dba, admbackup;
+# Ändern des Passworts:
+ALTER USER dba WITH PASSWORD 'NoOneKnows';
+```
+
+## Datenbanken
+- Es gibt keinen globalen Zugriff auf alle Datenbanken (Superuser): Jede berechtigte Rolle muss explizit zugewiesen werden.
+- Eine DB braucht einen Besitzer (Rolle)
+
+Konvention:
+- Jede Datenbank hat eine gleichnamige Gruppe (Rolle), die Besitzer der DB ist
+- Über Gruppenzugehörigkeit wird der Zugriff auf andere Benutzer gewährt
+
+### Anlegen der Datenbank mydb
+```
+# Anlegen der Rolle
+CREATE ROLE mydb WITH CREATEDB CREATEROLE NOLOGIN;
+# Anlegen der DB:
+CREATE DATABASE mydb OWNER = mydb;
+# Zugriff von Benutzer Jonny auf mydb:
+GRANT mydb TO jonny;
+```
\ No newline at end of file
diff --git a/docu/de/90_wartung.md b/docu/de/90_wartung.md
new file mode 100644 (file)
index 0000000..a527607
--- /dev/null
@@ -0,0 +1,70 @@
+# Wartung und Installation von {{ project }}
+
+Hier wird beschrieben, wie bestimmte Aufgaben mittels Ansible durchgeführt werden können.
+
+## Wartung
+### Linux-Benutzer
+- neuer Benutzer: Änderung in vars/users.yaml
+```
+ansible-playbook playbooks/i_11_user.yaml
+```
+### Webauftritte
+Es wird eine neue Website xxx.example.net benötigt:
+```
+ansible-playbook webapp_create.yaml -e domain=xxx.example.net -e db_name=dbexample -e db_user=dbexample -e db_password=xxx
+```
+### Firewall-Änderung
+Änderung in vars/firewalld.yaml eintragen.
+```
+ansible-playbook playbooks/i_80_firewalld.yaml
+```
+
+### Email-Server-Änderung
+- Alias-Änderung: Änderung in templates.local/postfix/alias.yaml eintragen
+- Postfix-Änderung in main.cf: Änderung in templates.local/postfix/send_only/main.cf eintragen.
+- Postfix-Änderung in master.cf: Änderung in templates.local/postfix/send_only/master.cf eintragen.
+```
+ansible-playbook playbooks/i_60_postfix.yaml
+```
+
+### PHP-Konfiguration-Änderung
+- Änderung in vars/php.yaml eintragen
+```
+for VERS in 7.4 8.2 8.3; do
+  ansible-playbook playbooks/i_40_php8.2.yaml -e php_version=$VERS
+done
+```
+
+### Neues Software-Paket
+- Änderung in vars/packages.yaml
+```
+ansible-playbook playbooks/i_15_server_packages.yaml
+```
+
+### Änderung bei /etc/fstab /etc/exports /etc/hosts
+- Änderung in der Datei unter templates.local/system.files/ eintragen.
+```
+ansible-playbook playbooks/system_files.yaml
+```
+
+
+## Installation
+- Am besten zuerst das Kapitel "Wartung" durchgehen, dort sind die Dateien aufgeführt, in denen konfiguriert wird.
+- Nie in templates.fix konfigurieren: 
+  - das wird vom Paket ansknife bereitgestellt und das sind nur symbolische Links
+  - die Dateien sind schreibgeschützt
+
+### Benutzte Playbooks
+- i_10_basic.yaml
+- i_11_user.yaml
+- i_15_server.yaml
+- i_17_configuration.yaml
+- i_20_configuration.yaml
+- i_30_mariadb.yaml
+- i_40_php8.2.yaml
+  - i_40_php8.2.yaml -e php_vers=7.4
+  - i_40_php8.2.yaml -e php_vers=8.3
+- i_60_postfix.yaml
+- i_80_firewalld.yaml
+- i_81_fail2ban.yaml
+- mysql_create_admin.yaml
index 610caa5e0edc49cb8e18b8368ebc82da9bb552fb..7c34d43d9b82816bbf119b9ec0d16a53132b41d9 100644 (file)
@@ -5,9 +5,11 @@
     - ../vars/pg_vault.yaml
     - ../vars/pg.yaml
   tasks:
-    - name: Create primary groups
+    - name: Create primary roles
       become: true
       become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
       community.postgresql.postgresql_user:
         name: "{{ item }}"
         role_attr_flags: NOLOGIN
     - name: Create PostgreSQL database
       become: true
       become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
       community.postgresql.postgresql_db:
         name: "{{ item }}"
+        owner: "{{ item }}"
         state: present
       with_items: "{{ pg_databases }}"
     - name: Create POSTGIS extension
       become: true
       become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
       community.postgresql.postgresql_ext:
         name: postgis
         db: "{{ item }}"
         state: present
       with_items: "{{ pg_databases }}"
+    - name: Grant all privileges on the database for the primary group
+      become: true
+      become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
+      community.postgresql.postgresql_privs:
+        db: "{{ item }}"
+        privs: ALL
+        type: database
+        roles: "{{ item }}"
+        state: present
+      with_items: "{{ pg_databases }}"
+
index a1f65159a1945b2a98c41acaba402ea3e4d29cd1..eb3f6d44df67bbb30032780761531bd3f70aa807 100644 (file)
     - name: Create users without password
       become: true
       become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
       community.postgresql.postgresql_user:
         name: "{{ item.key }}"
         role_attr_flags: LOGIN
         password: "{{ my_random_value }}"
         state: present
       when: item.value == ''
-      loop: "{{ pg_users | dict2items }}"
+      with_items: "{{ pg_users | dict2items }}"
 
     - name: Create groups
       become: true
       become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
       community.postgresql.postgresql_user:
-        name: "{{ item.key }}"
+        name: "{{ item.group }}"
         role_attr_flags: NOLOGIN
         state: present
-      loop: "{{ pg_groups | dict2items }}"
+      with_items: "{{ pg_groups }}"
 
     - name: Create primary groups of the dbs
       become: true
       become_user: postgres
+      vars:
+        ansible_ssh_pipelining: true
       community.postgresql.postgresql_user:
         name: "{{ item }}"
         role_attr_flags: NOLOGIN
         state: present
       with_items: "{{ pg_databases }}"
 
-    - name: Grant all privileges on the database for the primary group
+    - name: Add users to groups
       become: true
       become_user: postgres
-      community.postgresql.postgresql_privs:
-        db: "{{ item }}"
-        privs: ALL
-        type: database
-        roles: "{ item }}"
+      vars:
+        ansible_ssh_pipelining: true
+      community.postgresql.postgresql_membership:
+        db: postgres         # or the name of your DB
+        group: "{{ item.group }}"
+        target_roles: "{{ item.members }}"
         state: present
-      with_items: "{{ pg_databases }}"
+      with_items: "{{ pg_groups }}"
 
-    - name: Add users to groups
+    - name: Grant all privileges to admins group
       become: true
       become_user: postgres
-      community.postgresql.postgresql_membership:
-        db: postgres         # or the name of your DB
-        group: "{{ item.key }}"
-        target_roles: "{{ item.value }}"
+      vars:
+        ansible_ssh_pipelining: true
+      community.postgresql.postgresql_privs:
+        db: postgres
+        privs: ALL
+        roles: "{{ pg_admins_group }}"
         state: present
-      with_dict: "{{ pg_groups }}"
\ No newline at end of file
+        type: database
+        grant_option: true
\ No newline at end of file
diff --git a/playbooks.templates/system_files.yaml b/playbooks.templates/system_files.yaml
new file mode 100644 (file)
index 0000000..c5f9daf
--- /dev/null
@@ -0,0 +1,17 @@
+---
+- name: Installs important files from /etc
+  hosts: all
+  tasks:
+    - name: Copies the system files
+      ansible.builtin.copy:
+        src: "../templates.local/system.files/{{ item }}"
+        dest: "/etc/{{ item }}"
+        owner: root
+        group: root
+        mode: '0644'
+        backup: yes
+      with_items:
+        - fstab
+        - hosts
+        - exports
+
index 6195e5ca5556eae99168cb6b25d6318d52f5c56b..60e29a7ea308d0baf6b77d1c313b28709fe3782d 100644 (file)
       delegate_to: localhost
     - name: create project specific files
       ansible.builtin.template:
-        src: "../templates.install/{{ item.src }}"
+        src: "{{ item.src }}"
         dest: "{{ base_ansible }}/{{ project }}/{{ item.path }}/{{ item.dest }}"
       with_items:
-        - { src: project_ansible.md, dest: "{{ project }}_ansible", path: docu }
-        - { src: project_cron.yaml, dest: "{{ project }}_cron", path: playbooks }
-        - { src: t_firewalld_local.yaml, dest: "t_firewalld_local.yaml", path: tasks }
+        - { src: ../docu/de/90_wartung.md, dest: "{{ project }}_ansible.md", path: docu }
+        - { src: ../templates.install/project_cron.yaml, dest: "{{ project }}_cron", path: playbooks }
+        - { src: ../templates.install/t_firewalld_local.yaml, dest: "t_firewalld_local.yaml", path: tasks }
       delegate_to: localhost
diff --git a/templates.install/project_ansible.md b/templates.install/project_ansible.md
deleted file mode 100644 (file)
index 98218b7..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Beschreibung der Ansible-Struktur von {{ project }}
-
-## Wartung
-### Benutzer
-* neuer Benutzer: Änderung in vars/users.yaml
-```
-ansible-playbook playbooks/i_11_user.yaml
-```
-### Webauftritte
-Es wird eine neue Website xxx.example.net benötigt:
-```
-ansible-playbook webapp_create.yaml -e domain=xxx.example.net -e db_name=dbexample -e db_user=dbexample -e db_password=xxx
-```
-### Firewall-Änderung
-Änderung in vars/firewalld.yaml eintragen.
-```
-ansible-playbook playbooks/i_80_firewalld.yaml
-```
-
-### Email-Server-Änderung
-- Alias-Änderung: Änderung in templates.local/postfix/alias.yaml eintragen
-- Postfix-Änderung in main.cf: Änderung in templates.local/postfix/send_only/main.cf eintragen.
-- Postfix-Änderung in master.cf: Änderung in templates.local/postfix/send_only/master.cf eintragen.
-```
-ansible-playbook playbooks/i_60_postfix.yaml
-```
-
-## PHP-Konfiguration-Änderung
-- Änderung in vars/php.yaml eintragen
-```
-for VERS in 7.4 8.2 8.3; do
-  ansible-playbook playbooks/i_40_php8.2.yaml -e php_version=$VERS
-done
-```
-
-## Neues Software-Paket
-- Änderung in vars/packages.yaml
-```
-ansible-playbook playbooks/i_15_server_packages.yaml
-```
-
-## Installation
-- Am besten zuerst das Kapitel "Wartung" durchgehen, dort sind die Dateien aufgeführt, in denen konfiguriert wird.
-- Nie in templates.fix konfigurieren: 
-  - das wird vom Paket ansknife bereitgestellt und das sind nur symbolische Links
-  - die Dateien sind schreibgeschützt
-
-### Benutzte Playbooks
-- i_10_basic.yaml
-- i_11_user.yaml
-- i_15_server.yaml
-- i_17_configuration.yaml
-- i_20_configuration.yaml
-- i_30_mariadb.yaml
-- i_40_php8.2.yaml
-  - i_40_php8.2.yaml -e php_vers=7.4
-  - i_40_php8.2.yaml -e php_vers=8.3
-- i_60_postfix.yaml
-- i_80_firewalld.yaml
-- i_81_fail2ban.yaml
-- mysql_create_admin.yaml
index 8ad54e5553e8d3e789ff1bf6dad20d905c272f0e..3275e5f683e89250c344b71d6bb5d0b4cdc40b73 100644 (file)
@@ -8,23 +8,19 @@ pg_additional_packages:
   - "postgresql-{{ pg_version }}-ogr-fdw"
   - "postgresql-{{ pg_version }}-mysql-fdw"
 
-pg_databases:
-  - pggreenlab
-  - pggrlabtest
-  
-
 # Users with password:
 # If password is empty the password is not known
 pg_users:
-  wk: ''
-  reinhard: ''
-  roman: ''
+  jonny: ''
+  dba: ''
 
 # Groups are roles without login rights.
 # Key: name of the role Value: the list of group members
 # Convention: each database has a group with the same name
 pg_groups:
-  admins: [wk, reinhard]
-  pgusers: [wk, reinhard, roman]
-  pggreenlab: [pgusers]
-  pggrlabtest: [pgusers]
+  - admins: [dba]
+  - pgusers: [jonny]
+  - dbexample: [admins, pgusers]
+
+pg_databases:
+  - dbexample