Os diretórios /home
e /tmp
não são realmente apropriados para isso, e nenhum deles está usando um link simbólico. Crie um diretório para armazenar o arquivo e configurar permissões para ele usando uma ACL. Digamos que seu nome de usuário seja peter
. Alguns dos comandos abaixo podem ser supérfluos, e estes são dados apenas para serem explícitos.
# Make a new directory to store the 'file.txt'.
#
sudo mkdir /var/my_dir
# Change ownership and group ownership to root.
#
sudo chown root:root /var/my_dir
# Only allow root and members of root to read the directory.
#
sudo chmod 0750 /var/my_dir
# Begin to augment standard permissions with ACLs.
# Below, allow peter rwx for all new file system objects in /var/my_dir.
# (-d means "default" and -m means "mask")
#
setfacl -d -m u:peter:rwx /var/my_dir
# Set the same mask for the directory itself.
#
setfacl -m u:peter:rwx /var/my_dir
# Below, allow postgres r-x for all new file system objects in /var/my_dir.
#
setfacl -d -m u:postgres:r-x /var/my_dir
# Set the same mask for the directory itself.
#
setfacl -m u:postgres:r-x /var/my_dir
Agora, peter
pode criar arquivos em /var/my_dir
e postgres
pode lê-los.
Também pode ser conveniente vincular o diretório em seu diretório pessoal.
cd && ln -s /var/my_dir .
Os arquivos em /tmp
devem desaparecer na reinicialização. De um modo geral, ou talvez indiscutivelmente, não seria uma boa prática vincular a arquivos em seu diretório inicial. Eu poderia explicar essa afirmação se você ainda não entende. Um local melhor para essa finalidade pode ser /usr/local/var/my_dir
, mas o ponto principal é tentar obter as permissões certas em vez de usar /tmp
e /home
com links simbólicos para essa finalidade.
Atualizar
Isso também pode ser feito de uma maneira padrão e mais simples, que seria mais compatível com outros softwares, como clientes SFTP / SCP.
sudo mkdir /var/my_dir
sudo chown peter:postgres /var/my_dir
sudo chmod 0750 /var/my_dir
Agora, os arquivos existentes em /var/my_dir
só podem ser lidos por root
, peter
e postgres
, enquanto apenas peter
e root
podem escrever.
Depois, certifique-se de que seu umask
crie arquivos que postgres
possa ler.
cd
touch test
ls -l test
Se o resultado mostrar r
para "outros", então postgres
poderá ler o arquivo em /var/my_dir
.
Ainda outra abordagem ...
sudo touch /usr/local/var/file.txt
sudo chown peter:postgres /usr/local/var/file.txt
sudo chmod 0640 /usr/local/var/file.txt
cd
ln -s /usr/local/var/file.txt .
Acima, trabalhamos com um único arquivo, sem diretórios. Mais uma vez, tudo isso é simplesmente definir permissões. Você apenas tem que decidir como quer abordar a situação, tendo mais conhecimento sobre o que está fazendo do que o que podemos ler na pergunta.