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

11

Minha pergunta é semelhante à outra , exceto que uma pergunta sobre arquivos recém-criados.

Na minha caixa Unix, os usuários alice , bob e tomcat estão no grupo tomcat .

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.

No entanto, notei que após a edição, o arquivo passa a pertencer ao ú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?

Leonel
fonte
É seu objetivo garantir que o tomcat continue a possuir os arquivos ou garantir que: o servidor tomcat continue funcionando; Alice e Bob podem continuar editando os arquivos, e essa segurança é mantida?
CTRL-ALT-DELOR
1
Suponho que o serviço tomcat esteja sendo executado no usuário 'tomcat', com base na maneira como sua pergunta está formulada. Provavelmente, isso não é desejável, uma vez que uma exploração do tomcat pode resultar na reescrita de sua própria configuração para expor bits do servidor que você pode não pretender. Você deve considerar usar um grupo diferente que possa gravar a configuração, enquanto o grupo tomcat pode ler, mas não gravar.
Neville
1
Leitura recomendada em segundo plano
Gilles 'SO- stop be evil'

Respostas:

17

O usuário resultante do arquivo depende do que o editor faz. Alguns editores salvam o arquivo truncando-o e escrevendo sobre o arquivo (sem alterar o inode). E alguns editores renomeie o arquivo para outro nome ( filepara file~é usual), e criar um novo arquivo com o nome do original. A modificação do arquivo original mantém o proprietário igual, e a criação de um novo torna o novo arquivo pertencente ao UID do processo de criação.

Dos editores que tenho no Debian, nanoe joetambém ( nvie vima versão mínima vim-tiny) parecem sobrescrever no local. Embora eu suponha que o vimEmacs seja provavelmente configurável no que faz.


Stephen comenta sobre atualizações atômicas . O problema com a recriação no local é que o arquivo é truncado com tamanho zero e, em seguida, gravado. Outro processo pode ser aberto e lido antes que todos os dados sejam gravados.

Uma atualização atômica seria feita criando a nova versão como digamos file.newe renomeando file.newpara file. Deixando um arquivo de backup, pode-se criar file.new, ligação filepara file~e mude o nome file.newpara file. A renomeação é atômica, pois qualquer processo que acesse o arquivo pelo nome obtém a versão antiga ou a nova, e nada entre eles. Obviamente, qualquer identificador de arquivo aberto apontará para o arquivo que foi mantido aberto, fornecendo uma visão consistente do arquivo.


Do ponto de vista das permissões de arquivo , salvar o mesmo arquivo (inode) requer acesso de gravação ao próprio arquivo (mas não o 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 maneira de corrigir permissões de arquivo, no caso de alguém criar ou modificar um arquivo em um diretório compartilhado, mas esquece de fornecer acesso de gravação em grupo a ele.)

ilkkachu
fonte
6
Criar e renomear também é a única maneira de garantir que o arquivo seja atualizado atomicamente usando a semântica do POSIX.
Stephen Kitt
boa explicação.
Mian Asbat Ahmad
13

Conforme explicado por ilkkachu , se o editor que está sendo usado cria um novo arquivo ao salvar, não há como controlar o proprietário do arquivo. O que você provavelmente realmente se preocupa é garantir que os arquivos permaneçam legíveis pelo Tomcat; você pode fazer isso garantindo que o grupo seja tomcat(e eles sejam legíveis pelo grupo) e que isso possa ser imposto em novos arquivos, definindo o setgidbit no diretório pai :

chmod g+s .

Assim, se bobeditar um arquivo usando um editor que o recrie, o arquivo editado será de propriedade do bob:tomcatTomcat e ainda poderá lê-lo (com umaskpelo menos um típico ). Desde que o diretório pai seja gravável pelo tomcatgrupo, qualquer usuário desse grupo poderá editar arquivos no diretório (mesmo que apenas os recrie).

Eu recomendaria, no entanto, procurar alterar seus processos; você provavelmente não deve editar arquivos diretamente no local de leitura do Tomcat. Idealmente, os arquivos seriam mantidos em um VCS de algum tipo e implantados por um processo separado (possivelmente automatizado). Dessa forma, você evita todos esses problemas de propriedade ...

Stephen Kitt
fonte
boa solução !!
Mian Asbat Ahmad