PostgreSQL无法启动:"server.key"具有组或世界访问权限。

32

每当我使用命令启动PostgreSQL时:

$ sudo /etc/init.d/postgresql start

Pg无法启动。报告的错误为:

 * Starting PostgreSQL 8.4 database server
 * The PostgreSQL server failed to start. Please check the log output:
2010-01-21 22:10:00 PST FATAL: private key file "server.key" has group or world access
2010-01-21 22:10:00 PST DETAIL: File must be owned by the database user or root, must have no write permission for "group", and must have no permissions for "other".

... 当我尝试以 postgres 用户身份访问 psql 时,使用以下命令:

$ sudo su postgres
$ psql

它给我一个错误:

 could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

当询问此类问题时,请提及您的操作系统和版本、您的Pg版本(尽管这已经在日志中了),以及您如何安装PostgreSQL。您正在使用Linux,可能是带有“upstart”的Ubuntu,但我不确定。感谢您包含错误消息的确切文本。 - Craig Ringer
另外,这是以“postgres”用户身份运行“psql”的一种迂回方式。我更喜欢使用“sudo -u postgres psql”。 - Craig Ringer
@CraigRinger 抱歉给你带来不便。我正在使用Ubuntu 12.04,我的Postgres版本是8.4.11。我是使用“sudo apt-get install”命令安装的。 - Atul Arvind
别担心,只需记在心里即可。这有时会帮助您更快地获得更好的答案。如果您解释历史和“我是如何到达这一点”的事情,也会有所帮助。例如,在这种情况下,server.key是如何到达那里的,有什么改变。我相信@swair的回答是正确的,所以我主要是为了下一次解释。 - Craig Ringer
7个回答

55

我已经解决了这个问题,方法如下:

1)进入相关目录(使用> locate server.key)

2)备份旧的server.key链接。

3)将ssl-cert-snakeoil.key复制到server.key

4-5)将其所有者和组更改为postgres

6)确保权限为700或740(如错误消息所要求)

适用于我的Ubuntu 12.04和postgresql-8.3的步骤:

sudo cd /var/lib/postgresql/8.3/main/
sudo mv server.key server.key-0
sudo cp /etc/ssl/private/ssl-cert-snakeoil.key server.key
sudo chown postgres server.key
sudo chgrp postgres server.key
sudo chmod 740 server.key
sudo /etc/init.d/postgres-8.3 start

现在它正在运行!感谢支持。


10

不妨不将服务器密钥进行复制并保持其原样。

相反,可以更简单地更改位于PostgreSQL数据目录中的"server.key"链接权限(该位置是指向私有证书.key文件的链接所在位置):

# cd /var/lib/postgresql/9.1/main/

然后

# chown -R postgres:postgres server.key`

请确保原始证书存在。

# /etc/ssl/private/ssl-cert-snakeoil.key

通过设置这些属性,具有这些属性

# chmod 640 ssl-cert-snakeoil.key
# chown root:ssl-cert ssl-cert-snakeoil.key

这个解决方案已在 Debian 上进行了测试。 请记住,CentOS 可以使用 SELinux 来进行扩展的用户权限管理,可以通过

# ls -laZ *

6

正如错误消息所述,需要修复密钥文件server.key的权限。服务器以用户"postgres"运行,该用户应拥有该文件。请尝试:

#cd <path/to/pgsql/data> 
#chown postgres server.key
#chmod 0640 server.key

3

我曾经遇到过这样的问题,后来发现我误删了PostgreSQL用户所属的"ssl-cert"组,使用以下命令将其设置回去:

gpasswd -a postgres ssl-cert


3
/etc/ssl/private的权限设置为root:ssl-cert。这个解决方案是受此问题评论的启发。请注意,即使答案被接受,它并没有解决我的问题。我希望在这里回答以帮助其他人。

2
sudo chown postgres /var/lib/postgresql/8.4/main/server.key

sudo chmod 0640 /var/lib/postgresql/8.4/main/server.key

在输入"postgresql"后按Tab键以确认您的版本。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接