[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Проблема безопасности при аутенфикации через PAM в PostgreSQL



Не знаю, может я неправильно понимаю идею, но:

Если держать пользователей в SQL DB то нежелательно их
аутентифицировать через NSS, так как это предполагает открытие доступа
в таблицу с пользователями, включая их пароли для хоста. То есть,
в настройках будет это:

# grep getpwuid /etc/nss-pgsql.conf 
getpwuid        = SELECT username, passwd, gecos, homedir, shell, uid,
gid FROM passwd_table WHERE uid = $1

В случае если на одном хосте, который берёт пользователей из базы,
случится взлом с получением рутовых прав ничто не сможет помешать
список пользователей и их парольных хэшей для всех обслуживаемых
базой хостов. Значит, аутенфикация пользователей по NSS отменяется.

Но и PAM (по крайней мере, модуль pam_pgsql 0.6) требует настройки,
содержащей команду, возвращающую пароль (или его хэш):

# auth_query          - authentication query
#                       (should return one column - password)
auth_query = select user_password from account where user_name = %u

То бишь, на взломанном хосте берём пароль к базе из настроек NSS, берём
из базы все имена пользователей, потом пробегаемся по этим именам
используя логин из настроек pam_pgsql и получаем хэши паролей. Заряжаем
в перебералку парлей и вуаля - получаем (некоторые, конечно) пароли
пользователей всей(!) системы, обслуживаемой данной SQL DB.

Как бы перенести проверку пароля с клиентского хоста в саму базу данных
или куда-нибудь ещё с потенциально уязывимых машин? В DB у меня уже
нужные функции для сличения паролей лежат, надо только придумать способ
их вызвать из PAM. (Я с PAM до конца ещё не разобрался, поэтому вопрос может быть дурацкий)

Attachment: signature.asc
Description: PGP signature


Reply to: