Postgres – vsetko, co si chtel vediet, ale bal sa spytat svojho seniora, aby si nevypadal ako jelito 08. Bezpecnostny audit via ansible.
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