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

aug*_*82l 6 postgresql ssl

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

当我输入

sudo服务postgresql启动

我懂了

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

检查权限

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

检查组组成

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

我还注意到/ etc / ssl / certs /中的ssl-cert-snakeoil.pem文件没有符号链接。我不知道这有什么不同...

请帮我解决这个问题。

谢谢。

编辑:应该将其发布在serverfault上吗?

小智 11

检查输出

$ sudo -u postgres
$ cd /etc/ssl/private
$ ls
Run Code Online (Sandbox Code Playgroud)

如果响应是“权限被拒绝”,请执行

$ chown postgres:ssl-cert /etc/ssl/private/
$ chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key
Run Code Online (Sandbox Code Playgroud)


Nou*_*had 7

尝试将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
Run Code Online (Sandbox Code Playgroud)

加布勒鲁

  • 如果文件的权限设置正确,则问题可能是由于层次结构中的父目录之一不具有执行 (x) 权限而引起的。这是遍历文件所在目录所必需的。 (2认同)

Smi*_*tel 6

如果您更改了 /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
Run Code Online (Sandbox Code Playgroud)

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

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

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

$ ls -la /etc/ssl/
> drwx------   2 postgres root private
Run Code Online (Sandbox Code Playgroud)

如果这不是输出,请更改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
Run Code Online (Sandbox Code Playgroud)