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?
files
permissions
ownership
Leonel
fonte
fonte
Respostas:
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 (
file
parafile~
é 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,
nano
ejoe
também (nvi
evim
a versão mínimavim-tiny
) parecem sobrescrever no local. Embora eu suponha que ovim
Emacs 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.new
e renomeandofile.new
parafile
. Deixando um arquivo de backup, pode-se criarfile.new
, ligaçãofile
parafile~
e mude o nomefile.new
parafile
. 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.)
fonte
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 osetgid
bit no diretório pai :Assim, se
bob
editar um arquivo usando um editor que o recrie, o arquivo editado será de propriedade dobob:tomcat
Tomcat e ainda poderá lê-lo (comumask
pelo menos um típico ). Desde que o diretório pai seja gravável pelotomcat
grupo, 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 ...
fonte