Como rotular um arquivo recém-criado com “system_u”?

4

Acabei de criar um arquivo conf em branco para freetds e notei que as permissões estão erradas:

[root@box etc]# touch freetds.conf.new
[root@box etc]# ll -lZ freetds.conf*
-rw-r--r--. root root system_u:object_r:etc_t:s0   freetds.conf
-rw-rw----. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new

Então eu tentei:

[root@box]# semanage fcontext -a -t system_u /etc/freetds.conf.new 

Mas isso falha com:

ValueError: Type system_u is invalid, must be a file or device type

O que devo usar para alterar o rótulo de unconfined_u para system_u no arquivo freetds.conf.new?

    
por a coder 23.07.2016 / 02:03

1 resposta

9

Uma alteração de rótulo "temporário" é feita por meio do comando chcon :

bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new
bash-4.2# chcon -t etc_t -u system_u freetds.conf.new 
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0       freetds.conf.new

Uma alteração permanente seria feita por meio do comando semanage . Isso adicionará (ou modificará) uma linha em /etc/selinux/targeted/contexts/files/file_contexts.local , que pode ser aplicada com restorecon .

Então, vamos começar de novo com um novo arquivo:

bash-4.2# rm freetds.conf.new
bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new

Podemos adicionar uma regra para isso:

bash-4.2# semanage fcontext -a -t etc_t -s system_u /etc/freetds.conf.new
bash-4.2# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/etc/freetds.conf.new    system_u:object_r:etc_t:s0

Isso não mudou o arquivo ainda, embora

bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new

Então agora nós aplicamos:

bash-4.2# restorecon -vF /etc/freetds.conf.new
restorecon reset /etc/freetds.conf.new context unconfined_u:object_r:etc_t:s0->system_u:object_r:etc_t:s0
bash-4.2# ls -lZ /etc/freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/freetds.conf.new

ETA: Se você for copiar o freetds.conf.new para freetds.conf depois de atualizá-lo, provavelmente ficarei com o comando chcon ; é mais fácil e o conjunto de regras existente lidará com a remarcação quando tiver o nome correto. Eu só usaria o formulário semanage se esse fosse o nome final.

    
por 23.07.2016 / 02:44

Tags