Я переношу систему CentOS 5.3 с MySQL на PostgreSQL. Наша машина настроена так, что самый большой раздел диска монтируется в /home
. Это вне моего контроля и управляется провайдером хостинга. В любом случае, мы, очевидно, хотим, чтобы файлы базы данных были на /home
по этой причине.
С MySQL мы сделали следующее:
my.cnf
и изменил datadir
установка на /home/mysql
/home/mysql(/.*)?
к mysqld_db_t
restorecon -R /home/mysql
присвоить ярлыкии все было хорошо.
Однако с PostgreSQL я сделал следующее:
/etc/init.d/postgresql
и изменил PGDATA
и PGLOG
переменные для /home/pgsql/data
и /home/pgsql/pgstartup.log
соответственно/home/pgsql/pgstartup.log
к postgresql_log_t
/home/pgsql/data(/.*)?
к postgresql_db_t
restorecon -R /home/pgsql
присвоить ярлыкиНа данный момент я все еще не могу запустить PostgreSQL. pgstartup.log говорит:
# cat pgstartup.log
postmaster cannot access the server configuration file "/home/pgsql/data/postgresql.conf": Permission denied
Странно то, что я не вижу сообщений по этому поводу в /var/log/messages
или /var/log/secure
, но если я выключу SElinux, то все заработает.
Я убедился, что все права доступа верны (600 для файлов и 700 для каталогов), а также права собственности (postgres: postgres).
Может ли кто-нибудь сказать мне, что я делаю не так?
Я использую репозиторий Yum из commandprompt.com, версия 8.3.7.
РЕДАКТИРОВАТЬ: Причина, по которой в моем вопросе конкретно упоминается /home
каталог заключается в том, что если я прохожу все эти шаги для любого другого каталога, например /var/lib/pgsql2
или /usr/local/pgsql
, то он работает должным образом.
Эта ветка выглядит актуальной - http://archives.postgresql.org/pgsql-admin/2007-11/msg00228.php.
Сначала проверьте метку на файле conf. Ковыряясь в системе Centos5.3, я вижу
semanage fcontext -l | grep "postgresql_etc_t"
/etc/postgresql(/.*)? all files system_u:object_r:postgresql_etc_t:s0
и политика говорит
sesearch -A -s postgresql_t -t postgresql_etc_t
Found 3 av rules:
allow postgresql_t postgresql_etc_t : file { ioctl read getattr lock };
allow postgresql_t postgresql_etc_t : dir { ioctl read getattr lock search };
allow postgresql_t postgresql_etc_t : lnk_file { read getattr };
попытаться сделать
ls -Z /home/pgsql/data/postgresql.conf
Если этикетка неправильная, ее можно изменить разными способами. Быстрый гугл дал мне http://docs.fedoraproject.org/selinux-user-guide/f10/en-US/sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext.html
semanage - односторонний. Если вы хотите попробовать сделать быстрый тест, попробуйте
chcon -t postgresql_etc_t /home/pgsql/data/postgresql.conf
Также убедитесь, что демон postgresql работает в правильном домене (то есть в контексте SELinux). Вы можете быстро обнаружить, что это не так, следя за журналами, см. Ниже. см. run_init для получения подробной информации о том, как запустить сценарий инициализации, чтобы он находился в правильном домене. posgresql может быть запущен как unlimited_t (в этом случае проблем быть не должно, неограниченный должен делать много).
В SELinux могут быть другие проблемы для дальнейшего анализа, попробуйте отслеживать журнал аудита. (обратите внимание, что журнал аудита не записывается до тех пор, пока не будет запущен auditd, меня это уже укусило. В этом случае проверьте / var / log / messages на наличие сообщений журнала pre auditd)
Попробуйте и посмотрите, на что может жаловаться SELinux
tail -f /var/log/audit/audit.log
или искать просто отрицания
tail -f /var/log/audit/audit.log | grep denied
Затем попробуйте тот же доступ, т.е. запустите демон.
ты проверил свой # СЕСТАТУС
[root @ yeswedeal ~] # статус SELinux: отключен
Даже если вы правильно пометили каталоги, вполне возможно, что политика selinux запрещает postgresql доступ /home
сам (ссылка, упомянутая в ответе @Milen, на самом деле, похоже, подразумевает это).