Definindo permissões de gravação para armazenamento temporário fornecido pelo Azure (VM baseada em Linux)

3

Além de usá-lo para espaço de troca, eu vou usar o armazenamento temporário disponível em minha VM do Azure (Ubuntu 14.04 OS) para armazenar arquivos temporários do Postgresql também.

Para isso, tenho que criar um link simbólico em /$PGDATA/base/pgsql_tmp que aponte para /mnt/pgsql_tmp . Então, isso deve ser ln -s /mnt/pgsql_tmp $PGDATA/base/pgsql_tmp .

Isso garante que todos os arquivos temporários sejam armazenados e lidos a partir do armazenamento temporário baseado em SSD. No entanto, um engate: o usuário postgres NÃO tem permissões para gravar em /mnt :

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

Como posso garantir que postgres também tenha permissão de gravação em /mnt ? Devo apenas fazer sudo chmod -R 777 /mnt e acabar com isso?

Eu sei que isso é elementar, mas como é um servidor de produção e eu já tenho a configuração de swap em /mnt , não quero configurá-lo incorretamente e ter problemas amanhã.

p.s. é assim que o armazenamento temporário se parece atualmente:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       221G  9.9G  200G   5% /mnt
    
por Hassan Baig 19.03.2017 / 11:39

2 respostas

4
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

O efeito:

 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

O chmod o+x significa dar [o] o bit + e [x] ecute, o que lhes dá permissão para percorrer /mnt em qualquer subdiretório. Outras permissões não são necessárias para /mnt apenas para /mnt/pgsql_tmp

    
por 19.03.2017 / 11:52
3

Para permitir que o usuário postgres grave em uma pasta, seria preferível torná-lo o owner da pasta em vez de conceder acesso de leitura / gravação a todos.

Se /mnt deve ser usado somente por postgres , você deve tornar postgres o proprietário da pasta /mnt e todas as suas subpastas

sudo chown -R /mnt postgres

Você pode querer fazer isso apenas para uma subpasta de /mnt , por exemplo. para /mnt/pgsql_tmp

sudo chown -R /mnt/pgsql_tmp postgres
    
por 19.03.2017 / 11:44

Tags