Иллюстрированный самоучитель по PostgreSQL

Аутентификация и шифрование

Исполняемый файл SSH обычно называется ssh, а туннель создается командой следующего вида:

ssh – L лок_порт:уддл_хост:удал_порт пользователь@удал_хост

Параметр лок_порт содержит произвольный номер порта, по которому организуется локальное прослушивание. Номер порта должен быть больше 1024 (если команда не выполняется с правами root, чего делать не рекомендуется). Заданное число определяет тот номер порта, по которому, как полагает ваш клиент, он подключен к PostgreSQL. В действительности данные, передаваемые через этот порт, попадают на порт прослушивания SSH (обычно порт 22) удаленного хоста, расшифровываются и затем передаются на заданный порт удаленного хоста.

Секция пользователь@удал_хост необходима для аутентификации системных пользователей. Без действительной учетной записи на удаленном хосте создать туннель SSH не удастся. Весь процесс создания туннеля продемонстрирован в листинге 8.14, в котором два терминальных сеанса разделены многоточием. Первое терминальное подключение создает туннель SSH и остается активным, чтобы туннель продолжал существование. Второе терминальное подключение использует туннель для установки связи с локальным портом и последующей пересылки данных на удаленный хост, их расшифровки и передачи серверу PostgreSQL.

Листинг 8.14. Создание туннеля SSH на сервере PostgreSQL.

[user@local ~]$ ssh – L 4001:remotehost:5432 userPremotehost
user@remotehost's password: [user@remote – ]$
[user@local – ]$ psql – h localhost – p 4001 tempiatel
Welcome to psql, the PostgreSQL Interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
tempiatel=#

Примечание
Если после создания туннеля SSH вам не нужно переходить в режим командной строки, как это происходит по умолчанию, включите в команду ssh ключ – Т. В этом случае после аутентификации терминал перестает реагировать на действия пользователя. После завершения сеанс прерывается комбинацией клавиш CTRL + C
.

Единственный недостаток механизма туннелей SSH заключается в том, что он требует наличия системной учетной записи для пользователя, подключающегося к PostgreSQL. SSH не предоставляет абсолютно прозрачного доступа к шифрованным потокам данных до тех пор, пока пользователь не инициирует соединение и не пройдет аутентификацию у демона ssh, обычно называемого sshd. В зависимости от ситуации это ограничение может приносить как пользу, так и вред.

Тем, кто захочет создать туннель шифрования данных еще более общего характера, стоит рассмотреть возможность использования пакета Stunnel.

Настройка и использование пакета Stunnel

Хотя встроенная поддержка SSL и OpenSSH обеспечивают надежный, хорошо защищенный обмен данными с PostgreSQL, у этих инструментов имеются свои особенности и недостатки. Многие пользователи PostgreSQL интересуются, существует ли другой способ шифрования с полностью прозрачным удаленным доступом к серверу. Если вы хотите обеспечить прозрачное шифрование сеанса для любого клиента, без обязательной привязки к SSH, в вашем распоряжении два общедоступных средства: OpenSSL и Stunnel.

Системные администраторы Unix и Linux обычно знакомы с одним или обоими пакетами, поскольку они часто используются в других областях (в конце концов, шифрование применяется не только в контексте PostgreSQL). А если вы еще не сталкивались с шифрованием обмена данными, с этой проблемой стоит познакомиться поближе.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.