Аутентификация и шифрование
Запись в листинге 8.9 разрешает доступ к базам данных без пароля из небольшой подсети. Подсеть состоит из всех IP-адресов в интервале от 192.168.1.1 до 192.168.1.15. Как упоминалось ранее, за информацией о сетевых масках следует обращаться на сайт Linux Networking HOWTO (http://www.thelinuxreview.com/howto/networking) или к администратору сети.
Листинг 8.9. Доверенная подсеть.
host all 192.168.1.0 255.255.255.240 trust
Запись, приведенная в листинге 8.10, разрешает доступ с любого хоста из блока 192.168.1 к базе данных booktown без указания пароля.
Листинг 8.10. Доверенная подсеть.
host booktown 192.168.1.0 255.255.255.0 trust
Вспомните, о чем говорилось выше: при проверке очередного подключения записи файла pg_hba.conf последовательно читаются от начала к концу, и режим аутентификации определяется первой найденной записью. Если в файле не обнаруживается ни одного совпадения, подключение полностью запрещается.
Файл pgjdent.conf
Если в хостовой записи указан метод аутентификации ident, PostgreSQL использует файл pgjdent.conf для отображения идентификационного имени пользователя на имя пользователя PostgreSQL. "Идентификационное имя пользователя" предоставляется службой identd (RFC 1413) и определяет имя системной учетной записи, инициировавшей подключение. В целом этот метод аутентификации аналогичен методу trust, но с ограничением доступа по идентификационному имени пользователя.
Как сказано в спецификации протокола ident, "Идентификационный протокол не предназначен для аутентификации или управления доступом". Он всего лишь является удобным средством идентификации в сетях, состоящих из защищенных, хорошо контролируемых компьютеров, и не обеспечивает надежной защиты при внешнем доступе. Дело в том, что демон identd всего лишь возвращает имя, описывающее текущего пользователя системы. Например, предоставление пользователю jworsley доступа из подсети IP-адресов создает серьезную угрозу для безопасности системы, поскольку любой пользователь компьютера, входящего в эту подсеть, сможет создать учетную запись jworslеу и успешно пройти "аутентификацию".
Файл pgjdent.conf должен находиться в одном каталоге с файлом pg_hba.conf. Путь к этому каталогу определяется переменной среды PGDATA (например, /usr/local/ pgsql/data). Как и в случае с pg_hba.conf, внесение изменений в pgjdent.conf не требует перезапуска PostgreSQL.
Содержимое файла pgjdent.conf связывает идентификационные имена с именами пользователей PostgreSQL при помощи особых определений, называемых картами идентификации. Карты идентификации обычно применяются в системах, в которых системные имена пользователей не совпадают с именами пользователей PostgreSQL. Основные правила определения и использования карт идентификации перечислены ниже.
- Каждая запись файла определяется в отдельной строке и связывает имя карты, идентификационное имя пользователя и имя пользователя PostgreSQL.
- Файл pgjdent.conf может содержать несколько карт. Каждая группа строк, в которых указано общее имя карты, рассматривается как одна карта.
- Типы подключений, относящихся к пользователям данной карты, определяются содержимым файла pg_hba.conf.
Отдельная запись файла pgjdent.conf состоит из трех полей: имени карты, идентификационного имени пользователя и преобразованного имени пользователя PostgreSQL:
HMfljopibi идентификационное_имя KKfl_PostgreSQL
Поля разделяются пробелами или символами табуляции.
- имя_карты. Имя, используемое для ссылок на карту идентификации в файле pgjiba.conf.
- идентификационное_имя. Идентификационное имя обычно совпадает с именем пользователя системы, подключающегося к базе данных. Предоставляется демоном identd, работающим в системе, пытающейся установить связь с сервером.
- uмя_PostgreSQL. Имя пользователя PostgreSQL, соответствующее заданному идентификационному имени. Файл может содержать несколько строк с одинаковыми идентификационными именами, но разными именами PostgreSQL. Это позволяет сопоставить одной учетной записи системного пользователя несколько учетных записей пользователей PostgreSQL, относящихся к разным базам данных.