Editando um arquivo sem permissão de substituição

Editando um arquivo sem permissão de substituição

É possível definir permissões para o arquivo mantê-lo editável, mas sem permissão para sobrescrever?

Quero dizer possibilidade de editar o arquivo com editor de texto, mas negando qualquer tentativa de substituir o arquivo por sobreposição. O usuário é root. Eu sei que não é a estrutura comum de permissão de arquivos Unix, mas estou procurando uma abordagem complicada.

Tenho um pacote de arquivos, pois alguns deles foram editados/personalizados a partir da versão original. Ao atualizar o pacote com uma nova versão, quero substituir qualquer arquivo intocado, mas proteger os arquivos customizados (para não perder as edições). Atualmente, devo fazer isso manualmente: escrevendo qual arquivo foi editado, para não ser substituído em nova atualização.

Responder1

Como todos os pacotes tentarão substituir completamente o arquivo de configuração, você pode definir o arquivo no modo somente acréscimo,

chattr +a bb

Portanto, você não pode remover/truncar o arquivo, apenas anexá-lo.

Mas, nesse caso, você impedirá que o gerenciador de pacotes atualize o sistema.

Se você simplesmente não deseja que o gerenciador de pacotes substitua seus arquivos personalizados, você pode manter o pacote, no debian/ubuntu, você pode fazer:

echo package-name hold | dpkg --set-selections

Dessa forma este pacote não será atualizado, seus arquivos serão mantidos.

Responder2

Depende do que exatamente significa "substituir". Se isso significa alterar os dados de um arquivo existente, então não é possível porque o sistema operacional não tem como distinguir uma "edição" de uma "substituição" - ambos estão alterando os dados do arquivo. Se isso significar excluir e criar um novo arquivo com o mesmo nome (ou renomear um novo arquivo com esse nome), isso pode ser feito removendo a permissão de gravação do diretório que contém o arquivo. Obviamente, isso se aplicaria a todos os arquivos nesse diretório, e não a um arquivo específico.

Responder3

Primeiro de tudo, faça um tar dos arquivos importantes do pacote. Então atualize. Depois de instalar a nova versão, descompacte o saveem outro diretórioe compare os arquivos que você editou com os novos do pacote. Dessa forma, você verá se os novos arquivos também não têm coisas importantes para serem adicionadas/alteradas (ou seja, os desenvolvedores também podem ter adicionado modificações aos arquivos que você editou, e essas alterações também devem ser mantidas. Você não pode apenas substitua os arquivos do novo pacote pelas suas edições antigas, sem verificar primeiro se esses novos arquivos não contêm novas informações importantes)

Responder4

Como root faça:

chattr +i foo.txt

Então tente:

vim foo.txt

altere o arquivo no vim e tente salvá-lo.

Um exemplo de caso de uso é chattr +i /etc/resolv.conf para que seu incômodo serviço de gerenciamento de rede não o substitua por algum arquivo ruim obtido de um roteador residencial/de escritório mal configurado.

Você pode desfazer isso com:

chattr -i foo.txt

No modelo de sistema de arquivos Linux, isso é o melhor que você pode fazer. Não há outra solução.

informação relacionada