"root" выполнение PostgreSQL-сервера не разрешено

Когда я пытаюсь запустить postgresql, я получаю сообщение об ошибке:

postgres

postgres не знает, где найти файл конфигурации сервера.
Вы должны указать опцию -config файл или -D или задать переменную среды PGDATA.

Итак, я пытаюсь установить свой файл конфигурации:

postgres -D /usr/local/var/postgres

И я получаю следующую ошибку:

postgres не может получить доступ к файлу конфигурации сервера "/usr/local/var/postgres/postgresql.conf": разрешение отклонено

Хм, хорошо. Затем я пытаюсь выполнить то же действие, что и администратор:

 sudo postgres -D /usr/local/var/postgres

И я получаю следующую ошибку:

"Корневое" выполнение PostgreSQL-сервера запрещено.
Для предотвращения возможного компрометации безопасности системы сервер должен запускаться под непривилегированным идентификатором пользователя. Дополнительную информацию о том, как правильно запустить сервер, см. В документации.

Я искал это сообщение об ошибке, но не могу найти решение.
Может ли кто-нибудь объяснить это?

Ответ 1

Ваша команда не делает то, что вы думаете. Чтобы запустить что-то как системный пользователь postgres:

 sudo -u postgres command

Для запуска команды (также называемой postgres !):

sudo -u postgres postgres -D /usr/local/var/postgres

Ваша команда делает обратное:

sudo postgres -D /usr/local/var/postgres

Он запускает программу postgres как root суперпользователя (sudo без переключателя -u), и Postgres не позволяет запускаться с привилегиями суперпользователя по соображениям безопасности. Отсюда сообщение об ошибке.

Если вы собираетесь запустить несколько команд в качестве системных пользователей postgres, измените пользователя с помощью:

sudo -u postgres -i

... и exit когда закончите.

Если вы видите это сообщение об ошибке при работе в качестве системных пользователей postgres, то что-то не так с разрешениями на файл или один из содержащихся каталогов.

postgres не может получить доступ к файлу конфигурации сервера "/usr/local/var/postgres/postgresql.conf": разрешение отклонено /usr/local/var/postgres/postgresql.conf

В заключение:

Ответ 2

Для тех, кто пытается запустить пользовательскую команду с использованием официального изображения докеров, используйте следующую команду. docker-entrypoint.sh обрабатывает пользователя и обрабатывает другие разрешения.

docker-entrypoint.sh -c 'shared_buffers=256MB' -c 'max_connections=200'