Como manter a propriedade de um arquivo após a edição?

Como manter a propriedade de um arquivo após a edição?

Minha pergunta é semelhante aesse outro, exceto que alguém pergunta sobre arquivos recém-criados.

Na minha caixa Unix, os usuáriosAlice,prumoegatoestão no grupogato.

Os arquivos de configuração do servidor Tomcat são de propriedade do usuário tomcat e do grupo tomcat.

Alterei as permissões deste arquivo para legível e gravável por grupo para que Alice e Bob possam editar os arquivos.

Porém, percebi que após a edição, o arquivo passa a ser propriedade do último usuário que o editou.

P:É possível alterar as permissões para que Alice e Bob possam editar os arquivos, sem alterar sua propriedade?

Como a edição de um arquivo altera sua propriedade?

Responder1

O usuário resultantedo arquivo depende do que o editor faz. Alguns editores salvam o arquivo truncando-o e sobrescrevendo-o (sem alterar o inode). E alguns editores renomeiam o arquivo com outro nome ( filecomo file~é usual) e criam um novo arquivo com o nome do original. Modificar o arquivo original mantém o proprietário o mesmo, criar um novo faz com que o novo arquivo pertença ao UID do processo de criação.

Dos editores que tenho no Debian, nanoe joe, também nvie vim(a versão mínima em vim-tiny) parecem sobrescrever no local. Embora eu suponha vimque o Emacs seja provavelmente configurável no que faz.


Stephen comenta sobreatualizações atômicas. O problema com a recriação no local é que o arquivo é truncado para comprimento zero e depois gravado. Outro processo poderia abri-lo e lê-lo antes que todos os dados fossem gravados.

Uma atualização atômica seria feita criando a nova versão como say file.newe renomeando file.newpara file. Saindo de um arquivo de backup, pode-se criar file.new, vincular filee file~renomear file.newpara file. A renomeação é atômica, pois qualquer processo que acessa o arquivo pelo nome obtém a versão antiga ou a nova, e nada intermediário. Qualquer identificador de arquivo aberto apontará, é claro, para o arquivo que foi mantido aberto, proporcionando uma visão consistente do arquivo.


Depermissões de arquivoDo ponto de vista, salvar no mesmo arquivo (inode) requer acesso de gravação ao próprio arquivo (mas não ao diretório), renomeá-lo e criar um novo requer acesso de gravação ao diretório (mas não ao arquivo original).

(Renomear e recriar também é, aliás, uma forma de corrigir permissões de arquivo, caso alguém crie ou modifique um arquivo em um diretório compartilhado, mas se esqueça de conceder acesso de gravação ao grupo a ele.)

Responder2

Comoexplicadoporilkkachu, se o editor usado criar um novo arquivo ao salvar, não haverá como controlar oproprietáriodo arquivo. O que você provavelmente realmente se importa é garantir que os arquivos permaneçam legíveis pelo Tomcat; você pode fazer isso garantindo que o grupo deles seja tomcat(e que sejam legíveis pelo grupo) e isso pode ser aplicado em novos arquivos definindo o setgidbit no paidiretório:

chmod g+s .

Assim, se bobeditar um arquivo usando um editor que recria o arquivo, o arquivo editado acabará sendo propriedade de bob:tomcate o Tomcat ainda poderá lê-lo ( umaskpelo menos com um típico). Contanto que o diretório pai seja gravável pelo tomcatgrupo, qualquer usuário desse grupo poderá editar arquivos no diretório (mesmo que apenas recriando-os).

Eu recomendaria, no entanto, mudar seus processos; você provavelmente não deveria editar arquivos diretamente no local de onde eles são lidos pelo Tomcat. Idealmente, os arquivos seriam mantidos em algum tipo de VCS e implantados por um processo separado (possivelmente automatizado). Dessa forma você evita todos esses problemas de propriedade...

informação relacionada