如何解决PostgreSQL服务无法启动的问题?

如何解决PostgreSQL服务无法启动的问题?

这是关于 Metasploit 框架的。

root@kali:~# service postgresql start
[....] Starting PostgreSQL 9.1 database server: main[....] The
PostgreSQL server failed to start. Please check the log output: 
2015-05-23 19:07:58 EDT LOG: database system was interrupted; 
last known up at 2015-05-23 16:52:00 EDT 2015-05-23 19:07:58 
EDT FATAL: could not open file "/etc/ssl/certs/ssl-cert-snakeoil.pem":   
Permission denied 2015-05-23 19:07:58 EDT LOG: startup process 
(PID 3466) exited with exit code 1 2015-05-23 19:07:58 EDT LOG: 
aborting startup due to startup [FAILss failure ... failed! failed!

我的第一个问题是,PostgreSQL 工作得很好。是什么事情突然引发了这个问题?

其次,如何解决这个问题?

答案1

这很可能是以下结果Postgres fsync 权限错误

引用的 Wiki 页面指出,该问题将在 2015-06-04 更新版本中得到修复,并且它影响了以下用户:

  1. 应用了 9.4.2、9.3.7、9.2.11、9.1.16 和/或 9.0.20 PostgreSQL 更新
  2. 数据目录 ( ) 下有一个或多个文件或目录,或者指向一个或多个文件或目录的符号链接,这些文件或目录不属于用户postgres(或其他安装所有者)或不可写入。postgresPGDATA

它接着说,条件 2 对于启用 SSL 的 Debian 和 Ubuntu 安装的 PostgreSQL 9.1、9.0 及更早版本来说很常见,但也可能会影响其他用户。其他平台上的大多数用户不受影响,因为默认情况下,其下的所有文件和链接PGDATA均归该postgres用户所有。

答案2

在你引用的文字中,原因是:

致命:无法打开文件“/etc/ssl/certs/ssl-cert-snakeoil.pem”:
权限被拒绝

如果你真的想使用蛇油证书,你需要确保 PostgreSQL 可以读取它。但最好生成您自己的证书并使用它。 (这些证书被称为蛇油.)

答案3

解决方案是使用acl,并允许postgres用户(称为postgres,或psql,检查你的密码文件)读取

/etc/ssl/certs/ssl-cert-snakeoil.pem

如果用户名为 psql 执行此操作

setfacl -m u:psql:r--     /etc/ssl/certs/ssl-cert-snakeoil.pem

当然检查 acl 是否处于活动状态

mount |grep -w / |grep acl

如果不编辑 fstab(之前复制)和默认值之后,则放置 acl

然后mount -o remount /使用 setfacl 设置 actl

相关内容