PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да конфигурирате SELinux за PostgreSQL и TimescaleDB

Данните са най-важният актив в една компания, така че трябва да вземете предвид всички съображения за сигурност във вашата база данни, за да я запазите възможно най-безопасно. Една важна функция за сигурност на базираните на RedHat операционни системи е SELinux. В този блог ще видим какво представлява тази функция и как да я конфигурираме за бази данни PostgreSQL и TimescaleDB.

Какво е SELinux?

Подобрената със сигурност Linux (SELinux) е архитектура за сигурност за Linux системи, която позволява на администраторите да имат повече контрол върху това кой може да има достъп до системата. Той определя контролите за достъп за приложенията, процесите и файловете в системата, използвайки политики за сигурност, които са набор от правила, които казват на SELinux какво може да бъде достъпно.

Когато приложение или процес, известен като субект, направи заявка за достъп до обект, като файл, SELinux проверява с векторен кеш за достъп (AVC), където разрешенията се кешират за субекти и обекти . Ако SELinux не може да вземе решение за достъп въз основа на кешираните разрешения, той изпраща заявката до сървъра за сигурност. Сървърът за сигурност проверява за контекста на сигурността на приложението или процеса и файла. Контекстът за сигурност се прилага от базата данни на политиката на SELinux и разрешението се предоставя или отказва.

Има различни начини да го конфигурирате. Можете да разгледате основния конфигурационен файл на SELinux в /etc/selinux/config, за да видите как е конфигуриран в момента.

$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

 

В този файл има две директиви. Директивата SELINUX определя режима SELinux и той може да има три възможни стойности:Enforcing, Permissive или Disabled.

  • Прилагане (по подразбиране):Ще активира и наложи политиката за сигурност на SELinux в системата, като отказва опитите за неоторизиран достъп от потребители и процеси.

  • Разрешително:Използвайки го, SELinux е активиран, но няма да наложи политиката за сигурност. Всички нарушения на правилата се записват в регистрационните файлове за одит. Това е добър начин да тествате SELinux, преди да го приложите.

  • Деактивирано:SELinux е изключен.

Директивата SELINUXTYPE определя правилата, които да се използват. Стойността по подразбиране е насочена и с тази политика SELinux ви позволява да персонализирате и прецизирате разрешенията за контрол на достъпа.

Дори когато режимът Enforcing е по подразбиране, деактивирането на SELinux се е превърнало в обичайна практика, тъй като е по-лесно, отколкото да се справите с него. Разбира се, това не се препоръчва и трябва да го конфигурирате поне в Разрешителен режим и периодично да проверявате регистрационните файлове за необичайно поведение.

Как да конфигурирам SELinux

Ако SELinux е деактивиран във вашата среда, можете да го активирате, като редактирате конфигурационния файл /etc/selinux/config и зададете SELINUX=permissive или SELINUX=enforcing.

Ако никога не сте използвали SELinux, най-добрият начин да го конфигурирате е като използвате първо Разрешителен режим, проверете регистрационните файлове, търсещи отказани съобщения в регистрационния файл на съобщенията, и го коригирайте, ако е необходимо:

$ grep "SELinux" /var/log/messages

След като всичко е прегледано и е безопасно да продължите, можете да конфигурирате SELinux за налагане, като използвате предишния метод или без рестартиране, като използвате следната команда:

$ setenforce 1

Ако трябва да връщате назад, стартирайте:

$ setenforce 0

Тази команда може да се използва за превключване между принудителен и разрешителен режим в движение, но тези промени не се запазват, ако рестартирате системата. Ще трябва да конфигурирате стойността в конфигурационния файл, за да я направите постоянна.

Можете да проверите текущото състояние на SELinux с помощта на командата getenforce:

$ getenforce
Enforcing

Или за по-подробна информация можете да използвате sestatus вместо това:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

Как да конфигурирам SELinux за PostgreSQL и TimescaleDB

