<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>configurar selinux Archives - Blog do Gesiel Bernardes</title>
	<atom:link href="https://gesielbernardes.eti.br/tag/configurar-selinux/feed" rel="self" type="application/rss+xml" />
	<link>https://gesielbernardes.eti.br/tag/configurar-selinux</link>
	<description>Blog sobre Tecnologia e Segurança da Informação</description>
	<lastBuildDate>Mon, 15 Feb 2016 12:14:57 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Configurar e trabalhar com SELinux (CentOS)</title>
		<link>https://gesielbernardes.eti.br/configurar-selinux.html</link>
		
		<dc:creator><![CDATA[gbernardes]]></dc:creator>
		<pubDate>Mon, 15 Feb 2016 12:11:51 +0000</pubDate>
				<category><![CDATA[Segurança da Informação]]></category>
		<category><![CDATA[configurar selinux]]></category>
		<category><![CDATA[desabilitar selinux]]></category>
		<category><![CDATA[disable selinux]]></category>
		<category><![CDATA[selinux]]></category>
		<category><![CDATA[selinux centos]]></category>
		<guid isPermaLink="false">http://gesielbernardes.eti.br/?p=116</guid>

					<description><![CDATA[<p>O SELinux é uma importante camada de proteção para os servidores Linux. Infelizmente, é muito comum &#8211; e até corriqueiro &#8211; os administradores de servidores desabilitarem ele, sem saber o quão importante ele é para a segurança do sistema. Este artigo é um resumo de uma série que escrevi para o CSIRT Unicamp (links no… <span class="read-more"><a href="https://gesielbernardes.eti.br/configurar-selinux.html">Read More &#187;</a></span></p>
<p>The post <a href="https://gesielbernardes.eti.br/configurar-selinux.html">Configurar e trabalhar com SELinux (CentOS)</a> appeared first on <a href="https://gesielbernardes.eti.br">Blog do Gesiel Bernardes</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>O SELinux é uma importante camada de proteção para os servidores Linux. Infelizmente, é muito comum &#8211; e até corriqueiro &#8211; os administradores de servidores desabilitarem ele, sem saber o quão importante ele é para a segurança do sistema. Este artigo é um resumo de uma série que escrevi para o <a href="https://www.security.unicamp.br" target="_blank">CSIRT Unicamp </a>(links no final da página).</p>
<h2>Introdução ao SELinux</h2>
<p>Mesmo sendo conhecido por grande parte dos administradores de redes/sistemas, o uso mais comum consiste basicamente em “desabilitá-lo”. Por requerer um trabalho adicional, ou por não saber configurar o SELinux, ou por outros motivos, os administradores abrem mão de um importante aliado na proteção do servidor. Segundo estatísticas do CSIRT Unicamp, ao menos 70% dos problemas de Segurança em servidores web no ano de 2013 poderiam ter sido evitados se estivessem com SELinux ativo.</p>
<p>SELinux é a implantação do mecanismo de Segurança MAC (Mandatory Access Control) no kernel do Linux. Foi criado pela NSA (National Security Agency), e impõe regras em arquivos e processos em um sistema Linux.<br />
A maioria dos sistemas utilizam DAC ( Discretionary Access Control) para prover segurança do sistema. De uma forma geral, DAC é um controle de acesso em que o usuário tem controle total dos arquivos que possui e executa. Uma vez definida estas permissões, não há nenhuma outra restrição para execução dos processos/arquivos. Isto pode ser um problema quando, por exemplo, o usuário (ou um processo iniciado pelo mesmo) não atribui a permissão adequada a um determinado arquivo, deixando-o exposto. Ou então quando um programa foge do seu comportamento “normal”. Vejamos um exemplo: O usuário apache está sendo utilizado para executar o software Apache. Durante sua execução, devido uma falha de programação no código da página, o processo recebe uma requisição para acessar o arquivo /etc/passwd. As permissões do arquivo são as seguintes:</p>
<p># ls -l /etc/passwd<br />
-rw-r&#8211;r&#8211; 1 root root 1760 Out 23 11:12 /etc/passwd</p>
<p>Segundo as permissões do arquivo /etc/passwd, todos podem ler o arquivo. Logo, o Apache poderá exibi-lo sem nenhum problema. Ainda neste exemplo, se a falha do código da página permitisse, seria possível o Apache salvar um arquivo em qualquer local que tiver permissão de escrita.<br />
Mandatory Access Control (MAC), provido pelo SELinux, restringe o nível de controle que os usuários tem sobre os objetos que eles criam, e adiciona categorias e rótulos a todos os objetos do sistema de arquivos. Usuários e processos devem ter acesso adequado a estas categorias e rótulos para que então possam interagir com esses objetos. Quando corretamente implementado, MAC permite ao sistema defender-se adequadamente. A sua capacidade de limitar os privilégios associados a processos de execução limita o âmbito de dano potencial, que pode resultar da exploração de vulnerabilidades em aplicações e serviços do sistema.<br />
Como aplicação do SELinux, o que se tem são rótulos contendo informações relevantes para a segurança de processos e arquivos. Essa informação é chamada de Contexto SELinux (SELinux context), e pode ser obtida utilizando a opção “-Z” no comando “ls”:</p>
<p># ls -lZ /etc/passwd<br />
-rw-r&#8211;r&#8211;. root root system_u:object_r:etc_t:s0 /etc/passwd</p>
<p>No arquivo acima temos o contexto do usuário (system_u), a regra (object_r), o tipo (etc_t) e o nível (s0). Estas informações são utilizadas para determinar o acesso do usuário ao arquivo. Agora, vamos voltar ao exemplo anterior, e considerar que neste sistema o SELinux está ativo. Verificaremos então o contexto do processo do Apache:</p>
<p># ps axZ | grep httpd<br />
unconfined_u:system_r:httpd_t:s0 6906 ? Ss 0:00 /usr/sbin/httpd</p>
<p>Logo, como o contexto do processo não coincide com o contexto do arquivo, o acesso ao mesmo será NEGADO, mesmo que nas permissões DAC o mesmo tenha permissão para tanto.</p>
<h2>Modificando contextos</h2>
<p>Conforme visto anteriormente, o SELinux tem seu funcionamento baseado em rótulos e em políticas de segurança. Os rótulos dos usuários, arquivos e processos definem o contexto de segurança de cada objeto. Colocando em uma aplicação prática, vejamos o exemplo a seguir:</p>
<p># ls -Z /var/www/html/<br />
-rw-r&#8212;&#8211;. root apache unconfined_u:object_r:user_home_t:s0 index.html</p>
<p>Em quase todos os casos, o campo do contexto que realmente importa é o terceiro campo; ele indica o tipo do objeto (neste caso, user_home_t indica que o tipo de arquivo é um arquivo de usuário “humano”). Considerando que este arquivo é uma página que será utilizada pelo Apache, conclui-se que ele não está com o contexto apropriado (que neste caso seria “httpd_sys_content_t”), logo não irá funcionar. Então, é necessário alterar o tipo de arquivo no contexto para que o mesmo funcione:</p>
<p># chcon -R -t httpd_sys_content_t /var/www/html/</p>
<p>Assim como o chmod é utilizado para alterar permissões DAC, o chcon pode ser utilizado para alterar o contexto dos arquivos. Porém todas as alterações realizadas com o chcon são desfeitas quando o sistema é reiniciado. Para que a alteração seja permanente, deve-se utilizar o semanage:</p>
<p># semanage fcontext -m -t httpd_sys_content_t /var/www/html/index.html</p>
<p>Alterar o contexto de arquivo por arquivo não parece ser muito produtivo. Por isso, você pode utilizar expressões regulares para alterar vários arquivos de uma vez só:</p>
<p># semanage fcontext -m -t httpd_sys_content_t &#8220;/var/www/html(/.*)?&#8221;</p>
<p>Se o retorno que você tiver for o abaixo, basta você trocar o “-m” (modificar) pelo “-a” (adicionar) no comando:</p>
<p>usr/sbin/semanage: O contexto de arquivo para /var/www/html não está definido</p>
<p># semanage fcontext -a -t httpd_sys_content_t &#8220;/var/www/html(/.*)?&#8221;</p>
<p>Após realizar as alterações com o semanage, é necessário utilizar o “restorecon” para aplicar as alterações:</p>
<p># restorecon -Rv /var/www/html</p>
<p>Agora, o arquivo já está com o contexto que permitirá seu funcionamento:</p>
<p># ls -Z /var/www/html/<br />
-rwxr-x&#8212;. root apache unconfined_u:object_r:httpd_sys_content_t:s0 index.html</p>
<h2>Políticas Booleanas</h2>
<p>Além do contexto, o SELinux utiliza políticas pré-definidas para cada serviço para restringir/conceder acesso á determinadas funções. Você pode visualiza-las utilizando o comando abaixo:</p>
<p># semanage boolean -l</p>
<p>Supondo que desejo que o home dos usuários seja acessível pelo apache (crio lá no home do usuário uma pasta public_html para o usuário acessar meusite.com/~usuario). Se não alterar nada, o SELinux irá bloquear o acesso. Então, listando as políticas, temos:</p>
<p># semanage boolean -l | grep -E &#8216;httpd.*home&#8217;<br />
httpd_enable_homedirs (desativado,desativado) Allow httpd to read home directories</p>
<p>Com isso, confirmamos que a esta opção está desativada. Vamos ativá-la então:</p>
<p># setsebool -P httpd_enable_homedirs 1</p>
<h2>Liberar Portas</h2>
<p>O SELinux também provê controle sobre qual serviço pode acessar qual porta (para o desespero de alguns). A lista de portas/serviços liberados você pode obter com o comando abaixo:</p>
<p># semanage port -l</p>
<p>Usando como exemplo um servidor apache, que quero que o mesmo funcione na porta 25000/TCP. Porém, nas políticas SELinux esta porta não está liberada:</p>
<p># semanage port -l | grep http _port<br />
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000</p>
<p>Então, vamos adicionar a porta 25000 á regra:</p>
<p># semanage port -a -t http_port_t -p tcp 25000</p>
<h2>Resolvendo problemas</h2>
<p><strong>     </strong>Muitas vezes, por diversas razões, não conseguimos impedir que o SELinux interfira no funcionamento adequado de determinados softwares. Para solucionar casos deste tipo, podemos utilizar o audit2allow para entender melhor o problema ou para criar módulos de políticas para SELinux.</p>
<p>O primeiro passo é verificar os logs em /var/log/audit,log, que terá registros semelhantes a esse:</p>
<p>type=AVC msg=audit(1455199601.283:181376): avc: denied { setattr } for pid=7489 comm=&#8221;mingetty&#8221; name=&#8221;tty6&#8243; dev=devtmpfs ino=5354 scontext=system_u:system_r:getty_t:s0 tcontext=system_u:object_r:tmpfs_t:s0 tclass=chr_file<br />
type=SYSCALL msg=audit(1455199601.283:181376): arch=c000003e syscall=92 success=no exit=-13 a0=7ffdf8b4b090 a1=0 a2=0 a3=7ffdf8b4acd0 items=0 ppid=1 pid=7489 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=&#8221;mingetty&#8221; exe=&#8221;/sbin/mingetty&#8221; subj=system_u:system_r:getty_t:s0 key=(null)<br />
type=AVC msg=audit(1455199606.148:181377): avc: denied { setattr } for pid=7490 comm=&#8221;mingetty&#8221; name=&#8221;tty2&#8243; dev=devtmpfs ino=5350 scontext=system_u:system_r:getty_t:s0 tcontext=system_u:object_r:tmpfs_t:s0 tclass=chr_file</p>
<p>Neste exemplo, SELinux está bloqueando a função &#8220;setattr&#8221; para a aplicação &#8220;mingetty&#8221;. Iremos usar o audit2allow para criar um módulo de política SELinux para corrigir tal erros.</p>
<p>Para gerar um relatórios &#8220;humano&#8221; dos eventos do SELinux, você pode utilizar o comando abaixo:<br />
# audit2allow -a</p>
<p>O comando acima irá analisar todos os registros contidos em /var/log/audit.log. Caso queira uma análise apenas para um erro específico, você pode usar o &#8220;grep&#8221; para filtrar os eventos:<br />
# grep &#8220;mingetty&#8221; /var/log/audit.log | allow2audit -w</p>
<p>Para criar um modulo de política SELinux, utilze a opção &#8220;-M&#8221;:<br />
# audit2allow -a -M meumodulo</p>
<p>Posso também utilizar o &#8220;grep&#8221;, como no exemplo anterior:<br />
# grep &#8220;mingetty&#8221; /var/log/audit.log | allow2audit -M meumodulo</p>
<p>Ele irá criar um arquivo &#8220;.pp&#8221; e um .&#8221;te&#8221; no diretório corrente. Para instalar o módulo, você utilize o comando:<br />
# semodule -i meumodulo.pp</p>
<p>Em seguinda, habilite o módulo:<br />
# semodule -e meumodulo</p>
<h2>Referências:</h2>
<p><a href="https://www.security.unicamp.br/54-selinux-um-importante-aliado-na-seguranca-de-servidores-linux-parte-1.html" target="_blank">https://www.security.unicamp.br/54-selinux-um-importante-aliado-na-seguranca-de-servidores-linux-parte-1.html</a></p>
<p><a href="https://www.security.unicamp.br/86-selinux-um-importante-aliado-na-seguranca-de-servidores-linux-parte-2.html" target="_blank">https://www.security.unicamp.br/86-selinux-um-importante-aliado-na-seguranca-de-servidores-linux-parte-2.html</a></p>
<p><a href="https://www.security.unicamp.br/103-selinux-um-importante-aliado-na-seguranca-de-servidores-linux-parte-3.html" target="_blank">https://www.security.unicamp.br/103-selinux-um-importante-aliado-na-seguranca-de-servidores-linux-parte-3.html</a></p>
<p>The post <a href="https://gesielbernardes.eti.br/configurar-selinux.html">Configurar e trabalhar com SELinux (CentOS)</a> appeared first on <a href="https://gesielbernardes.eti.br">Blog do Gesiel Bernardes</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
