Назад | Перейти на главную страницу

Как SELinux влияет на каталог / home?

Я переношу систему CentOS 5.3 с MySQL на PostgreSQL. Наша машина настроена так, что самый большой раздел диска монтируется в /home. Это вне моего контроля и управляется провайдером хостинга. В любом случае, мы, очевидно, хотим, чтобы файлы базы данных были на /home по этой причине.

С MySQL мы сделали следующее:

и все было хорошо.

Однако с PostgreSQL я сделал следующее:

На данный момент я все еще не могу запустить 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, на самом деле, похоже, подразумевает это).