致命:无法访问私钥文件“/etc/ssl/private/ssl-cert-snakeoil.key”:权限被拒绝

时间:2015-12-10 19:00:44

标签: postgresql ssl

我相信我最终在/ etc / ssl目录树中混淆了权限,因为最后一次修改是在11月18日和我无法让我的PostgreSQL工作的第二天。

当我输入

  

sudo service postgresql start

我得到了

  

致命:无法访问私钥文件“/etc/ssl/private/ssl-cert-snakeoil.key”:权限被拒绝

检查权限

  

〜$ sudo -i
  〜$ ls -la / etc / ssl / private
  drw-r ----- 2 root ssl-cert 4096 11月18日21:10   -rwxrwxrwx 1 postgres postgres 1704 Set 4 11:26 ssl-cert-snakeoil.key

检查组成分

  

〜$ id postgres
  uid = 114(postgres)gid = 127(postgres)groups = 127(postgres),114(ssl-cert)

另外我注意到/ etc / ssl / certs /上的ssl-cert-snakeoil.pem文件没有符号链接。我不知道这是否有任何区别......

请帮我解决这个问题。

感谢。

编辑:是否应该在 serverfault 上发布?

7 个答案:

答案 0 :(得分:5)

尝试将postgres用户添加到论坛ssl-cert

运行以下代码以修复上述问题并修复权限

# > It happened to me and it turned out that I removed erroneously the postgres user from "ssl-cert" group, set it back with
sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo /etc/init.d/postgresql start

courtsey加入GabLeRoux

答案 1 :(得分:2)

检查

的输出
$ sudo -u postgres
$ cd /etc/ssl/private
$ ls

如果回复是“权限被拒绝”,请执行

$ chown postgres:ssl-cert /etc/ssl/private/
$ chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key

答案 2 :(得分:0)

尝试将.key文件的权限设置为600. Postgres不喜欢设置了组或世界权限的密钥文件。您可能还需要将所有者更改为postgres,但我不确定。

答案 3 :(得分:0)

尝试在远程docker实例上启动Postgresql时,我遇到了这个问题。我最终追踪了疯狂的解决方案here。基本上你必须重新创建目录,并且它自己没有工作:

mkdir /etc/ssl/private-copy; mv /etc/ssl/private/* /etc/ssl/private-copy/; rm -r /etc/ssl/private; mv /etc/ssl/private-copy /etc/ssl/private; chmod -R 0700 /etc/ssl/private; chown -R postgres /etc/ssl/private

答案 4 :(得分:0)

我正在WSL中运行postgres服务器,而ssl-cert文件却遇到了错误。我设法通过将文件的所有者更改为我创建的postgres用户来使其工作,并根据应用程序的需要向用户添加了预期的用户ID和组ID(分别从有用的错误消息中收集到111和116)。 ,瞧,我在WSL中有一个活动的服务器。

sudo useradd postgres
sudo usermod -u 111 -g 116 -a -G ssl-cert postgres
sudo chown postgres /etc/ssl/private/ssl-cert-snakeoil.key

运行上述命令后,运行服务器的用户(我为postgres)需要两个文件才能访问,它们都位于/var/postgresql中。我再使用sudo chown --次来赋予postgres所有权。运行sudo service postgresql start会告诉您需要通过任何错误消息转移所有权的文件。

答案 5 :(得分:0)

仅当您更改了/ etc / ssl / private的权限后,这才有效

mkdir /etc/ssl/private-copy; mv /etc/ssl/private/* /etc/ssl/private-copy/; rm -r /etc/ssl/private; mv /etc/ssl/private-copy /etc/ssl/private; chmod -R 0700 /etc/ssl/private; chown -R postgres /etc/ssl/private

复制整个命令(这是一个单行代码)。

  

如果这对您不起作用,请按groups postgres终止您的postgres用户组,并确保您的postgres用户具有 ssl-cert root postgres (顺序无关紧要)。

现在,让我们检查您对ssl / private的文件权限:

$ ls -la /etc/ssl/
> drwx------   2 postgres root private

如果这不是输出,请使用sudo chmod -R 700 /etc/ssl/private和所有者chown -R postgres:root /etc/ssl/private更改您的权限

//Now check permissions on ssl-cert-snakeoil.key, 
//which will be inside your **private** directory.
$ ls -la /etc/ssl/private/ssl-cert-snakeoil.key
> -rwx------ 1 postgres root /etc/ssl/private/ssl-cert-snakeoil.key

答案 6 :(得分:0)

我在 /etc/ssl/private 下有其他证书,因此,递归更改权限是不可能的。

我尝试将 postgres 用户添加到 ssl-cert 组也没有帮助。

我把/etc/ssl/private的权限修改为716,基本上是说除了root(用户)和ssl-cert(组)之外的任何人都可以读取和执行目录。

sudo chmod 716 /etc/ssl/private

然后,我修改了 ssl-cert-snakeoil.key

的所有权

sudo chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key

这对我有用,基本上是@devops 和@Noushad 的答案的组合