Смоленск 1.6 PostgreSQL - пользователь без метки.

kraynopp

New member
Сообщения
12
#1
В руководстве сказано:
При обращении пользователя к БД определяются его допустимый диапазон меток и набор специальных мандатных атрибутов. Если пользователю не присвоена метка, то он получает по умолчанию нулевую метку, соответствующую минимальному уровню доступа.
И ещё:
1) после прохождения пользователем стандартной процедуры аутентификации сервер считывает из ОС значения максимальной и минимальной меток пользователя и принимает их как максимальную и минимальную метки сессии. При этом, если запись о метках для пользователя не найдена, то максимальная и минимальная метки принимаются равными нулю. Следовательно, пользователи, зарегистрированные 72 РУСБ.10015-01 97 01-1 только в сервере СУБД PostgreSQL и не имеющие учетной записи в ОС сервера, всегда имеют минимальный уровень доступа к информации;
И ещё:
В случае, если пользователь СУБД не зарегистрирован в ОС на стороне сервера СУБД, все его мандатные атрибуты имеют нулевое значение.
По факту же создаётся пользователь в БД:
Код:
create user test with password 'test';
При попытке подключения получаю:
Код:
psql test -h localhost
Пароль пользователя test:
psql: СБОЙ: error obtaining MAC configuration for user "test"
В логах постгреса пишет:
Код:
 error obtaining MAC configuration for user "test", error 2 - Нет такого файла или каталога
Эти манипуляции не помогли:
Код:
usermod -a -G shadow postgres
setfacl -d -m u:postgres:r /etc/parsec/macdb
setfacl -R -m u:postgres:r /etc/parsec/macdb
setfacl -m u:postgres:rx /etc/parsec/macdb
setfacl -d -m u:postgres:r /etc/parsec/capdb
setfacl -R -m u:postgres:r /etc/parsec/capdb
setfacl -m u:postgres:rx /etc/parsec/capdb
Что я делаю не так? Цель - подключиться пользователем СУБД, не зарегистрированным в ОС, получив при этом минимальную метку '{0,0}', как и сказано в документации. Вариант с отключением мандатного доступа (как для apache AstraMode off) для СУБД целиком тоже подойдёт, но я не нашёл, как это сделать.
 

kraynopp

New member
Сообщения
12
#2
Ради эксперимента создал пользователя test в ОС, через pdpl-user выдал ему метку 0. В PostgreSQL ничего не поменялось, ошибка осталась.
UPD
Если добавить пользователя в ОС и вызвать pdpl-user -z test, то соединение проходит успешно. Но это не объясняет, почему отвергается соединение, если пользователь ОС отсутствует...
 
Последнее редактирование:

kraynopp

New member
Сообщения
12
#3
Проблему удалось решить. Файл /etc/parsec/mswitch.conf, параметр zero_if_notfound установить в yes.

Предложение к разработчикам: не могли бы вы добавить этот момент в официальную документацию (Ruk_KSZ_1.pdf). Ну или хотя бы в вики (https://wiki.astralinux.ru/display/doc/PostgreSQL). Эта информация может кому-нибудь ещё пригодиться.