db.dobo.sk

Postgres – vsetko, co si chtel vediet, ale bal sa spytat svojho seniora, aby si nevypadal ako jelito 08. Bezpecnostny audit via ansible.

bez komentára

Dnes som v praci riesil zaujimavy poziadavok – pre vsetky stroje s postgresom dodat auditne informacie obsahujuce data z:

  • konfigurakov serveru a pristupupovych konfigurakov (t.j. postgresql.conf, pg_hba.conf a pg_ident.conf)
  • databazovych userov (t.j. t.j. views pg_shadow a pg_group)

Vseobecna dumka

Kedze strojov je vela, bolo by zahodno to naansiblovat. Pretoze ansible modul Postgresu neobsahuje na toto handlery, najschodnejsou cestou sa mi javilo poslat to ako shell skript ansiblom na vsetky stroje (mozno picovina a existuje na to elegantnejsie riesenie, neviem). Otazkou bolo aj, co do skriptu – ci pokladat dotazy priamo postgresu cez API alebo ist na to nejako od buka…

postgresql.conf

Je ho mozne vycitat ako subor, ale zaujimavejsou moznostou je API a view pg_settings – to ukazuje vsetky aktualne hodnoty nastavenia DB (default i z konfu):

psql -U postgres  -c “select name, setting, source, max_val from pg_settings;”

pg_hba.conf

Postgres obsahuje systemovy view na vycitanie konfiguracie pg_hba.conf a to:

psql -U postgres -c “SELECT * FROM pg_hba_file_rules;

ale nedoporucujem pouzivat, pekne som sa spalil. Vo verzii 11 funguje, jak ma, ale v 9-tkovych verziach nie je implementovany, bezpecnejsou cestou je vycitat priamo subor a neselektovat to zo systemovych tabuliek, takze spravna cesta je citat subor:

grep -v “#” $(find / -type f -name pg_hba.conf)

pg_ident.conf

Subor ident sa bude citat ako subor, neviem o ziadnej moznosti, ze by bol dosianutelny cez API, takze:

 grep -v “#” $(find / -type f -name pg_ident.conf)

 useri a grupy z DB

psql -U postgres -c “select * from pg_shadow;”

psql -U postgres -c “select * from pg_group;”

 Ansible

Takze mame hotovy skript psql_audit.sh a ten sa bude posielat ansiblom na vsetky stroje via modul shell z management stroja. Je nutne vytvorit:

  • hosts file, kde su databaze v grupe napr. db
  • playbook, napr. postgres_audit.yml

Obsah playbooku:


- hosts: db
  tasks:
   – name: auditing postgres
     script: /home/ansible/psql_audit.sh
     register: output
   – debug: var=output.stdout_lines
a spustit asi takymto stylom:

ansible-playbook -i /home/ansible/postgres_db playbooks/postgres_audit.yml –become

píše: ďobo

November 25th, 2019 o 3:33 pm

chlievik: linux,postgresql

okomentuj