我相信我最终在/ 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 上发布?
答案 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)
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 (顺序无关紧要)。
$ 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 的答案的组合