Решите проблему с разрешением, найденную при запуске pgbackrest в качестве задания cron - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть ошибка прав доступа на хосте Ubuntu из настройки задания cron для создания резервной копии базы данных с помощью pgbackrest.

ОШИБКА [041]:: невозможно открыть / var / lib / postgresql / 10 / main/ global / pg_control

Задание cron настроено для запуска под моей учетной записью администратора.Единственный вариант, который я вижу, чтобы исправить это, - изменить разрешения каталога на / var / lib / postgresql / 10 / main, чтобы разрешить вход в мою учетную запись администратора, и я не хочу этого делать.

Только ясноПользователь postgres имеет доступ к этому каталогу, и я обнаружил, что с помощью этого пользователя невозможно настроить задание cron.т.е.

postgres@host110:~/$ crontab -e
You (postgres) are not allowed to use this program (crontab)
See crontab(1) for more information

Что еще я могу сделать?Больше информации об этом нет в руководстве по pgbackrest.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Только пользователь ОС PostgreSQL (postgres) и его группа могут получить доступ к каталогу данных PostgreSQL.См. Этот код из источника :

    /*
     * Check if the directory has correct permissions.  If not, reject.
     *
     * Only two possible modes are allowed, 0700 and 0750.  The latter mode
     * indicates that group read/execute should be allowed on all newly
     * created files and directories.
     *
     * XXX temporarily suppress check when on Windows, because there may not
     * be proper support for Unix-y file permissions.  Need to think of a
     * reasonable check to apply on Windows.
     */
#if !defined(WIN32) && !defined(__CYGWIN__)
    if (stat_buf.st_mode & PG_MODE_MASK_GROUP)
        ereport(FATAL,
                (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
                 errmsg("data directory \"%s\" has invalid permissions",
                        DataDir),
                 errdetail("Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).")));
#endif

Если каталог данных разрешает группу, группа обычно также имеет разрешения для pg_control.

.вы можете разрешить этому пользователю pgBackRest, если вы дадите ему postgres 'основную группу пользователей.

postgres разрешено создавать crontab, если система настроена соответствующим образом.

Сman crontab:

Запуск cron заданий может быть разрешен или запрещен для разных пользователей.Для этого используйте файлы cron.allow и cron.deny.Если файл cron.allow существует, в нем должен быть указан пользователь, которому разрешено использовать cron Если файл cron.allow не существует, но файл cron.deny существует, то пользователь не должен быть указан в списке.cron.deny файл для использования cron.Если ни один из этих файлов не существует, только суперпользователь может использовать cron.Другой способ ограничить доступ к cron - использовать PAM-аутентификацию в /etc/security/access.conf для настройки пользователей, которым разрешено или запрещено использовать crontab или изменять системные задания cron в каталоге /etc/cron.d/.

0 голосов
/ 24 сентября 2019

Если вы можете sudo -u postgres в приглашении, вы можете сделать это и в своей работе cron.

Ваш вопрос не показывает, какие именно команды вы пытаетесь запустить, ночтобы запустить thiscommand как postgres, просто

sudo -u postgres thiscommand

Если у вас есть su, но не sudo, адаптация незначительна, но не совсем тривиальна:

su -c thiscommand postgres

С sudo вы можете установить детальные ограничения на то, что именно вы можете делать как другой пользователь, так что в этом смысле это безопаснее, чем полный неограниченный su.

...