设置 Azure 提供的临时存储的写入权限(基于 Linux 的 VM)

设置 Azure 提供的临时存储的写入权限(基于 Linux 的 VM)

除了将其用作交换空间之外,我还将使用 Azure VM(Ubuntu 14.04 OS)中可用的临时存储来存储 Postgresql 临时文件。

为了实现这一点,我必须创建一个/$PGDATA/base/pgsql_tmp指向的符号链接/mnt/pgsql_tmp。所以应该是ln -s /mnt/pgsql_tmp $PGDATA/base/pgsql_tmp

这合理地确保了所有临时文件都存储在基于 SSD 的临时存储中并从中读取。但是,有一个问题:用户postgres没有写入权限/mnt

drwxr-xr-x   4 root root 4.0K Mar 18 12:40 mnt

我如何确保postgres也具有写入权限/mnt?我应该这样做sudo chmod -R 777 /mnt然后就完成了吗?

我知道这很简单,但因为它是一个生产服务器,而且我已经设置了交换,所以/mnt我不想配置错误并在明天遇到问题。


ps 临时存储目前的样子是这样的:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       221G  9.9G  200G   5% /mnt

答案1

ln -sTf /mnt/pgsql_tmp $PGDATA/base/pgsql_tmp  # did you get that correct?
chown -R postgres              /mnt/pgsql_tmp
chmod o+x    /mnt          # note: no -R,  this turns 750 to 751 for /mnt only

效果:

 su - postgres
 echo 1 > /mnt/file   # fails
 ls   /mnt            # fails
 cat /mnt/anything    # fails
 echo 1 >  /mnt/pgsql_tmp/file   # works
 ls /mnt/pgsql_tmp               # works
 cat /mnt/pgsql_tmp/file         # works

chmod o+x其他人提供 +e[x]ecute 位,使他们有权遍历任何子目录。其他权限对于以下情况/mnt不是必需的:/mnt/mnt/pgsql_tmp

答案2

为了允许用户postgres写入文件夹,最好让他成为owner该文件夹的用户,而不是授予每个人读写权限。

如果/mnt只应在那时使用postgres,则应成为文件夹及其所有子文件夹postgres的所有者/mnt

sudo chown -R /mnt postgres

您可能只想对例如的子文件夹执行此/mnt操作/mnt/pgsql_tmp

sudo chown -R /mnt/pgsql_tmp postgres

相关内容