安装 postgresql。最后一行显示:“无法将目录更改为“home/user”:权限被拒绝”

安装 postgresql。最后一行显示:“无法将目录更改为“home/user”:权限被拒绝”

我正在为编程训练营做准备,并按照某些说明安装 Linux(Ubuntu v22.04)。安装进行得很顺利,但随后我被告知在终端中输入以下命令:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get install git && sudo apt-get install curl postgresql postgresql-contrib && touch ~/.bash_profile && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash && source ~/.nvm/nvm.sh && nvm install node && nvm use node && sudo -u postgres createuser --superuser $USER && sudo -u postgres createdb $USER && git config --global credential.helper store

据我了解,这是安装 Git、NVM、Node 和 Postgresql,并且似乎前三个安装正确,但是最后几行如下:

Now using node v20.4.0 (npm v9.7.2)
could not change directory to "/home/user": Permission denied
could not change directory to "/home/user": Permission denied

我认为这与 postgresql 有关,但我完全不知道这是否是个问题。我遵循的指南对此没有任何说明,这是我第一次使用任何类型的 Linux,所以我不熟悉这些术语。

如有必要,将不胜感激任何建议/解释。

答案1

总结:这不是问题,安装成功。有关于这个问题的讨论在 Postgres 邮件列表中已在 PostgreSQL 16 中修复

错误原因

could not change directory to "/home/user": Permission denied

错误来自这两个命令:

sudo -u postgres createuser --superuser $USER && sudo -u postgres createdb $USER

即使您收到“权限被拒绝”消息,命令仍已成功执行。

这些错误源于resolve_symlinks()功能它使用解析符号链接chdir,并最终尝试chdir返回原始目录,如果执行用户psql没有权限,则失败。resolve_symlinks()调用来自,find_my_exec()而调用者依次是set_pglocale_pgservice()(设置PGSYSCONFDIRPGLOCALEDIR)。

针对旧版本的解决方案

对于 16 之前的版本,通过授予用户执行psql/ createuser/createdb等命令x对发出命令的工作目录的权限来修复错误。这可以通过几种方式完成:

  1. 添加-isudo命令以使用登录 shell,它在执行命令之前将工作目录更改为 postgres 用户的主目录 psql(postgres 用户自然具有x其自己主目录的权限):

    sudo -i -u postgres psql < setup_dev_db.sql
    
  2. 通过将postgres 用户x添加到拥有工作目录的组来授予其对当前工作目录的权限:

    # Get group owning the current directory
    stat -c "%G" .
    # Add postgres user to that group
    sudo usermod -aG <group above here> postgres
    
  3. 通过向“其他人”授予工作目录的权限,向 postgres 用户授予x当前工作目录的权限x。这在用于开发的基于 VM 的单用户系统中非常方便,例如 WSL2,其中简单的chmod o+x /home/$USER命令就可以修复错误。

  4. 使用当前用户运行psql,该用户当然具有当前工作目录的权限。

  5. 执行命令之前,将工作目录更改为 postgres 用户具有x权限的目录,例如cd /tmp

答案2

步骤1

stat -c "%G" <the problem folder, e.g. `/home/user`>

第2步

sudo usermod -aG <the output from the step 1> postgres

结果:

在此处输入图片描述

df.tips/t/2063/2

相关内容