pg_hba.conf — PostgreSQL üçün konfiqurasiya faylıdır, hansı ki, qoşulmalara və autentifikasiyaya nəzarət etmək üçündür. HBA açılışı Host-Based Authentication (host əsaslı autentifikasiya) deməkdir. Bu fayl şəbəkə "şlaqbaumu" kimi çıxış edir və müəyyən edir:
- Kimlərə serverə qoşulmağa icazə verilir (IP ünvanlar, rol, verilənlər bazası).
- Qoşulma üçün hansı autentifikasiya metodu tələb olunur.
Əgər bunu real həyatla müqayisə etsək, pg_hba.conf — binanın girişində duran mühafizəçi kimidir. O, kimləri içəri buraxmaq, kimləri yox, qərar verir, sənədlərini (parolunu) yoxlayır, həm də qeydiyyatını (IP ünvanını) da yoxlayır.
pg_hba.conf faylının strukturu
pg_hba.conf faylı sətirlərdən ibarətdir, hər sətir giriş qaydasını təsvir edir. Sətirin strukturu belədir:
<qoşulma tipi> <verilənlər bazası> <istifadəçi> <mənbə> <autentifikasiya metodu>
Komponentləri izah edək:
Qoşulma tipi (connection type): Müştərinin necə qoşulacağını müəyyən edir.
local: Unix-socketlər vasitəsilə qoşulma (Linux serverində lokal istifadəçilər üçün).host: TCP/IP vasitəsilə qoşulma.hostssl: TCP/IP ilə, amma yalnız SSL istifadə olunanda qoşulma.hostnossl: TCP/IP ilə, amma SSL olmadan qoşulma.
Verilənlər bazası: Hansı verilənlər bazalarına girişə icazə verildiyini göstərir. Konkret verilənlər bazasını, bir neçə bazanı vergüllə, ya da açar sözləri göstərə bilərsən:
all: Bütün verilənlər bazalarına girişə icazə ver.
İstifadəçi: Hansı istifadəçilərə qoşulmağa icazə verildiyini göstərir.
- Konkret istifadəçi adını göstərə bilərsən və ya
allyazıb hamıya icazə verə bilərsən.
Mənbə (address): Müştərinin IP ünvanını və ya ünvan aralığını göstərir.
- IPv4 üçün
x.x.x.xvə yax.x.x.x/y(burada/y— subnet maskası, məsələn,/24) formatı istifadə olunur. - IPv6 üçün
::/yformatı istifadə olunur. allaçar sözü bütün IP ünvanlarına icazə verir.
Autentifikasiya metodu: Hansı autentifikasiya üsulunun istifadə olunduğunu göstərir.
Nümunələr:
trust: Parolsuz qoşulmağa icazə ver (təhlükəsiz deyil, yalnız test üçün).md5: Parol istifadə et (hash-lanmış).scram-sha-256: SHA-256 ilə daha təhlükəsiz autentifikasiya.reject: Girişi qadağan et.
pg_hba.conf faylında sətir nümunələri
Faylın sazlanması çevik ola bilər. Bir neçə nümunə:
Unix-socket ilə lokal qoşulmalara icazə ver
local all all trustLokal serverdə bütün istifadəçilərə bütün verilənlər bazalarına parolsuz qoşulmağa icazə verilir.
Bir IP ünvanından qoşulmalara icazə ver
host my_database my_user 192.168.1.100/32 md5my_useristifadəçisi yalnız192.168.1.100IP ünvanındanmy_databasebazasına parolla qoşula bilər.Bütün subnetdən verilənlər bazasına girişə icazə ver
host my_database all 192.168.1.0/24 scram-sha-256192.168.1.0/24subnetindən istənilən istifadəçimy_databasebazasına yalnız SHA-256 autentifikasiyası ilə qoşula bilər.Müəyyən subnetdən qoşulmaları qadağan et
host all all 192.168.2.0/24 reject192.168.2.0/24subnetindən qoşulmalar tamamilə qadağandır.
IP ünvanlar üzrə girişin sazlanması
Artıq faylın strukturunu başa düşdük, indi isə qoşulmalara necə nəzarət etməyi baxaq.
Gəlin serverə yalnız müəyyən IP ünvanlardan girişə icazə verək. Tutaq ki, PostgreSQL serverimiz var və biz istəyirik ki, yalnız lokal hostdan (127.0.0.1) və ofis subnetindən (192.168.10.0/24) giriş olsun. Bunun üçün pg_hba.conf faylına belə sətirlər əlavə edirik:
# Lokal giriş
host all all 127.0.0.1/32 trust
# Ofisdən giriş
host all all 192.168.10.0/24 md5
# Qalan hər şeyi qadağan et
host all all 0.0.0.0/0 reject
Burada 0.0.0.0/0 qaydası "bütün IP ünvanları" deməkdir. Biz açıq şəkildə göstəririk ki, yalnız yuxarıda göstərilən ünvanlardan başqa heç bir yerdən giriş olmasın.
Uzaq istifadəçilər üçün girişin sazlanması
Əgər PostgreSQL serverin buludda və ya uzaq serverdə işləyirsə, bəzən yalnız müəyyən xarici IP-lərə girişə icazə vermək lazım olur. Məsələn:
# Evdən admin üçün giriş
host all admin_user 203.0.113.10/32 md5
Bu nümunədə yalnız admin_user istifadəçisi 203.0.113.10 IP ünvanından qoşula bilər.
Konfiqurasiyanın yenilənməsi
pg_hba.conf faylında dəyişiklik etdikdən sonra PostgreSQL onları tətbiq etməlidir. Bunun üçün bu əmri istifadə et:
sudo systemctl reload postgresql
Yeniləmə təhlükəsizdir və serverin dayanmasına səbəb olmayacaq.
Əgər birdən pg_hba.conf harada yerləşdiyini unutdunsa, SQL ilə yolunu öyrənə bilərsən:
SHOW hba_file;
pg_hba.conf ilə işləyərkən tipik səhvlər
pg_hba.conf ilə işləmək asandır, amma yeni başlayan adminlər bəzən səhvlər edirlər. Məsələn:
- Serveri yeniləməyi unutmaq.
pg_hba.conf-da bütün dəyişikliklər yalnız konfiqurasiya yeniləndikdən sonra qüvvəyə minir. - Qaydalarda konflikt. PostgreSQL qaydaları yuxarıdan aşağıya oxuyur. İlk uyğun qayda işləyir, qalanları nəzərə alınmır. Daha ümumi qaydalar aşağıda olmalıdır.
- Subnet maskasını səhv yazmaq. Məsələn,
/0yazsan, hamıya giriş açıq olur, bu isə ciddi zəiflikdir.
Real istifadə ssenariləri nümunələri
Lokal serverdə tətbiqin test edilməsi.
Yalnız lokal hostdan girişə icazə ver:
local all all trust
Uzaq müştərilərlə işləmək.
Müəyyən IP-dən müştəriyə girişə icazə ver:
host all client_user 203.0.113.42/32 scram-sha-256
Publik şəbəkədə girişin məhdudlaşdırılması.
İnternetdən qoşulmaları qadağan et (amma ofisə icazə ver):
host all all 0.0.0.0/0 reject
host all all 192.168.10.0/24 md5
Bu mərhələdə artıq pg_hba.conf ilə PostgreSQL-ə girişin necə məhdudlaşdırılacağını başa düşməlisən. Bu fayl — verilənlər bazasının təhlükəsizliyi üçün əsas alətlərdən biridir. Ayarların məntiqli, yoxlanılmış və biznes ehtiyaclarına uyğun olduğuna əmin ol. Axı, biz hamımız istəyirik ki, məlumatlarımız hakerlərdən qorunsun, düzdür? Əlbəttə, əgər haker özünsə, başqa məsələ :)
GO TO FULL VERSION