Monday, 5 May 2008

Setup phpPgAdmin in CentOS

在上一篇里提到,安装了PostgreSQL YUM Repository提供的phpPgAdmin,结果却一直login fail。经过进一步的查证,这个问题终于得到解决。

在正确地安装了PostgreSQL之后,借由第三方客户端软件,能够从外部通过TCP/IP来访问PostgreSQL数据库。说明PostgreSQL和CentOS本身的安装、运行都是没有问题的。phpPgAdmin的主页面,也是可以访问的,HTTPD也没有问题。只有在企图login的时候,出现fail信息。那问题就应该出在httpd连接database上面。

1. SELinux

CentOS的运行,启动了SELinux。在SELinux的选项中,有一项为:httpd_can_network_connect_db。缺省状态为off。或许与此有关?通过查看/var/log/messages的纪录,证明了这个猜测。

setroubleshoot: SELinux is preventing the http daemon from connecting to
a database. ...

详细的内容和解释,通过sealert命令查看。

由此知道,需要打开SELinux的httpd_can_network_connect_db这一项,才能让httpd连接到数据

setsebool -P httpd_can_network_connect_db=1

2. PostgreSQL Client Authentication

在解决了SELinux的问题之后,login到phpPgAdmin依然失败。涉及到login的可能部分,就只有PostgreSQL的客户身份验证这一块了。有关的设置,在/var/lib/pgsql/data/pg_hba.conf中。

原有设置是:

host    all         all         127.0.0.1/32          ident sameuser
host all all 192.168.1.0/24 md5

phpPgAdmin连接数据库,是本机连接。问题是出在验证方式上。PostgreSQL中实际的用户设置、密码等,和CentOS系统本身的并不一致,不能用ident sameuser来进行身份验证。因此,修改为:

host    all         all         127.0.0.1/32          md5

pg_hba.conf的修改,需要重新启动PostgreSQL Service,才能生效。

3. phpPgAdmin配置

phpPgAdmin本身的配置文件,为/etc/phpPgAdmin/config.ini.php,需指定phpPgAdmin连接的数据库所在的host,本机为localhost。

$conf['servers'][0]['host'] = '127.0.0.1';

phpPgAdmin和httpd连接的配置文件,为/etc/httpd/conf.d/phpPgAdmin.conf。缺省情况下,屏蔽了除本机之外其它地址。增加对局域网用户的访问许可。

Allow from 192.168.1.0/24

至此,phpPgAdmin能够正常地login了。

0 Comments:

Post a Comment

<< Home