Como edito um arquivo e preservo sua lista de controle de acesso / contexto de segurança do SELinux?

6

Estou no CentOS 6.2 e tenho um arquivo com o caracter <<> método de acesso alternativo exibido como um ponto.

ls -l myfile
-rwxr-x---. 1 me mygroup   172 Aug 13 10:03 myfile
          ^ 
          This dot.

Da ajuda exibida para ls com info invocação do ls do 'coreutils'

Following the file mode bits is a single character that specifies
whether an alternate access method such as an access control list
applies to the file.  When the character following the file mode
bits is a space, there is no alternate access method.  When it is
a printing character, then there is such a method.

GNU 'ls' uses a '.' character to indicate a file with an SELinux
security context, but no other alternate access method.

A file with any other combination of alternate access methods is
marked with a '+' character.

Então este arquivo tem algum contexto de segurança do SELinux atribuído a ele. Usando getfacl e getfattr esses comandos mostram:

getfacl myfile
# file: myfile
# owner: me
# group: mygroup
user::rwx
group::r-x
other::---

getfattr -m - myfile
# file: myfile
security.selinux

getfattr -n security.selinux myfile
# file: myfile
security.selinux="unconfined_u:object_r:usr_t:s0"

Eu fiz o backup do arquivo original com:

cp --preserve=all myfile myfile.ORIG

Em seguida, editei o original:

vi myfile
:wq

Que elimina qualquer contexto:

ls -l myfile
-rwxr-x---  1 me mygroup   172 Aug 13 10:06 myfile
          ^ 
          The dot is gone.

getfattr -n security.selinux myfile
myfile: security.selinux: No such attribute

getfacl myfile
# file: myfile
# owner: me
# group: mygroup
user::rwx
group::r-x
other::---

Qual é o processo recomendado para editar este arquivo e preservar seus atributos estendidos e a configuração alternativa do método de acesso?

    
por Alan 13.08.2012 / 20:51

1 resposta

3

Os editores podem seguir uma das duas estratégias quando você salva um arquivo.

  • Crie um novo arquivo e mova-o para substituir o antigo. A principal vantagem é que sempre existe um arquivo válido: a versão antiga é atomicamente substituída pela nova. Uma desvantagem é que um novo arquivo é criado, portanto, o editor deve replicar manualmente a propriedade e as permissões do arquivo antigo com o melhor de sua capacidade. Esse método também quebra hard links.
  • Escreva no arquivo existente. Isso preserva hard links e permissões. Além disso, isso não requer nenhum espaço extra em disco, mas é altamente recomendável fazer um backup primeiro, o que torna esse ponto discutível. Isso tem a principal desvantagem de que, se um programa tentar ler o arquivo enquanto estiver sendo salvo, ele verá um arquivo truncado; e se o salvamento for interrompido (por exemplo, por uma falha de energia), um arquivo parcial permanecerá.

Os editores normalmente favorecem o primeiro método e voltam ao segundo método se detectarem que não podem replicar as permissões do arquivo existente ou que o arquivo existente tem links físicos.

É provável que a maioria dos editores não perceba a presença dos atributos extras do SELinux e, portanto, aplique o primeiro método. Com versões recentes do GNU coreutils (≥ 8.6), você pode usar cp --preserve=context --attributes-only para replicar o contexto do SELinux de um arquivo em outro arquivo sem alterar o conteúdo do arquivo de destino.

Como alternativa, instrua seu editor a editar o arquivo no lugar. Com o Vim, defina o backupcopy option para yes , se esse não for o padrão em seu sistema . Com o Emacs, defina a backup-by-copying variable para t .

    
por 14.08.2012 / 03:13

Tags