Diversas vezes, nos deparamos com problemas de permissão de contextos no SELinux, isto acontece frequentemente, ainda mais em serviços que têm uma alta rotatividade de objetos, como
File Servers e
FTP.
Para resolver este problema, utilizaremos o comando
chcon, sua função nada mais é do que alterar contextos em objetos.
Para os nossos testes com o
chcon, vamos criar um arquivo denominado "teste.txt" dentro do diretório
/etc:
# touch /etc/teste.txt
Verifique os contextos deste arquivo:
# ls -Z /etc/teste.txt
Saída do comando:
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 /etc/teste.txt
Perceba que o usuário está definido como "unconfined_u". Imagine agora, que precisamos alterar (por algum motivo qualquer) para o usuário "user_u". Vamos utilizar o seguinte comando:
# chcon -u user_u /etc/teste.txt
Onde:
-u = user
# ls -Z /etc/teste.txt
Saída do comando:
-rw-r--r--. root root user_u:object_r:etc_t:s0 /etc/teste.txt
Perceba que, agora o arquivo está com o contexto de usuário definido para "user_u".
Caso precisamos (por algum motivo qualquer) alterar o domínio (type) deste objeto, para "tmp_t":
# chcon -t tmp_t /etc/teste.txt
Onde:
-t = type
# ls -Z /etc/teste.txt
Saída do comando:
-rw-r--r--. root root user_u:object_r:tmp_t:s0 /etc/teste.txt
Pronto, o arquivo está com seu domínio alterado, assim, todos os objetos que tem acesso ao domínio "tmp_t", terão acesso ao arquivo
/etc/teste.txt.
Em um último teste do comando
chcon, imaginamos que você queira clonar o contexto de outro objeto?! O
chcon também faz isso:
# chcon --reference /var /etc/teste.txt
# ls -Z /etc/teste.txt
Saída do comando:
-rw-r--r--. root root system_u:object_r:var_t:s0 /etc/teste.txt
Obs.: Caso você queira aplicar contextos recursivamente, basta inserir a opção "-R" no comando
chcon.
Em muitos casos, queremos deixar o objeto de acordo com as regras do domínio (type) no qual o mesmo está armazenado. Poderíamos utilizar o
chcon e copiar todos os contextos, ou utilizar um comando que faz exatamente isso. Este comando é o
restorecon, vamos vê-lo em detalhes:
# restorecon -F /etc/teste.txt
Com este comando, o arquivo "teste.txt" herdará todos os contextos do diretório
/etc (local onde o mesmo está armazenado). Útil, não?! =)
Os comandos
chcon e
restorecon, são extremamente úteis e complexos, para um maior detalhamento dos mesmos, leia a Man Page oficial:
# man chcon
# man restorecon