Создание Docker PostgreSql безопасного - ненадежное локальное соединение, максимальная длина имени пользователя и пароля - PullRequest
0 голосов
/ 16 июня 2020

Контекст

Итак, в настоящее время я создаю сценарий установки / запуска, который устанавливает безопасный docker контейнер с PostgreSql базой данных на клиентском компьютере.

Чтобы сделать его действительно безопасным , мой план состоит в том, чтобы сценарий:

  1. Автоматически создавал случайное имя пользователя и пароль
  2. Выполнял docker run (конечно, с -d postgres) и со случайно сгенерированным именем пользователя и паролем
  3. Автоматически создать еще один набор случайных имени пользователя и пароля
  4. Создать нового пользователя с новым именем пользователя и паролем
  5. Grant вновь созданный пользователь с соответствующими разрешениями
  6. Вернуть учетные данные (имя пользователя и пароль) вновь созданного пользователя и не хранить (другими словами забыть) учетные данные суперпользователя (имя пользователя и пароль)

Вопросы

  1. Какие ограничения на имя пользователя и пароль Postgresql? Из этого источника кажется, что максимальная длина имени пользователя составляет 64 байта (то есть 64 символа), а из этого источника кажется, что максимальная длина пароля составляет 100 байтов (то есть 100 символов). Насколько точна информация (источники довольно старые, возможно, я неправильно ее понял)? Кроме того, разрешены только буквенно-цифровые символы? Поддерживает ли он Base64, MD5 или SHA?

  2. Я заметил, что могу получить доступ к Postgres bash без ввода пароля суперпользователя. При дальнейшем исследовании выяснилось, что это связано с тем, что при создании базы данных Postgres локальный доступ считается доверенным, поскольку он автоматически настраивается в pg_hba.conf. Что такое команда , чтобы не доверять всем соединениям, включая локальное, и для любого действия суперпользователя должен быть предоставлен пароль суперпользователя?

  3. Любые предложения по повышению безопасности и более того, это не предполагает самостоятельного размещения базы данных вместо того, чтобы клиент размещал ее на своем компьютере? (Я понимаю, что это широкий / не относящийся к категории c вопрос, поэтому не стесняйтесь игнорировать этот вопрос)

1 Ответ

0 голосов
/ 16 июня 2020
  1. длина имени пользователя и пароля:

    имена пользователей ограничены 63 байтами, как и все другие идентификаторы (если вы не хотите перестраивать PostgreSQL).

    src/include/pg_config_manual.h имеет:

    /*
     * Maximum length for identifiers (e.g. table names, column names,
     * function names).  Names actually are limited to one less byte than this,
     * because the length must include a trailing zero byte.
     *
     * Changing this requires an initdb.
     */
    #define NAMEDATALEN 64
    

    Максимальная длина пароля зависит от метода шифрования пароля и используемой аутентификации. Для scram-sha-256 ограничение составляет 1024.

    См. src/common/saslprep.c:

    /*
     * Limit on how large password's we will try to process.  A password
     * larger than this will be treated the same as out-of-memory.
     */
    #define MAX_PASSWORD_LENGTH     1024
    

    Лимит 100, который вы указываете, взят из подсказки пароля psql, но никто не заставляет вы можете использовать это.

  2. метод аутентификации по умолчанию

    Используйте параметр -A во время initdb, чтобы указать другой метод аутентификации.

  3. делает docker контейнер безопасным

    Да, это слишком много. По сути, если у вас есть файлы, составляющие базу данных, вы можете получить все данные, поэтому я думаю, что это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...