【发布时间】:2022-07-20 17:05:06
【问题描述】:
我想设置一个 PostgreSQL 数据库,但 initdb 遇到了身份验证错误。我似乎按照文档中的描述进行操作。
- 我以 postgres 用户的身份使用
doas -u postgres -s登录(AFAIK 与su - postgres相同) -
cd到/home/user/A/B/postgres。 -
stat .收益
访问:(0700/drwx------) Uid:(965/postgres) Gid:(965/postgres)
-
id收益
uid=965(postgres) gid=965(postgres) groups=965(postgres)
- 运行
initdb -D /home/user/A/B/data会导致错误:
无法将目录更改为“/home/user/A/B/postgres”:权限被拒绝
属于该数据库系统的文件将归用户“postgres”所有。 该用户还必须拥有服务器进程。
数据库集群将使用语言环境“C”进行初始化。 因此,默认数据库编码已设置为“SQL_ASCII”。 默认文本搜索配置将设置为“英语”。
数据页校验和被禁用。
initdb:错误:无法访问目录“/home/user/A/B/postgres/data”:权限被拒绝
无论是否事先创建目录data,并且还使用相对路径和绝对路径,都会遇到此错误或类似错误。路径中的文件夹 A 和 B 不属于 postgres。
我在 manjaro 上使用 postgresql 13.4-6 和 doas 进行身份验证并卸载了 sudo。
【问题讨论】:
-
'路径中的文件夹 A 和 B 不属于 postgres。'会是你的问题。 OS用户
postgres没有权限遍历"/home/user/A/B到达/data。 -
解决方案:确实路径遍历是问题所在。我在路径中的文件夹中添加了其他人的执行权限,它解决了这个问题。谢谢!
-
我想过这一点,但因为它也不适用于相对路径而被驳回。相对路径解析不应该起作用吗?最后我不认为我在做任何奇怪的事情吗?应该可以在目录树深处创建数据库而无需任何“全局”权限更改?编辑:显然这是路径解析的工作方式,与其他各种命令一起检查。
-
如果有人可以绕过路径中的所有上级权限来获取他们有权访问的下级目录,那将是一个很大的安全漏洞。
标签: postgresql credentials postgresql-initdb