Uputstvo za instalaciju i konfiguraciju PostgreSQL baze podataka za potrebe eduroam Davaoca Resursa (RP)¶
PostgreSQL softver će se koristiti za potrebe skladištenja log poruka vezanih za upotrebu eduroam Davaoca Resursa.
- Verzija PostgreSQL softvera: 14.6
- Operativni sistem: CentOS 7
Nakon što ste ispratili uputstvo za instalaciju i konfiguraciju eduroam Davaoca Resursa, možete na istoj VM nastaviti instalaciju i konfiguraciju PostgreSQL baze
U okviru ovog uputstva podrazumeva se da instalirate PostgreSQL bazu na VM gde ste već instalirali i konfigurisali eduroam Davalac Resursa. Deo Priprema VM vam samo daje mogućnost da instalirate bazu na zasebnu VM. Ukoliko vam to nije potrebno, preskočiti deo Priprema VM i pratiti od dela Instalacija postgres baze podataka
Priprema VM¶
Ukoliko PostgreSQL bazu instalirate na zasebnoj VM
- U tom slučaju neophodno je da izvršite sva inicijalna podešavanja VM što podrazumeva: proces onemogućenja SELinux funkcionalnosti, podesiti hostname VM, onemogućiti firewalld servis, podešavanje IPTABLES pravila tako da se otvori port 5432 putem kog bi radius server pristupao bazi i skladištio log poruke
Onemogućiti SElinux¶
Radi adekvatnog funkcionisanja softvera neophodno je onemogućiti SELinux!
Provera statusa:
To se može uraditi na sledeći način:
Otoriti fajl /etc/selinux/config i promeniti vrednost iz SELINUX=enforcing u SELINUX=disabled.
Podesiti hosta¶
U okviru čitavog uputstva smatraće se da je domen VM postgresql.institucija.ac.rs, tako da na svim mestima umesto ovog naziva domena potrebno je da unesete naziv po vašem izboru.
Veoma je važno da FQDN (Fully Qualified Domain Name) i pun hostname (# hostname -f) ove VM, npr. postgresql.institucija.ac.rs, koji se podešava u okviru ove sekcije bude isti kao i domen koji je adekvatno podešen na DNS serveru, a taj domen će se takođe kasnije koristiti za kreiranje sertifikata.
Podešavanje host podataka
Dat je primer postavljanja FQDN podatka postgresql.institucija.ac.rs i postavljanja HOSTNAME podatka postgresql :
Na kraju fajla se unosi linija u formi: IP ADRESA FQDN HOSTNAME:
Postaviti hostname
Koristi se komanda sledeće forme: hostnamectl set-hostname HOSTNAME
Sačuvati izmene:
Podesiti IPTABLES¶
Najpre je potrebno onemogućiti firewalld servis, ukoliko već nije.
Potrebno je instalirati iptables-services softverski paket i omogućiti iptables proces, ukoliko već nije.
Otvoriti port 5432 prema instaliranom RADIUS Davaocu Resursa. Zaštitite na ovaj način pristup bazi tako da bude dostupan samo RADIUS Davaocu Resursa.
To se može uraditi na sledeći način:
Otvoriti navedeni port dodavanjem sledeće linije u fajl:
Napomena: Navedene linije je potrebno uneti bavezno iznad linije: -A INPUT -j REJECT --reject-with icmp-host-prohibited
Instalacija PostgreSQL baze podataka¶
Napomena: Možete da instalirate bilo koju verziju PostgreSQL baze veću od 9.5, a u ovom uputstvu je korišćena najnovija verzija PostgreSQL baze 14.6
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Zatim je potrebno pokrenuti postgresql proces:
Instalirati dodatne pakete:
Provera verzije instalirane PostgreSQL baze:
[root@postgresql ~]# su postgres
bash-4.2$ psql
could not change directory to "/root": Permission denied
psql (14.6)
Type "help" for help.
postgres=# SELECT version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 14.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)
postgres=# \q
postgres@postgresql:/root$ exit
Podešavanje PostgreSQL baze podataka¶
Fajl postgresql.conf¶
Ne treba menjati ovaj fajl ukoliko se PostgreSQL baza instalira na istoj VM gde ste instalirali RADIUS server.
Ovaj fajl je potrebno izmeniti samo ukoliko PostgreSQL bazu instalirate na zasebnoj VM. Putem ovog fajla se omogućava konekcija sa RADIUS RP
Potrebno je izmeniti deo CONNECTIONS AND AUTHENTICATION
Ispod linije: #listen_addresses = 'localhost'
dodati liniju:
Sačuvati izmene fajla.
Kreiranje radius korisnika¶
Ukoliko se naredne komande izvrše sa putanje /root prikazalo bi se obaveštenje could not change directory to "/root": Permission denied
-
To obaveštenje ne utiče na rezultat komandi tako da nije od presudog značaja
-
Bilo bi ipak preporuka pokrenuti ove komande sa putanje /var/lib/pgsql/
Potrebno je kreirati radius korisnika u instaliranoj PostgreSQL bazi podataka
Pregled kreiranog radius korisnika:
Kreiranje radius baze u okviru PostgreSQL baze podataka¶
Potrebno je kreirati radius bazu u instaliranoj PostgreSQL bazi podataka i dodeliti pivilegije korisniku iz prethodnog koraka
Pregled kreirane radius baze:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
radius | radius | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
Za sada je radius baza prazna i potrebno je importovati u nju odgovarajuće tabele u nastavku uputstva
Fajl pg_hba.conf¶
Izmene fajla pg_hba.conf kada su RADIUS server i PostgreSQL baza podataka na istoj VM¶
Da bi se importovale tabele u okviru radius baze potrebno je editovati fajl pg_hba.conf
- Potrebno je zakomentarisati liniju
local all all peer
i ispod nje dodati liniju :
- Potrebno je zakomentarisati linije:
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Sačuvati izmene fajla.
Izmene fajla pg_hba.conf kada su RADIUS server i PostgreSQL baza podataka na različitim VM¶
Da bi se importovale tabele u okviru radius baze potrebno je editovati fajl pg_hba.conf
- Potrebno je zakomentarisati liniju
local all all peer
i ispod nje dodati liniju :
- Potrebno je zakomentarisati liniju
host all all 127.0.0.1/32 scram-sha-256
i ispod nje dodati liniju gde deo 1xx.xxx.xxx.xxx predstavlja IP adresu RADIUS servera:
- Potrebno je zakomentarisati linije:
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Sačuvati izmene fajla.
Import tabela radacct, radcheck, radgroupcheck, radreply, radgroupreply, radusergroup, radpostauth i nas¶
Import navedenih tabela kada su RADIUS server i PostgreSQL baza podataka na istoj VM¶
Potrebno je otići na sledeću putanju:
Importovati fajl schema.sql koji sadrži potrebne tabele:
[root@postgresql postgresql]# su postgres
[postgres@postgresql postgresql]$ psql -U radius radius < /tmp/schema/schema.sql
Password for user radius:
Izveštaj:
[root@postgresql postgresql]# su postgres
[postgres@postgresql postgresql]$ psql -U radius radius < /tmp/schema/schema.sql
Password for user radius:
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
Import navedenih tabela kada su RADIUS server i PostgreSQL baza podataka na različitim VM¶
Preskočiti ovaj deo ukoliko se PostgreSQL baza instalira na istoj VM gde ste instalirali RADIUS server.
U ovom slučaju potrebno je preneti schema.sql fajl sa RADIUS servera na ovu VM. Možete da kreirate direktorijum /tmp/schema/ u svrhu skladištenja šeme:
Zatim sa lokacije /usr/local/etc/raddb/mods-config/sql/main/postgresql na RADIUS serveru preneti fajl schema.sql u novokreirani direktorijum na VM gde je PostgreSQL baza.
Vratiti se u direktorijum /var/lib/pgsql/ :
Importovati fajl schema.sql koji sadrži potrebne tabele u radius bazu korišćenjem radius korinika i njegove lozinke:
[root@postgresql pgsql]# su postgres
[postgres@postgresql pgsql]$ psql -U radius radius < /tmp/schema/schema.sql
Password for user radius:
Izveštaj:
[root@postgresql pgsql]# su postgres
[postgres@postgresql pgsql]$ psql -U radius radius < /tmp/schema/schema.sql
Password for user radius:
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE TABLE
CREATE INDEX
Import tabele cui¶
Import tabele cui kada su RADIUS server i PostgreSQL baza podataka na istoj VM¶
Potrebno je otići na sledeću putanju:
Importovati fajl schema.sql koji sadrži potrebne tabele:
[root@postgresql postgresql]# su postgres
[postgres@postgresql postgresql]$ psql -U radius radius < /tmp/schema/schema.sql
Password for user radius:
Izveštaj:
Import tabele cui kada su RADIUS server i PostgreSQL baza podataka na različitim VM¶
Preskočiti ovaj deo ukoliko se PostgreSQL baza instalira na istoj VM gde ste instalirali RADIUS server.
U ovom slučaju potrebno je preneti schema.sql fajl sa RADIUS servera na ovu VM. Možete da kreirate direktorijum /tmp/schema/cui u svrhu skladištenja šeme:
Zatim sa lokacije /usr/local/etc/raddb/mods-config/sql/cui/postgresql/ na RADIUS serveru preneti fajl schema.sql u novokreirani direktorijum na VM gde je PostgreSQL baza.
Vratiti se u direktorijum /var/lib/pgsql/ :
Importovati fajl schema.sql koji sadrži potrebne tabele u radius bazu korišćenjem radius korinika i njegove lozinke:
[root@postgresql pgsql]# su postgres
[postgres@postgresql pgsql]$ psql -U radius radius < /tmp/schema/cui/schema.sql
Password for user radius:
Izveštaj:
Ponovna izmena fajla pg_hba.conf¶
Izmene fajla pg_hba.conf kada su RADIUS server i PostgreSQL baza podataka na istoj VM¶
-
Potrebno je otkomentarisati liniju
local all all peer
-
Potrebno je zakomentarisati liniju
local all all scram-sha-256
Sačuvati izmene fajla.
Izmene fajla pg_hba.conf kada su RADIUS server i PostgreSQL baza podataka na različitim VM¶
Da bi se importovale tabele u okviru radius baze potrebno je editovati fajl pg_hba.conf
-
Potrebno je otkomentarisati liniju
local all all peer
-
Potrebno je zakomentarisati liniju
local all all scram-sha-256
Provera importovanih tabela¶
[root@postgresql ~]# cd /var/lib/pgsql/
[root@postgresql pgsql]# su postgres
[postgres@postgresql pgsql]$ psql
psql (14.6)
Type "help" for help.
postgres=# \c radius
You are now connected to database "radius" as user "postgres".
radius=# \dt
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+--------
public | cui | table | radius
public | nas | table | radius
public | radacct | table | radius
public | radcheck | table | radius
public | radgroupcheck | table | radius
public | radgroupreply | table | radius
public | radpostauth | table | radius
public | radreply | table | radius
public | radusergroup | table | radius
(9 rows)
Dodatno podešavanje cui tabele¶
Otići na lokaciju /var/lib/pgsql/ :
Pristupiti PostgreSQL bazi :
[root@postgresql pgsql]# su postgres
[postgres@postgresql pgsql]$ psql
psql (14.6)
Type "help" for help.
Otvoriti radius bazu:
- radius baza se otvara korišćenjem komande:
\c radius
Trenutne karakteristike cui tabele:
-
Za ispis karakteristika tabele koristi se komanda:
\d cui
nakon što se uđe u radius bazu. -
Tu se mogu videti veličine, tipovi polja, određena pravila koja se vezuju za tu tabelu i sl.
Prikaz karakteristika cui tabele:
radius=# \d cui
Table "public.cui"
Column | Type | Collation | Nullable | Default
------------------+--------------------------+-----------+----------+-----------------------------------------------------------
clientipaddress | inet | | not null | '0.0.0.0'::inet
callingstationid | character varying(50) | | not null | ''::character varying
username | character varying(64) | | not null | ''::character varying
cui | character varying(32) | | not null | ''::character varying
creationdate | timestamp with time zone | | not null | '2023-01-12 12:06:02.704965+01'::timestamp with time zone
lastaccounting | timestamp with time zone | | not null | '-infinity'::timestamp without time zone
Indexes:
"cui_pkey" PRIMARY KEY, btree (username, clientipaddress, callingstationid)
Rules:
postauth_query AS
ON INSERT TO cui
WHERE (EXISTS ( SELECT 1
FROM cui cui_1
WHERE cui_1.username::text = new.username::text AND cui_1.clientipaddress = new.clientipaddress AND cui_1.callingstationid::text = new.callingstationid::text)) DO INSTEAD UPDATE cui SET lastaccounting = '-infinity'::timestamp with time zone, cui = new.cui
WHERE cui.username::text = new.username::text AND cui.clientipaddress = new.clientipaddress AND cui.callingstationid::text = new.callingstationid::text
Nedovoljno je da cui polje zauzima dužinu od 32 karaktera i ima tip varchar(32) i to u nastavku treba povećati na 128:
-
Najpre treba odbaciti prisutno pravilo komandom:
DROP RULE postauth_query ON cui;
-
Zatim povećati broj karaktera polja komandom:
ALTER TABLE cui ALTER COLUMN cui TYPE varchar(128);
-
Za ispis novih karakteristika tabele koristi se komanda:
\d cui
Prikaz izvršenih komandi:
radius=# DROP RULE postauth_query ON cui;
DROP RULE
radius=# ALTER TABLE cui ALTER COLUMN cui TYPE varchar(128);
ALTER TABLE
radius=# \d cui
Table "public.cui"
Column | Type | Collation | Nullable | Default
------------------+--------------------------+-----------+----------+-----------------------------------------------------------
clientipaddress | inet | | not null | '0.0.0.0'::inet
callingstationid | character varying(50) | | not null | ''::character varying
username | character varying(64) | | not null | ''::character varying
cui | character varying(128) | | not null | ''::character varying
creationdate | timestamp with time zone | | not null | '2023-01-12 12:06:02.704965+01'::timestamp with time zone
lastaccounting | timestamp with time zone | | not null | '-infinity'::timestamp without time zone
Indexes:
"cui_pkey" PRIMARY KEY, btree (username, clientipaddress, callingstationid)
Pošto smo u prethodnim koracima odbacili postojeće pravilo da bismo izmenili veličinu polja, potrebno je vratiti to pravilo:
-
Napomena: Ukoliko instalirate neku drugu verziju PostgreSQL baze može ovo pravilo biti za nijansu drugačije, zbog toga iskoristite pravilo koje je Vaša verzija baze imala.
-
Pravilo se vraća komandom:
CREATE RULE postauth_query AS ON INSERT TO cui
WHERE (EXISTS ( SELECT 1
FROM cui cui_1
WHERE cui_1.username::text = new.username::text AND cui_1.clientipaddress = new.clientipaddress AND cui_1.callingstationid::text = new.callingstationid::text)) DO INSTEAD UPDATE cui SET lastaccounting = '-infinity'::timestamp with time zone, cui = new.cui
WHERE cui.username::text = new.username::text AND cui.clientipaddress = new.clientipaddress AND cui.callingstationid::text = new.callingstationid::text;
Prikaz ponovnog uvođenja pravila:
radius=# CREATE RULE postauth_query AS ON INSERT TO cui
WHERE (EXISTS ( SELECT 1
FROM cui cui_1
WHERE cui_1.username::text = new.username::text AND cui_1.clientipaddress = new.clientipaddress AND cui_1.callingstationid::text = new.callingstationid::text)) DO INSTEAD UPDATE cui SET lastaccounting = '-infinity'::timestamp with time zone, cui = new.cui
WHERE cui.username::text = new.username::text AND cui.clientipaddress = new.clientipaddress AND cui.callingstationid::text = new.callingstationid::text;
CREATE RULE
radius=# \d cui
Table "public.cui"
Column | Type | Collation | Nullable | Default
------------------+--------------------------+-----------+----------+-----------------------------------------------------------
clientipaddress | inet | | not null | '0.0.0.0'::inet
callingstationid | character varying(50) | | not null | ''::character varying
username | character varying(64) | | not null | ''::character varying
cui | character varying(128) | | not null | ''::character varying
creationdate | timestamp with time zone | | not null | '2023-01-12 12:06:02.704965+01'::timestamp with time zone
lastaccounting | timestamp with time zone | | not null | '-infinity'::timestamp without time zone
Indexes:
"cui_pkey" PRIMARY KEY, btree (username, clientipaddress, callingstationid)
Rules:
postauth_query AS
ON INSERT TO cui
WHERE (EXISTS ( SELECT 1
FROM cui cui_1
WHERE cui_1.username::text = new.username::text AND cui_1.clientipaddress = new.clientipaddress AND cui_1.callingstationid::text = new.callingstationid::text)) DO INSTEAD UPDATE cui SET lastaccounting = '-infinity'::timestamp with time zone, cui = new.cui
WHERE cui.username::text = new.username::text AND cui.clientipaddress = new.clientipaddress AND cui.callingstationid::text = new.callingstationid::text
Pregled logova¶
Pregled upisanih logova u PostgreSQL bazu podataka¶
Sledeći koraci odnose se na povezivanje sa PostgreSQL bazom i otvaranje radius baze u okviru nje:
[root@postgresql ~]# cd /var/lib/pgsql/
[root@postgresql pgsql]# su postgres
bash-4.2$ psql
psql (14.6)
Type "help" for help.
postgres=# \c radius
You are now connected to database "radius" as user "postgres".
Pregled radacct tabele:
Pregled cui tabele :