Ако инсталирате PostgreSQL/TimescaleDB, използвайки конфигурацията по подразбиране и директорията с данни по подразбиране и SELinux също е конфигуриран по подразбиране, най-вероятно няма да имате проблем, но проблемът е, ако искате използвайте, например, конкретно място, където да съхранявате вашата база данни, така че нека да видим как да конфигурирате SELinux, за да работи. За този пример ще инсталираме PostgreSQL 13 на CentOS 8 и ще използваме /pgsql/data/ като директория с данни.

Първо, активирайте модула postgresql:

$ dnf module enable postgresql:13

Инсталирайте съответните пакети PostgreSQL 13:

$ dnf -y install postgresql-server postgresql-contrib postgresql-libs

Активиране на услугата:

$ systemctl enable postgresql.service

Инициализирайте вашата PostgreSQL база данни:

$ postgresql-setup --initdb

Сега, ако просто стартирате услугата, без да променяте нищо, като например директорията с данни, тя ще започне добре, в противен случай ще видите грешка като:

Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal postmaster[29116]: postmaster: could not access the server configuration file "/pgsql/data/postgresql.conf": Permission denied

Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Failed with result 'exit-code'.

И така, нека видим как да го поправим. Първо променете директорията си с данни в конфигурационния файл и услугата на PostgreSQL. За това редактирайте служебния файл PostgreSQL и променете местоположението на PGDATA:

$ vi /etc/systemd/system/multi-user.target.wants/postgresql.service
Environment=PGDATA=/pgsql/data

Редактирайте файла на PostgreSQL bash профил и променете местоположението на PGDATA:

$ vi /var/lib/pgsql/.bash_profile
PGDATA=/pgsql/data

Прочетете промените:

$ systemctl daemon-reload

Инициализирайте новата база данни PostgreSQL:

$ postgresql-setup --initdb
 * Initializing database in '/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Не е необходимо да посочвате новото местоположение на директорията с данни, както направихте по-рано в конфигурационните файлове. Сега, преди да го стартирате, трябва да промените етикета на SELinux:

$ chcon -Rt postgresql_db_t /pgsql/data

Тази команда ще промени контекста за сигурност на SELinux, а флаговете са:

  • -R, --recursive:Работете с файлове и директории рекурсивно

  • -t, --type=TYPE:Задайте тип TYPE в целевия контекст за защита

След това стартирайте услугата PostgreSQL:

$ systemctl start postgresql.service

И вашата база данни работи сега:

$ ps aux |grep postgres |head -1
postgres   28566  0.0  3.0 497152 25312 ?        Ss   21:16   0:00 /usr/bin/postmaster -D /pgsql/data

Това е само основен пример за това как да конфигурирате SELinux за PostgreSQL/TimescaleDB. Има различни начини да направите това с различни ограничения или инструменти. Най-добрата реализация или конфигурация на SELinux зависи от бизнес изискванията.

Как да използвам PostgreSQL и TimescaleDB с ClusterControl и SELinux

ClusterControl не управлява никакви модули за сигурност на ядрото на Linux като SELinux. Когато разгръщате PostgreSQL или TimescaleDB клъстер с помощта на ClusterControl, можете да посочите дали искате ClusterControl да деактивира SELinux вместо вас по време на процеса на внедряване, за да намали риска от грешки:

Ако не искате да го деактивирате, можете да използвате Permissive режим и наблюдавайте дневника във вашите сървъри, за да сте сигурни, че имате правилната конфигурация на SELinux. След това можете да го промените на Прилагане, като следвате инструкциите, споменати по-горе.

Можете да намерите повече информация за конфигурацията на SELinux на официалните сайтове на RedHat или CentOS.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ПРИСЪЕДИНЕТЕ (ИЗБЕРЕТЕ ... ) ue ON 1=1?

  2. psycopg2:вмъкване на няколко реда с една заявка

  3. Убийте сесия/връзка на postgresql

  4. PostgreSQL поддържа ли прозрачно компресиране на таблици (фрагменти)?

  5. Където условие за съединена маса в Sequelize ORM