我希望我正确地怀疑这是 Ubuntu 的问题,而不是我正在使用的 postgreSQL 10 的问题。我有一个已加密并安装到的外部 SSD /media/veracrypt1/
。
psql mydb < /media/veracrypt1/mydbdump.sql
当尝试使用I get从其上的 .sql 转储创建数据库时bash: /media/veracrypt1/mydbdump.sql: Permission denied
。我尝试使用 sudo 运行所有操作但无济于事,我还确保将媒体的所有权和权限设置为当前用户。
umask=0022
即使在 Veracrypt GUI 中添加了默认挂载选项后,媒体的权限仍然看起来像这样。
me@mypc:/media$ ls -al
total 140
drwxr-xr-x 4 me me 4096 Jul 12 21:22 .
drwxr-xr-x 24 root root 4096 Jul 3 06:07 ..
drwxr-x---+ 3 me me 4096 Jul 12 22:26 me
drwx------ 1 me me 131072 Jan 1 1970 veracrypt1
编辑:我现在已经通过以我的用户而不是 postgres 用户身份运行 psql 解决了这个问题。不过,也许 Thomas 的解决方案对其他人有用。
答案1
当您使用 Veracrypt 挂载目录时,它不会将其挂载为世界可读的。它仅以运行 Veracrypt 的用户身份挂载它:
$ ls -al /media/
total 24K
drwxrwxrwx 5 root root 4.0K Jul 12 14:59 ./
drwxr-xr-x 29 root root 4.0K Jul 11 23:08 ../
drwxr-x---+ 2 root root 4.0K Jan 2 2018 root/
drwxrwx---+ 3 teward teward 4.0K Jul 12 14:29 teward/
drwx------ 1 teward teward 4.0K May 18 2017 veracrypt4/
如您所见,veracrypt4 目录仅可由我的用户读取,而系统上的其他用户则无法读取。这是 Veracrypt 工作方式的固有特征,它不会让整个系统在其默认挂载选项中访问目录。
如果您想改变这一点,您需要更改 Veracrypt 实用程序的默认挂载选项。
在 Veracrypt GUI 中,转到菜单栏中的“设置”菜单,然后选择“默认挂载参数”。在标有“挂载选项”的框中,您需要输入umask=0022
,这将为挂载文件夹设置不同的有效权限。然后点击“确定”,然后再次挂载您的 Veracrypt 驱动器/容器。
使用这些挂载选项,同一个挂载点将获得与默认值不同的权限掩码 - 它既可由组读取,又可由“其他用户”读取(请注意,权限行已从变为drwx------
)drwxr-xr-x
:
$ ls -al /media/
total 24K
drwxrwxrwx 5 root root 4.0K Jul 12 15:01 ./
drwxr-xr-x 29 root root 4.0K Jul 11 23:08 ../
drwxr-x---+ 2 root root 4.0K Jan 2 2018 root/
drwxrwx---+ 3 teward teward 4.0K Jul 12 14:29 teward/
drwxr-xr-x 1 teward teward 4.0K May 18 2017 veracrypt4/
由于它以您的用户身份挂载它,而不是默认挂载它以便其他人可以读取它,这就是您收到错误的原因。调整挂载 umask,然后再次尝试以用户身份postgres
读取文件/驱动器。然后它应该可以正常工作。
但请不要忘记,这会将“加密”数据公开给驱动器上的所有其他用户。如果您想禁止系统上的其他用户(系统用户或其他用户)访问加密数据,则需要删除这些挂载选项。