O proprietário do arquivo é alterado após a edição de um arquivo editável do grupo

3

Eu uso o archlinux x64. Estou estudando desenvolvimento web e para editar arquivos servidos pelo Apache em srv/http , diretório que o Apache atende, criei um grupo adicionando meu usuário e usuário do Apache para poder editar os arquivos sem a necessidade de movê-los entre diretórios.
A coisa é, eu posso editar corretamente os arquivos dentro do diretório com o meu usuário, mas sempre que eu salvá-los, o usuário e o grupo são revertidos para o meu usuário e grupo. Por exemplo:

Me: user1:users
Apache: http:http
Directory ownership: http:development

Em seguida, abro o arquivo /srv/http/index.html com meu usuário, que é assim ...
rw-rwr-- 1 http development 1034 Mar 20 20:48 index.html
(como você pode ver, ele leu e gravou permissões para o proprietário e para o grupo) e quando eu salvá-lo, as permissões de arquivo são revertidas para isso ...
rw-rw-r-- 1 user1 users 1034 Mar 20 20:48 index.html

Não consigo entender o que está acontecendo porque, se eu digitar groups para ver meus grupos ativos de usuários, recebo este lp wheel network video audio storage users development , onde de fato diz que sou um membro do desenvolvimento. Eu acho que é outra coisa.
Alguém poderia me dizer o que está acontecendo e como posso corrigi-lo em economizar tempo?
Eu sei que não é um grande problema, mas eu quero corrigi-lo antes que eu consiga o problema do hífen perdido.

PD - Eu uso editor sublime se importa.

    
por Edgar Sampere 21.03.2015 / 04:40

2 respostas

4

No UNIX, apenas root pode alterar o proprietário dos arquivos. Como consequência, podemos concluir que o dono do arquivo não está mudando quando você o edita. Em vez disso, o que deve estar acontecendo é que seu editor está escrevendo o conteúdo editado em um novo arquivo e substituindo o arquivo antigo pelo novo. Por ser um novo arquivo, o arquivo acaba sendo marcado com você como proprietário.

Existem algumas vantagens em atualizar arquivos desta maneira:

  • É atômico: os leitores sempre veem a versão antiga ou a nova versão, nunca uma nova versão parcialmente escrita.
  • É mais fácil se recuperar de erros. Se ocorrer um erro, como disco cheio, basta excluir o novo arquivo temporário (antes de renomeá-lo na parte superior da versão antiga) para retroceder. Se você estivesse atualizando o arquivo, talvez não seja possível concluí-lo e atualizá-lo, além de não conseguir reverter o processo.
  • Você pode "atualizar" um arquivo ao qual você não tem acesso de gravação (porque você nunca realmente grava o arquivo antigo).
  • Qualquer usuário que ainda tenha o arquivo aberto pode continuar usando a versão antiga pelo tempo que for necessário, para que não seja interrompido. Útil para arquivos executáveis!

Existem também desvantagens:

  • Você precisa de permissão de gravação no diretório em que o arquivo reside (ou, pelo menos, em algum outro lugar no mesmo sistema de arquivos), para criar um novo arquivo temporário e renomeá-lo.
  • Você não pode preservar o proprietário do arquivo e pode ou não preservar o grupo.
  • Há uma lista longa de outras coisas que você pode preservar replicando-as no novo arquivo temporário antes de movê-lo, como as permissões, os atributos estendidos, se o arquivo é um link simbólico para um arquivo real. arquivo em outro lugar, recurso forks (MacOS), etc ... A menos que você seja muito cuidadoso e muito exaustivo, é difícil não perder um ou mais desses.

Então é um compromisso.

Tarefas automatizadas, como scripts de segundo plano, instalação de software e afins, geralmente optam por substituir a versão antiga por um novo arquivo, especialmente devido à atomicidade.

Os editores de texto e outras tarefas humanas geralmente optam por editar o arquivo.

Eu não estou familiarizado com o seu editor, mas parece estar fazendo a escolha oposta à maioria dos outros editores. Você terá que ver se pode configurá-lo para parar de fazer isso.

A propósito, é realmente muito melhor se o proprietário dos arquivos dentro da raiz do seu documento pertencer a você, não pelo usuário do apache. Ele fornece melhor garantia de que o servidor da Web (se comprometido, por exemplo) não pode editar os arquivos. Então você pode considerar ignorar esse "problema" específico e considerá-lo uma coisa boa.

    
por 21.03.2015 / 05:18
2

Sim, alguns editores basicamente apagam o arquivo antigo com o novo arquivo editado. Assim, o proprietário é aquele que fez a edição e o grupo seria seu grupo principal.

No entanto, você aplica o grupo a arquivos no diretório, alterando as permissões do diretório usando chmod g+s . .... isso fará com que qualquer arquivo recém-criado esteja no mesmo grupo que o diretório, mesmo que esse NÃO seja seu grupo primário.

Ainda há uma desvantagem em usar as permissões de gravação em grupo para fazer as coisas, é que você deve alterar sua umask para, pelo menos, 002, de modo que ele crie arquivos graváveis em grupo.

    
por 21.03.2015 / 05:54