web-dev-qa-db-ja.com

RHEL SELinuxがPostgreSQLへのApacheアクセスをブロックする

PostgreSQLを使用するDjangoアプリを実行しています。サーバーはSELinuxでRHEL6.5を実行しています。Djangoアプリができるという問題があります。 DBに接続しますが、これはSELinuxがDBをブロックしているためだと思います。Djangoで表示されるエラーは次のとおりです。

could not connect to server: Permission denied Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

どうすればこれを修正できますか? この投稿 に遭遇しましたが、解決策の適用方法がわかりません(chcon -t postgresql_exec_t /path/to/pgbouncer)私の問題に。

ありがとう!

[編集]
これが/var/log/audit/audit.logサイトにアクセスしようとすると次のようになります:

type=AVC msg=audit(1396289984.549:9245): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.549:9245): Arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625273aa0 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1396289984.756:9246): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.756:9246): Arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe624d87890 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1396289984.757:9247): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.757:9247): Arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625342c20 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1396289984.758:9248): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.758:9248): Arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625603ac0 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

[編集2]

これが私が有効にしたいくつかの関連するSELinuxオプションです。

-bash-4.1$ Sudo getsebool -a | grep httpd_can_network_connect_db httpd_can_network_connect_db --> on -bash-4.1$ Sudo getsebool -a | grep allow_user_postgresql_connect allow_user_postgresql_connect --> on

4
Geoff

さて、ここのシステム管理者の助けを借りて、問題は修正されました。結局のところ、/usr/pgsql-9.3/binのバイナリに割り当てられたSELinuxコンテキストは間違っていました。これを修正するために必要なのはchcon -t postgresql_exec_t /usr/pgsql-9.3/binだけでした。シンボリックリンクのコンテキストを変更するには、-hを追加するだけです。

1
Geoff

将来の読者にとって、私にとっては、httpdがDB接続を確立できるようにboolを設定するだけで十分でした。例:

setsebool -P httpd_can_network_connect_db 1

設定が次の方法で設定されていることを確認/確認できます。

getsebool httpd_can_network_connect_db

'... => on'を返す必要があります

その後、-f /var/log/audit/audit.logを調整して操作を再試行すると、機能するはずです。

6
JJC