<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Servidores — Comunidade Fedora Brasil</title>
        <link>https://fedorabr.org/</link>
        <pubDate>Wed, 19 Aug 2026 15:34:27 +0000</pubDate>
        <language>pt_BR</language>
            <description>Servidores — Comunidade Fedora Brasil</description>
    <atom:link href="https://fedorabr.org/categories/servidores/feed.rss" rel="self" type="application/rss+xml"/>
    <item>
        <title>Não consigo montar uma vm no virt-manager</title>
        <link>https://fedorabr.org/discussion/720/nao-consigo-montar-uma-vm-no-virt-manager</link>
        <pubDate>Thu, 11 Aug 2022 15:05:47 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>dantasmatosn</dc:creator>
        <guid isPermaLink="false">720@/discussions</guid>
        <description><![CDATA[<p>opa pessoal, <br />
Algum utiliza o Fedora e nele o virt-manager?<br />
Pergunto pois estou utilizando o Fedora 36 com ambiente LXDE e nele tento utilizar o virt-manager e nao consigo manter a conexao estabelecida habilitada por padrao:<br />
systemctl enable libvirtd.service <br />
systemctl start libvirtd.service<br />
Sempre que irei utilizar tenho que habilitar no terminal</p>

<p>E outro desafio que estou obtendo  para criar uma vm:<br />
ao criar uma VM aparece a seguinte mensagem:</p>

<p>Não foi possível completar a instalação: "Cannot access storage file '/root/.local/share/libvirt/images/debian11-1.qcow2' (as uid:107, gid:107): Permissão negada"</p>

<p>Traceback (most recent call last):<br />
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 72, in cb_wrapper<br />
    callback(asyncjob, *args, **kwargs)<br />
  File "/usr/share/virt-manager/virtManager<br />
[11:54]<br />
agradeço em quem puder tentar ajudar</p>
]]>
        </description>
    </item>
    <item>
        <title>Instalando e configurando o PostgreSQL no Fedora 31</title>
        <link>https://fedorabr.org/discussion/311/instalando-e-configurando-o-postgresql-no-fedora-31</link>
        <pubDate>Sat, 02 Nov 2019 20:55:19 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>leandroramos</dc:creator>
        <guid isPermaLink="false">311@/discussions</guid>
        <description><![CDATA[<p>Vou mostrar como instalar o PostgreSQL no Fedora 31 com base nas informações do portal <a rel="nofollow" href="/home/leaving?allowTrusted=1&amp;target=https%3A%2F%2Fdeveloper.fedoraproject.org%2Ftech%2Fdatabase%2Fpostgresql%2Fabout.html" title="Fedora Developer">Fedora Developer</a>.</p>

<p><img src="https://fedorabr.org/uploads/editor/m3/5nzq8m2p9pz2.png" alt="" title="" /></p>

<h2 data-id="instalando-o-postgresql">Instalando o PostgreSQL</h2>

<p>O PostgreSQL está nos repositórios do Fedora, então podemos usar o DNF pela linha de comando ou algum gerenciador de pacotes (como o dnfdragora) para fazer a instalação dos pacotes postgresql e postgresql-server.</p>

<p><img src="https://fedorabr.org/uploads/editor/nu/mgtgrtr955fj.png" alt="" title="" /></p>

<p>Usando a linha de comando:<br /><code spellcheck="false" tabindex="0">sudo dnf install postgresql postgresql-server</code></p>

<h2 data-id="configuracao-inicial-do-postgresql">Configuração inicial do PostgreSQL</h2>

<p><code spellcheck="false" tabindex="0">sudo postgresql-setup initdb</code></p>

<p><img src="https://fedorabr.org/uploads/editor/tz/jv6pe883ngwm.png" alt="" title="" /></p>

<h2 data-id="iniciando-e-habilitando-o-servico-do-postgresql">Iniciando e habilitando o serviço do PostgreSQL</h2>

<p><code spellcheck="false" tabindex="0">sudo systemctl start postgresql</code></p>

<p>Opcional: habilitar o serviço para iniciar com o sistema</p>

<p><code spellcheck="false" tabindex="0">sudo systemctl enable postgresql</code></p>

<p><img src="https://fedorabr.org/uploads/editor/fi/2k6e4w2dm60u.png" alt="" title="" /></p>

<h2 data-id="fazendo-o-login-no-shell-como-administrador-do-postgresql">Fazendo o login no shell como administrador do PostgreSQL</h2>

<p><code spellcheck="false" tabindex="0">sudo su - postgres</code></p>

<p><img src="https://fedorabr.org/uploads/editor/rf/pf2f6w9yudpp.png" alt="" title="" /></p>

<h2 data-id="criando-o-primeiro-banco-de-dados">Criando o primeiro banco de dados</h2>

<p>Com o login do usuário postgres, podemos criar o banco de dados</p>

<p><code spellcheck="false" tabindex="0">createdb banco-teste</code></p>

<p><img src="https://fedorabr.org/uploads/editor/pl/82c7qct7sg3z.png" alt="" title="" /></p>

<h2 data-id="fazendo-a-conexao-com-o-banco-teste">Fazendo a conexão com o banco-teste</h2>

<p>Agora podemos nos conectar ao banco criado anteriormente</p>

<p><code spellcheck="false" tabindex="0">psql -d banco-teste</code></p>

<p><img src="https://fedorabr.org/uploads/editor/4r/9yserr4i2i74.png" alt="" title="" /></p>

<h2 data-id="controlando-o-acesso-ao-cluster-do-postgresql-pg-cluster">Controlando o acesso ao cluster do PostgreSQL (PG Cluster)</h2>

<p>Não se esqueça, você precisa estar logado, no shell, com o usuário postgres</p>

<p><code spellcheck="false" tabindex="0">sudo su - postgres</code></p>

<p>Ainda no shell do usuário postgres, você pode criar um usuário para acessar o cluster:</p>

<p><code spellcheck="false" tabindex="0">createuser leandro -P</code></p>

<p><img src="https://fedorabr.org/uploads/editor/zz/5ueglsib68zg.png" alt="" title="" /></p>

<p>Agora você pode criar um banco de dados colocando o usuário <strong>leandro</strong> como proprietário.</p>

<p><code spellcheck="false" tabindex="0">createdb banco-leandro --owner leandro</code></p>

<p><img src="https://fedorabr.org/uploads/editor/ns/bviadp1s4pjb.png" alt="" title="" /></p>

<h2 data-id="editando-o-arquivo-de-configuracao-do-postgresql">Editando o arquivo de configuração do PostgreSQL</h2>

<p>É hora de adicionar a regra de acesso para o usuário <strong>leandro</strong>. Para isso, edite o arquivo <strong>~/data/pg_hba.conf</strong> com seu editor preferido (vou usar o editor vim).<br />
O diretório <strong>~</strong> representa o diretório inicial (home) do usuário postgres, que é o <strong>/var/lib/pgsql</strong> - por ter acesso administrativo, o usuário postgres pode escrever dentro do diretório.</p>

<p><img src="https://fedorabr.org/uploads/editor/ug/7tvn37zcd1zp.png" alt="" title="" /></p>

<p>Vamos editar o arquivo:<br /><code spellcheck="false" tabindex="0">vim ~/data/pg_hba.conf</code></p>

<p><img src="https://fedorabr.org/uploads/editor/rb/111nr3chdxiq.png" alt="" title="" /></p>

<p>Na seção <strong>local</strong>, adicione a linha para o usuário <strong>leandro</strong></p>

<p><code spellcheck="false" tabindex="0"># TYPE  DATABASE        USER            ADDRESS                 METHOD</code><br /><code spellcheck="false" tabindex="0"># "local" is for Unix domain socket connections only</code><br /><code spellcheck="false" tabindex="0">local   all             leandro                                 md5</code><br /><code spellcheck="false" tabindex="0">local   all             all                                     peer</code></p>

<p><img src="https://fedorabr.org/uploads/editor/gm/flhbryq96j5q.png" alt="" title="" /></p>

<p>Reinicie o serviço do PostgreSQL com o seu usuário comum (não o postgres)</p>

<p><code spellcheck="false" tabindex="0">sudo systemctl restart postgresql</code></p>

<p><img src="https://fedorabr.org/uploads/editor/r8/gkdml1m051e1.png" alt="" title="" /></p>

<h2 data-id="fazendo-a-conexao-ao-banco-do-novo-usuario">Fazendo a conexão ao banco do novo usuário</h2>

<p>Com o seu usuário comum, conecte-se ao <strong>banco-leandro</strong> do usuário <strong>leandro</strong></p>

<p><code spellcheck="false" tabindex="0">psql -d banco-leandro -U leandro</code></p>

<p><img src="https://fedorabr.org/uploads/editor/w2/q1wtvwhau3n9.png" alt="" title="" /></p>

<h2 data-id="permitindo-conexoes-tcp-ip-para-o-novo-usuario">Permitindo conexões TCP/IP para o novo usuário</h2>

<p>Para usar programas cliente de PostgreSQL e não ter que administrar o banco pela linha de comando, temos que liberar o usuário <strong>leandro</strong> para fazer conexões através de TCP/IP - tanto no localhost quanto remotamente.</p>

<p>Com o usuário postgres, edite novamente o arquivo <strong>~/data/pg_hba.conf</strong></p>

<p><code spellcheck="false" tabindex="0">sudo su - postgres</code><br /><code spellcheck="false" tabindex="0">vim ~/data/pg_hba.conf</code></p>

<p>Libere o acesso ao usuário no localhost ou outros hosts/IPs necessários</p>

<p><code spellcheck="false" tabindex="0"># IPv4 local connections:</code><br /><code spellcheck="false" tabindex="0">host    all             leandro         localhost               md5</code><br /><code spellcheck="false" tabindex="0">host    all             all             127.0.0.1/32            ident</code></p>

<p><img src="https://fedorabr.org/uploads/editor/ya/pspa816jdzv9.png" alt="" title="" /></p>

<p>Não se esqueça de reiniciar o PostgreSQL (com seu usuário comum!)</p>

<p><code spellcheck="false" tabindex="0">sudo systemctl restart postgresql</code></p>

<p><img src="https://fedorabr.org/uploads/editor/ih/xdwmuqc69g2j.png" alt="" title="" /></p>

<h2 data-id="configurando-o-dbeaver-ce-para-acesso-ao-banco">Configurando o DBeaver CE para acesso ao banco</h2>

<p>Tutorial de instalação do DBeaver: <a href="https://fedorabr.org/index.php?p=/discussion/305/instalando-o-cliente-de-bancos-de-dados-dbeaver-community-edition" rel="nofollow">https://fedorabr.org/index.php?p=/discussion/305/instalando-o-cliente-de-bancos-de-dados-dbeaver-community-edition</a></p>

<p>Selecione PostgreSQL para iniciar a configuração, depois coloque os detalhes da conexão com o usuário <strong>leandro</strong>, faça o download do driver e teste a conexão.</p>

<p><img src="https://fedorabr.org/uploads/editor/yk/e0abazbh6a2s.png" alt="" title="" /></p>

<p><img src="https://fedorabr.org/uploads/editor/nh/h4fe250sy211.png" alt="" title="" /></p>

<p><img src="https://fedorabr.org/uploads/editor/dz/bil3ppom4dkl.png" alt="" title="" /></p>

<p><img src="https://fedorabr.org/uploads/editor/o6/ek51ik18t961.png" alt="" title="" /></p>

<p><img src="https://fedorabr.org/uploads/editor/xm/c01dbu891676.png" alt="" title="" /></p>

<p>Correções e melhorias são coisas muito bem-vindas. Abraços, pessoal!</p>
]]>
        </description>
    </item>
    <item>
        <title>Instalando e configurando o MariaDB no Fedora 31</title>
        <link>https://fedorabr.org/discussion/306/instalando-e-configurando-o-mariadb-no-fedora-31</link>
        <pubDate>Sat, 02 Nov 2019 15:59:55 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>leandroramos</dc:creator>
        <guid isPermaLink="false">306@/discussions</guid>
        <description><![CDATA[<p>MariaDB é o servidor de bancos de dados que substituiu o MySQL no Fedora e em diversos sistemas Linux. Para saber as principais diferenças entre ele e o MySQL, veja a página comparativa <a rel="nofollow" href="/home/leaving?allowTrusted=1&amp;target=https%3A%2F%2Fmariadb.com%2Fkb%2Fen%2Fmariadb%2Fmariadb-vs-mysql-compatibility%2F">https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/</a></p>

<h2 data-id="instalando-o-mariadb">instalando o MariaDB</h2>

<p><code spellcheck="false" tabindex="0">sudo dnf install mariadb-server</code></p>

<p><img src="https://fedorabr.org/uploads/editor/hx/yasd4qaykvd5.png" alt="" title="" /></p>

<p>Inicie o serviço do MariaDB</p>

<p><code spellcheck="false" tabindex="0">sudo systemctl start mariadb</code></p>

<p><img src="https://fedorabr.org/uploads/editor/4b/n3w916fdg85u.png" alt="" title="" /></p>

<p>Se quiser que o serviço MariaDB inicie junto com o sistema, habilite-o com o Systemd</p>

<p><code spellcheck="false" tabindex="0">sudo systemctl enable mariadb</code></p>

<p><img src="https://fedorabr.org/uploads/editor/ws/p8vmbjtef4b9.png" alt="" title="" /></p>

<h2 data-id="configurando-o-mariadb">Configurando o MariaDB</h2>

<p>Faça a configuração inicial do MariaDB para criar a senha do usuário root</p>

<p><code spellcheck="false" tabindex="0">sudo mysql_secure_installation</code></p>

<p><code spellcheck="false" tabindex="0"><br />
 [leandro@fedora ~]$ sudo mysql_secure_installation</code></p>

<pre spellcheck="false" tabindex="0">NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): &lt;Enter&gt; 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
</pre>

<p></p>

<h2 data-id="fazendo-o-login-no-mariadb">Fazendo o login no MariaDB</h2>

<p><code spellcheck="false" tabindex="0">mysql -u root -p</code></p>

<p><img src="https://fedorabr.org/uploads/editor/t9/5d4oxgywk7y6.png" alt="" title="" /></p>

<h2 data-id="criando-um-usuario-administrador-no-mariadb">Criando um usuário administrador no MariaDB</h2>

<p>É melhor criar um usuário com poderes de administrador do que ficar usando o usuário root para fazer as tarefas no banco de dados, você pode fazer isso pela linha de comando:</p>

<p><code spellcheck="false" tabindex="0">MariaDB [(none)]&gt; grant all privileges on *.* to leandro@localhost identified by 'senha';</code></p>

<p>Depois você pode fazer o login com seu novo usuário e administrar o banco de dados à vontade.</p>

<p><code spellcheck="false" tabindex="0">mysql -u seuusuario -p</code></p>

<p><img src="https://fedorabr.org/uploads/editor/nk/axl19ybidy6x.png" alt="" title="" /></p>

<h2 data-id="administrando-o-mariadb-pela-interface-grafica">Administrando o MariaDB pela interface gráfica</h2>

<p>Se você não gosta ou não quer administrar seu servidor de banco de dados pela linha de comando, você pode instalar algum cliente de interface gráfica para isso. Existem várias opções, mas eu recomendo duas: phpMyAdmin e DBeaver.</p>

<p>Para instalar o phpMyAdmin, use a pilha LAMP - tutorial: <a href="https://fedorabr.org/index.php?p=/discussion/47/tutorial-lamp-no-fedora" rel="nofollow">https://fedorabr.org/index.php?p=/discussion/47/tutorial-lamp-no-fedora</a></p>

<p>Tutorial de instalação do DBeaver: <a href="https://fedorabr.org/index.php?p=/discussion/305/instalando-o-cliente-de-bancos-de-dados-dbeaver-community-edition/" rel="nofollow">https://fedorabr.org/index.php?p=/discussion/305/instalando-o-cliente-de-bancos-de-dados-dbeaver-community-edition/</a></p>

<p>phpMyAdmin:<br /><img src="https://fedorabr.org/uploads/editor/mg/h2j38xdvnedh.png" alt="phpMyAdmin" title="" /></p>

<p>DBeaver:<br /><img src="https://fedorabr.org/uploads/editor/oq/azf2odql0d73.png" alt="DBeaver Community Edition" title="" /></p>
]]>
        </description>
    </item>
    <item>
        <title>Introdução ao SELinux - Parte 2: Arquivos e processos</title>
        <link>https://fedorabr.org/discussion/341/introducao-ao-selinux-parte-2-arquivos-e-processos</link>
        <pubDate>Fri, 22 Nov 2019 03:26:38 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>ChicoFedora</dc:creator>
        <guid isPermaLink="false">341@/discussions</guid>
        <description><![CDATA[<p><strong>Introdução</strong></p>

<p><a rel="nofollow" href="https://fedorabr.org/index.php?p=/discussion/187/introducao-ao-selinux-parte-1-conceitos-basicos#latest" title="**N**a primeira parte da série SELinux"><strong>N</strong>a primeira parte da série SELinux</a> , vimos como habilitar e desabilitar o SELinux e como alterar algumas configurações de política usando valores booleanos. Nesta segunda parte, falaremos sobre contextos de segurança de arquivos e processos.</p>

<p>Para atualizar sua memória do tutorial anterior, um contexto de segurança de arquivo é um tipo e um contexto de segurança de processo é um domínio.</p>

<p><em><strong>Nota<br />
Os comandos, pacotes e arquivos mostrados neste tutorial foram testados no CentOS 7. Os conceitos permanecem os mesmos para outras distribuições.</strong></em></p>

<p>Neste tutorial, estaremos executando os comandos como usuário root, a menos que seja indicado de outra forma. Se você não tiver acesso à conta root e usar outra conta com privilégios sudo, precisará preceder os comandos com o sudo.</p>

<p><strong>Criando contas de usuário de teste</strong></p>

<p>Primeiro, vamos criar quatro contas de usuário para demonstrar os recursos do SELinux à medida que avançamos.</p>

<p>•   joao<br />
•   pedro<br />
•   maria <br />
•   ana</p>

<p>Você deve estar logado com o usuário root . Vamos executar o seguinte comando para adicionar a conta joao :</p>

<pre spellcheck="false" tabindex="0">$ useradd joao</pre>

<p>Em seguida, executamos o comando “passwd” para criar/alterar sua senha:</p>

<pre spellcheck="false" tabindex="0">$ passwd joao</pre>

<p>A saída solicitará uma nova senha. Uma vez fornecida, a conta estará pronta para o login:</p>

<pre spellcheck="false" tabindex="0">Changing password for user regularuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.</pre>

<p>Vamos criar as outras contas também:</p>

<pre spellcheck="false" tabindex="0">$ useradd pedro
$ passwd pedro</pre>

<pre spellcheck="false" tabindex="0">$ useradd maria
$ passwd maria</pre>

<pre spellcheck="false" tabindex="0">$ useradd ana
$ passwd ana</pre>

<p><strong>SELinux para processos e arquivos</strong></p>

<p>O objetivo do SELinux é proteger como os processos acessam arquivos em um ambiente Linux. Sem o SELinux, um processo ou aplicativo como o Apache será executado no contexto do usuário que o iniciou. Portanto, se o seu sistema for comprometido por um aplicativo não autorizado que esteja sendo executado no usuário root, o aplicativo poderá fazer o que quiser, pois o root possui direitos abrangentes em todos os arquivos.</p>

<p>O SELinux tenta dar um passo adiante e eliminar esse risco. Com o SELinux, um processo ou aplicativo terá apenas os direitos necessários para funcionar e NADA mais. A política do SELinux para o aplicativo determinará a quais tipos de arquivos ele precisa acessar e a quais processos ele pode fazer a transição. As políticas do SELinux são escritas por desenvolvedores de aplicativos e enviadas com a distribuição Linux que a suporta. Uma política é basicamente um conjunto de regras que mapeia processos e usuários aos seus direitos.</p>

<p>Começamos a discussão desta parte do tutorial, entendendo o significado dos contextos e domínios do SELinux .</p>

<p>A primeira parte da segurança coloca um rótulo em cada entidade no sistema Linux. Um rótulo é como qualquer outro atributo de arquivo ou processo (proprietário, grupo, data de criação etc.); mostra o contexto do recurso. Então, o que é um contexto? Simplificando, um contexto é uma coleção de informações relacionadas à segurança que ajuda o SELinux a tomar decisões de controle de acesso. Tudo em um sistema Linux pode ter um contexto de segurança: uma conta de usuário, um arquivo, um diretório, um daemon ou uma porta podem ter seus contextos de segurança. No entanto, o contexto de segurança vai significar coisas diferentes para diferentes tipos de objetos.</p>

<p><strong>Contextos de arquivos do SELinux</strong></p>

<p>Vamos começar entendendo os contextos de arquivo do SELinux. Vejamos a saída de um comando ls -l regular no diretório /etc.</p>

<pre spellcheck="false" tabindex="0">$ ls -l /etc/*.conf</pre>

<p>Isso nos mostrará uma saída familiar:</p>

<pre spellcheck="false" tabindex="0">... 
-rw-r--r--. 1 root root    19 Aug 19 21:42 /etc/locale.conf
-rw-r--r--. 1 root root   662 Jul 31  2013 /etc/logrotate.conf
-rw-r--r--. 1 root root  5171 Jun 10 07:35 /etc/man_db.conf
-rw-r--r--. 1 root root   936 Jun 10 05:59 /etc/mke2fs.conf
...</pre>

<p>Simples, certo? Vamos agora adicionar o -Z:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /etc/*.conf</pre>

<p>Agora temos uma coluna extra de informações após a propriedade do usuário e do grupo:</p>

<pre spellcheck="false" tabindex="0">...
-rw-r--r--. root root system_u:object_r:locale_t:s0    /etc/locale.conf
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/logrotate.conf
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/man_db.conf
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/mke2fs.conf
...</pre>

<p>Esta coluna mostra os contextos de segurança dos arquivos. Diz que um arquivo foi rotulado com seu contexto de segurança quando você tem essas informações disponíveis. Vamos dar uma olhada em um dos contextos de segurança.</p>

<pre spellcheck="false" tabindex="0">-rw-r--r--. root    root  system_u:object_r:etc_t:s0       /etc/logrotate.conf</pre>

<p>O contexto de segurança é esta parte:</p>

<pre spellcheck="false" tabindex="0">system_u:object_r:etc_t:s0</pre>

<p>Existem quatro partes e cada parte do contexto de segurança é separada por dois pontos (:). A primeira parte é o contexto do usuário do SELinux para o arquivo. Discutiremos os usuários do SELinux mais tarde, mas, por enquanto, podemos ver que é system_u. Cada conta de usuário do Linux é mapeada para um usuário do SELinux e, nesse caso, o usuário raiz que possui o arquivo é mapeado para o usuário system_u SELinux. Esse mapeamento é feito pela política do SELinux.</p>

<p>A segunda parte especifica a função SELinux , que é object_r . Para revisar as funções do SELinux, consulte o primeiro artigo do SELinux.</p>

<p>O mais importante aqui é a terceira parte, o tipo de arquivo listado aqui como etc_t . Esta é a parte que define a que tipo de arquivo ou diretório pertence. Podemos ver que a maioria dos arquivos pertence ao tipo etc_t no /etc, você pode pensar no tipo como uma espécie de "grupo" ou atributo para o arquivo: é uma maneira de classificar o arquivo.</p>

<p>Também podemos ver que alguns arquivos podem pertencer a outros tipos, como o locale.conf que tem um tipo locale_t. Mesmo quando todos os arquivos listados aqui tiverem o mesmo usuário e proprietário do grupo, seus tipos poderão ser diferentes.</p>

<p>Como outro exemplo, vamos verificar os contextos de tipo para diretórios pessoais do usuário:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /home</pre>

<p>Os diretórios pessoais terão um tipo de contexto diferente: user_home_dir_t</p>

<pre spellcheck="false" tabindex="0">drwx------. maria      maria      unconfined_u:object_r:user_home_dir_t:s0      maria
drwx------. root           root           system_u:object_r:lost_found_t:s0 lost+found
drwx------. joao    joao    unconfined_u:object_r:user_home_dir_t:s0      joao
drwx------. restricteduser ana unconfined_u:object_r:user_home_dir_t:s0      ana
drwx------. switcheduser   switcheduser   unconfined_u:object_r:user_home_dir_t:s0      pedro
drwx------. sysadmin       sysadmin       unconfined_u:object_r:user_home_dir_t:s0      sysadmin</pre>

<p>A quarta parte do contexto de segurança, s0, tem a ver com segurança multinível ou MLS. Basicamente, essa é outra maneira de aplicar a política de segurança do SELinux e essa parte mostra a sensibilidade do recurso (s0). Falaremos brevemente sobre sensibilidade e categorias posteriormente. Para a maioria das configurações completas do SELinux, os três primeiros contextos de segurança são mais importantes.</p>

<p><strong>Contextos do processo SELinux</strong></p>

<p>Vamos agora falar sobre os contextos de segurança do processo.<br />
Inicie os serviços Apache e SFTP. Instalamos esses serviços no primeiro tutorial do SELinux.</p>

<pre spellcheck="false" tabindex="0">$ systemctl start httpd
$ systemctl start vsftpd </pre>

<p>Podemos executar o ps comando com alguns sinalizadores para mostrar os processos Apache e SFTP em execução no nosso servidor:</p>

<pre spellcheck="false" tabindex="0">$ ps -efZ | grep 'httpd\|vsftpd'</pre>

<p>Mais uma vez, o sinalizador -Z é usado para exibir os contextos do SELinux. A saída mostra o usuário executando o processo, o ID do processo e o ID do processo pai:</p>

<pre spellcheck="false" tabindex="0"> system_u:system_r:httpd_t:s0            root        7126    1       0 16:50 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0            apache      7127    7126    0 16:50 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0            apache      7128    7126    0 16:50 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0            apache      7129    7126    0 16:50 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0            apache      7130    7126    0 16:50 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0            apache      7131    7126    0 16:50 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:ftpd_t:s0-s0:c0.c1023 root        7209    1       0 16:54 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 7252 2636  0 16:57 pts/0 00:00:00 grep --color=auto httpd\|vsftpd</pre>

<p>O contexto de segurança é esta parte:</p>

<pre spellcheck="false" tabindex="0"> system_u:system_r:httpd_t:s0</pre>

<p>O contexto de segurança possui quatro partes: usuário, função, domínio e sensibilidade. O usuário, a função e a sensibilidade funcionam exatamente como os mesmos contextos para os arquivos (explicados na seção anterior). O domínio é exclusivo para processos.</p>

<p>No exemplo acima, podemos ver que alguns processos estão em execução no domínio httpd_t, enquanto um está em execução no domínio ftpd_t.</p>

<p>Então, o que o domínio está fazendo pelos processos? Isso fornece ao processo um contexto para execução. É como uma bolha em torno do processo que a limita. Diz ao processo o que pode e o que não pode fazer. Esse confinamento garante que cada domínio do processo possa atuar apenas em certos tipos de arquivos e nada mais.</p>

<p>Usando esse modelo, mesmo que um processo seja invadido por outro usuário ou processo malicioso, o pior que pode fazer é danificar os arquivos aos quais ele tem acesso. Por exemplo, o daemon vsftp não terá acesso aos arquivos usados por, por exemplo, sendmail ou samba. Essa restrição é implementada no nível do kernel: é aplicada à medida que a política do SELinux é carregada na memória e, portanto, o controle de acesso se torna obrigatório.</p>

<p><strong>Convenções de nomenclatura</strong></p>

<p>Antes de prosseguirmos, aqui está uma observação sobre a convenção de nomenclatura do SELinux. Os usuários do SELinux possuem o sufixo "_u", as funções com o sufixo "_r" e os tipos (para arquivos) ou domínios (para processos) com o sufixo "_t".</p>

<p><strong>Como os processos acessam recursos</strong></p>

<p>Até agora, vimos que arquivos e processos podem ter contextos diferentes e que são restritos a seus próprios tipos ou domínios. Então, como um processo é executado? Para executar, um processo precisa acessar seus arquivos e executar algumas ações neles (abrir, ler, modificar ou executar). Também aprendemos que cada processo pode ter acesso apenas a certos tipos de recursos (arquivos, diretórios, portas, etc.).</p>

<p>O SELinux estipula essas regras de acesso em uma política. As regras de acesso seguem uma estrutura padrão de instrução allow:</p>

<pre spellcheck="false" tabindex="0"> allow  : {  };
</pre>

<p>Já falamos sobre domínios e tipos. Classe define o que o recurso realmente representa (arquivo, diretório, link simbólico, dispositivo, portas, cursor etc.)</p>

<p>Aqui está o que essa declaração de permissão genérica significa:</p>

<p>•   Se um processo é de determinado domínio<br />
•   E o objeto de recurso que está tentando acessar é de certa classe e tipo<br />
•   Então permita o acesso<br />
•   Senão negar acesso</p>

<p>Para ver como isso funciona, vamos considerar os contextos de segurança do daemon httpd em execução no nosso sistema:</p>

<pre spellcheck="false" tabindex="0"> system_u:system_r:httpd_t:s0     7126 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     7127 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     7128 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     7129 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     7130 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     7131 ?        00:00:00 httpd</pre>

<p>O diretório inicial padrão do servidor da web é /var/www/html. Vamos criar um arquivo nesse diretório e verificar seu contexto:</p>

<pre spellcheck="false" tabindex="0">$ touch /var/www/html/index.html
$ ls -Z /var/www/html/*</pre>

<p>O contexto do arquivo para o nosso conteúdo da web será httpd_sys_content_t :</p>

<pre spellcheck="false" tabindex="0"> -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html</pre>

<p>Podemos usar o sesearch comando para verificar o tipo de acesso permitido para o daemon httpd:</p>

<pre spellcheck="false" tabindex="0">$ sesearch --allow --source httpd_t --target httpd_sys_content_t --class file</pre>

<p>Os sinalizadores usados com o comando são bastante auto-explicativos: o domínio de origem é httpd_t, o mesmo domínio em que o Apache está sendo executado. Estamos interessados nos recursos de destino que são arquivos e têm um contexto de tipo httpd_sys_content_t. Sua saída deve ficar assim:</p>

<pre spellcheck="false" tabindex="0"> Found 4 semantic av rules:
   allow httpd_t httpd_sys_content_t : file { ioctl read getattr lock open } ;
   allow httpd_t httpd_content_type : file { ioctl read getattr lock open } ;
   allow httpd_t httpd_content_type : file { ioctl read getattr lock open } ;
   allow httpd_t httpdcontent : file { ioctl read write create getattr setattr lock append unlink link rename execute open } ;</pre>

<p>Observe a primeira linha:</p>

<pre spellcheck="false" tabindex="0"> allow httpd_t httpd_sys_content_t : file { ioctl read getattr lock open } ;</pre>

<p>Isso indica que o httpd daemon (o servidor Apache) possui controle de I/O, lê, obtém atributo, bloqueia e abre acesso a arquivos do tipo httpd_sys_content. Nesse caso, nosso index.html tem o mesmo tipo.</p>

<p>Indo um passo adiante, vamos primeiro modificar a página web (/var/www/html/index.html). Edite o arquivo para conter este conteúdo:</p>

<p><img src="https://fedorabr.org/uploads/editor/yc/cl9id8ct9wwz.png" alt="" title="" /></p>

<p>Em seguida, alteraremos a permissão do diretório /var/www/ e seu conteúdo, seguido por uma reinicialização do daemon httpd:</p>

<pre spellcheck="false" tabindex="0">$ chmod -R 755 /var/www
$ service httpd restart</pre>

<p>Em seguida, tentaremos acessá-la a partir de um navegador:</p>

<p><img src="https://fedorabr.org/uploads/editor/8z/7aabgoilz431.png" alt="" title="" /></p>

<p><em><strong>Nota<br />
Dependendo de como o servidor estiver configurado, talvez seja necessário habilitar a porta 80 no firewall do IPTables para permitir o tráfego HTTP de entrada de fora do servidor. Não entraremos em detalhes sobre a ativação de portas no IPTables aqui. Existem outros artigos meus aqui no fórum que abordam sobre o assunto.</strong></em></p>

<p>Por enquanto, tudo bem. O daemon httpd está autorizado a acessar um tipo específico de arquivo e podemos vê-lo ao acessar pelo navegador. Em seguida, vamos tornar as coisas um pouco diferentes, alterando o contexto do arquivo. Nós usaremos o comando chcon para isso. A –type sinalização para o comando permite especificar um novo tipo para o recurso de destino. Aqui, estamos alterando o tipo de arquivo para var_t.</p>

<pre spellcheck="false" tabindex="0">$ chcon --type var_t /var/www/html/index.html</pre>

<p>Podemos confirmar a alteração de tipo:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /var/www/html/</pre>

<pre spellcheck="false" tabindex="0"> -rwxr-xr-x. root root unconfined_u:object_r:var_t:s0   index.html</pre>

<p>Em seguida, quando tentamos acessar a página (ou seja, o daemon httpd tenta ler o arquivo), você pode receber um erro Forbidden ou a página genérica “Testing 123” do CentOS:</p>

<p><img src="https://fedorabr.org/uploads/editor/6l/z8t6sgrif88d.png" alt="" title="" /></p>

<p>Então, o que está acontecendo aqui? Obviamente, agora algum acesso está sendo negado, mas de quem é esse acesso? No que diz respeito ao SELinux, o servidor está autorizado a acessar apenas certos tipos de arquivos e var_t não é um desses contextos. Como alteramos o contexto do arquivo index.html para var_t, o Apache não pode mais lê-lo e obtemos um erro.</p>

<p>Para fazer as coisas funcionarem novamente, vamos mudar o tipo de arquivo com o comando restorecon a opção -v mostra a alteração dos rótulos de contexto:</p>

<pre spellcheck="false" tabindex="0">$ restorecon -v /var/www/html/index.html</pre>

<pre spellcheck="false" tabindex="0"> restorecon reset /var/www/html/index.html context unconfined_u:object_r:var_t:s0-&gt;unconfined_u:object_r:httpd_sys_content_t:s0</pre>

<p>Se tentarmos acessar a página agora, ele mostrará o texto "Esta é uma página  de teste" novamente.</p>

<p>Este é um conceito importante para entender: garantir que arquivos e diretórios tenham o contexto correto é essencial para garantir que o SELinux esteja se comportando como deveria. Veremos um caso de uso prático no final desta seção, mas antes disso, vamos falar sobre mais algumas coisas.</p>

<p><strong>Herança de contexto para arquivos e diretórios</strong></p>

<p>O SELinux impõe algo que podemos chamar de "herança de contexto". O que isso significa é que, a menos que especificado pela política, processos e arquivos são criados com o contexto de seus pais.</p>

<p>Portanto, se tivermos um processo chamado “proc_a” gerando outro processo chamado “proc_b”, o processo gerado será executado no mesmo domínio que “proc_a”, a menos que especificado de outra forma pela política do SELinux.</p>

<p>Da mesma forma, se tivermos um diretório com o tipo "some_context_t", qualquer arquivo ou diretório criado nele terá o mesmo contexto de tipo, a menos que a política indique o contrário.</p>

<p>Para ilustrar isso, vamos verificar os contextos do diretório /var/www/:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /var/www</pre>

<p>O diretório html dentro de /var/www/ tem o contexto do tipo httpd_sys_content_t. Como vimos antes, o arquivo index.html dentro dele tem o mesmo contexto (ou seja, o contexto do pai):</p>

<pre spellcheck="false" tabindex="0"> drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html </pre>

<p>Essa herança não é preservada quando os arquivos são copiados para outro local. Em uma operação de cópia, o arquivo ou diretório copiado assumirá o contexto de tipo do local de destino. No snippet de código abaixo, estamos copiando o arquivo index.html (com o contexto do tipo "httpd_sys_content_t") para o diretório /var:</p>

<pre spellcheck="false" tabindex="0">$ cp /var/www/html/index.html /var/</pre>

<p>Se verificarmos o contexto do arquivo copiado, veremos que ele mudou para var_t, o contexto de seu diretório pai atual:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /var/index.html</pre>

<pre spellcheck="false" tabindex="0"> -rwxr-xr-x. root root unconfined_u:object_r:var_t:s0   /var/index.html</pre>

<p>Essa mudança de contexto pode ser substituída pela --preserver=contexto cláusula no comando cp.</p>

<p>Quando arquivos ou diretórios são movidos, os contextos originais são preservados. No comando a seguir, estamos movendo o /var/index.html para o diretório /etc/:</p>

<pre spellcheck="false" tabindex="0">$ mv /var/index.html /etc/ </pre>

<p>Quando verificamos o contexto do arquivo movido, vemos que o contexto var_t foi preservado no diretório /etc/:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /etc/index.html </pre>

<pre spellcheck="false" tabindex="0"> -rwxr-xr-x. root root unconfined_u:object_r:var_t:s0   /etc/index.html </pre>

<p>Então, por que estamos tão preocupados com os contextos dos arquivos? Por que esse conceito de copiar e mover é importante? Pense bem: talvez você tenha decidido copiar todos os arquivos HTML do servidor da web para um diretório separado na pasta raiz. Você fez isso para simplificar o processo de backup e também para aumentar a segurança: você não deseja que nenhum hacker adivinhe facilmente onde estão os arquivos do seu site. Você atualizou o controle de acesso do diretório, alterou o arquivo de configuração da web para apontar para o novo local, reiniciou o serviço, mas ainda não funciona. Talvez você possa ver os contextos do diretório e seus arquivos como a próxima etapa de solução de problemas. Vamos executá-lo como um exemplo prático.</p>

<p><strong>SELinux em ação: testando um erro de contexto de arquivo</strong></p>

<p>Primeiro, vamos criar um diretório nomeado www na raiz. Também criaremos uma pasta chamada html em www.</p>

<pre spellcheck="false" tabindex="0">$ mkdir -p /www/html </pre>

<p>Se executarmos o comando ls -Z, veremos que esses diretórios foram criados com o contexto default_t :</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /www/</pre>

<pre spellcheck="false" tabindex="0"> drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 html</pre>

<p>Em seguida, copiamos o conteúdo do diretório /var/www/html para /www/html:</p>

<pre spellcheck="false" tabindex="0">$ cp /var/www/html/index.html /www/html/</pre>

<p>O arquivo copiado terá um contexto de default_t. Esse é o contexto do diretório pai.</p>

<p>Agora, editamos o arquivo httpd.conf para apontar para esse novo diretório como a pasta raiz do site. Também teremos que modificar os direitos de acesso para este diretório.</p>

<pre spellcheck="false" tabindex="0">$ vi /etc/httpd/conf/httpd.conf </pre>

<p>Primeiro comentamos o local existente para a raiz do documento e adicionamos uma nova diretiva DocumentRoot a /www/html:</p>

<pre spellcheck="false" tabindex="0"> # DocumentRoot "/var/www/html"
DocumentRoot "/www/html" </pre>

<p>Também comentamos a seção de direitos de acesso para a raiz do documento existente e adicionamos uma nova seção:</p>

<pre spellcheck="false" tabindex="0">
#
#    AllowOverride None
    # Allow open access:
#    Require all granted
#


    AllowOverride None
    # Allow open access:
    Require all granted

</pre>

<p>Deixamos a localização do diretório cgi-bin como está. Não estamos entrando na configuração detalhada do Apache, aqui nós apenas queremos que nosso site funcione para fins do SELinux.</p>

<p>Por fim, reinicie o daemon httpd:</p>

<pre spellcheck="false" tabindex="0">$ service httpd restart </pre>

<p>Depois que o servidor for reiniciado, o acesso à página da web nos dará o mesmo erro “403 Proibido” (ou a página padrão “Teste 123”) que vimos antes.</p>

<p>O erro está ocorrendo porque o contexto do arquivo index.html foi alterado durante a operação de cópia. Ele precisa ser alterado de volta ao seu contexto original (httpd_sys_content_t).</p>

<p>Mas como nós fazemos isso?</p>

<p><strong>Alterando e restaurando contextos de arquivo SELinux</strong></p>

<p>Em um exemplo de código anterior, vimos dois comandos para alterar o conteúdo do arquivo: chcon e restorecon. Usar chcon é uma medida temporária. Você pode usá-lo para alterar temporariamente os contextos de arquivo ou diretório para solucionar problemas de erros de negação de acesso. No entanto, esse método é apenas temporário: um sistema de arquivos chamado novamente ou executando o comando restorecon reverterá o arquivo para seu contexto original.</p>

<p>Além disso, a execução chcon requer que você conheça o contexto correto para o arquivo; o sinalizador --type especifica o contexto para o destino. restorecon não precisa disso especificado. Se você executar restorecon, o arquivo terá o contexto correto reaplicado e as alterações serão permanentes.</p>

<p>Mas se você não conhece o contexto correto do arquivo, como o sistema sabe qual contexto aplicar quando é executado restorecon?</p>

<p>Convenientemente, o SELinux "lembra" o contexto de cada arquivo ou diretório no servidor. No CentOS 7, os contextos dos arquivos já existentes no sistema são listados no arquivo /etc/selinux/targeted/contexts/files/file_contexts. É um arquivo grande e lista todos os tipos de arquivos associados a todos os aplicativos suportados pela distribuição Linux. Contextos de novos diretórios e arquivos são registrados no arquivo /etc/selinux/targeted/contexts/files/file_contexts.local. Portanto, quando executamos o comando restorecon, o SELinux pesquisará o contexto correto de um desses dois arquivos e o aplicará ao destino.</p>

<p>O trecho de código abaixo mostra uma extração de um dos arquivos:</p>

<pre spellcheck="false" tabindex="0">$ cat /etc/selinux/targeted/contexts/files/file_contexts </pre>

<pre spellcheck="false" tabindex="0">...
/usr/(.*/)?lib(/.*)?    system_u:object_r:lib_t:s0
/opt/(.*/)?man(/.*)?    system_u:object_r:man_t:s0
/dev/(misc/)?agpgart    -c      system_u:object_r:agp_device_t:s0
/usr/(.*/)?sbin(/.*)?   system_u:object_r:bin_t:s0
/opt/(.*/)?sbin(/.*)?   system_u:object_r:bin_t:s0
/etc/(open)?afs(/.*)?   system_u:object_r:afs_config_t:s0
...</pre>

<p>Para alterar permanentemente o contexto do nosso arquivo index.html /www/html, precisamos seguir um processo de duas etapas.</p>

<p>•   Primeiro, executamos o comando semanage fcontext. Isso gravará o novo contexto no arquivo /etc/selinux/targeted/contexts/files/file_contexts.local. Mas não irá rotular novamente o arquivo. Faremos isso nos dois diretórios.</p>

<pre spellcheck="false" tabindex="0">$ semanage fcontext --add --type httpd_sys_content_t "/www(/.*)?"</pre>

<pre spellcheck="false" tabindex="0">$ semanage fcontext --add --type httpd_sys_content_t "/www/html(/.*)?"</pre>

<p>Para garantir, podemos verificar o banco de dados de contexto do arquivo (observe que estamos usando o arquivo file_contexts.local):</p>

<pre spellcheck="false" tabindex="0">$ cat /etc/selinux/targeted/contexts/files/file_contexts.local</pre>

<p>Você deve ver os contextos atualizados:</p>

<pre spellcheck="false" tabindex="0"># This file is auto-generated by libsemanage
# Do not edit directly.</pre>

<pre spellcheck="false" tabindex="0">/www(/.*)?    system_u:object_r:httpd_sys_content_t:s0
/www/html(/.*)?    system_u:object_r:httpd_sys_content_t:s0</pre>

<p>Em seguida, executaremos o comando restorecon. Isso irá rotular novamente o arquivo ou diretório com o que foi gravado na etapa anterior:</p>

<pre spellcheck="false" tabindex="0">$ restorecon -Rv /www</pre>

<p>Isso deve redefinir o contexto em três níveis: o diretório /www de nível superior , o diretório /www/html abaixo dele e o arquivo index.html em /www/html:</p>

<pre spellcheck="false" tabindex="0">restorecon reset /www context unconfined_u:object_r:default_t:s0-&gt;unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /www/html context unconfined_u:object_r:default_t:s0-&gt;unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /www/html/index.html context unconfined_u:object_r:default_t:s0-&gt;unconfined_u:object_r:httpd_sys_content_t:s0</pre>

<p>Se agora tentarmos acessar a página da web, ela deverá funcionar.</p>

<p>Existe uma ferramenta bacana chamada matchpathcon que pode ajudar a solucionar problemas relacionados ao contexto. Este comando examinará o contexto atual de um recurso e o comparará com o listado no banco de dados de contexto do SELinux. Se diferente, sugerirá a alteração necessária. Vamos testar isso com o arquivo /www/html/index.html,Usaremos -V fleg que verifica o contexto:</p>

<pre spellcheck="false" tabindex="0">$ matchpathcon -V /www/html/index.html</pre>

<p>A saída matchpathcon deve mostrar que o contexto é verificado.</p>

<pre spellcheck="false" tabindex="0"> /www/html/index.html verified.</pre>

<p>Para um arquivo rotulado incorretamente, a mensagem dirá qual deve ser o contexto:</p>

<pre spellcheck="false" tabindex="0">/www/html/index.html has context unconfined_u:object_r:default_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 </pre>

<p><strong>Transição de Domínio</strong></p>

<p>Até agora, vimos como os processos acessam os recursos do sistema de arquivos. Agora veremos como os processos acessam outros processos.</p>

<p>Transição de domínio é o método em que um processo altera seu contexto de um domínio para outro. Para entendê-lo, digamos que você tenha um processo chamado proc_a em execução dentro de um contexto de contextta_t. Com a transição do domínio, proc_a pode executar um aplicativo (um programa ou um script executável) chamado app_x que geraria outro processo. Esse novo processo pode ser chamado proc_b e pode estar em execução no domínio contextb_t. Tão efetivamente, contextta_t está fazendo a transição para contextb_t através do app_x. O executável app_x está funcionando como um ponto de entrada para contextb_t.</p>

<p>O caso de transição de domínio é bastante comum no SELinux. Vamos considerar o processo vsftpd em execução no nosso servidor. Se não estiver em execução, podemos executar o comando systemctl start vsftpd para iniciar o daemon.</p>

<p>A seguir, consideramos o processo systemd. Este é o ancestral de todos os processos. Essa é a substituição do processo de inicialização do System V e é executada dentro de um contexto de init_t. :</p>

<pre spellcheck="false" tabindex="0">$ ps -eZ  | grep init</pre>

<pre spellcheck="false" tabindex="0"> system_u:system_r:init_t:s0         1 ?        00:00:02 systemd
system_u:system_r:mdadm_t:s0      773 ?        00:00:00 iprinit </pre>

<p>O processo em execução no domínio init_t é de curta duração: invocará o executável binário /usr/sbin/vsftpd, que possui um contexto de tipo ftpd_exec_t . Quando o executável binário é iniciado, ele se torna o daemon vsftpd e é executado no domínio ftpd_t.</p>

<p>Podemos verificar os contextos de domínio dos arquivos e processos:</p>

<pre spellcheck="false" tabindex="0">$ ls -Z /usr/sbin/vsftpd</pre>

<p>Saída:</p>

<pre spellcheck="false" tabindex="0">-rwxr-xr-x. root root system_u:object_r:ftpd_exec_t:s0 /usr/sbin/vsftpd</pre>

<p>Verificando o processo:</p>

<pre spellcheck="false" tabindex="0">$ ps -eZ | grep vsftpd</pre>

<p>Saída:</p>

<pre spellcheck="false" tabindex="0">system_u:system_r:ftpd_t:s0-s0:c0.c1023 7708 ? 00:00:00 vsftpd</pre>

<p>Portanto, aqui o processo em execução no domínio init_t está executando um arquivo binário com o tipo ftpd_exec_t. Esse arquivo inicia um daemon no domínio ftpd_t.</p>

<p>Essa transição não é algo que o aplicativo ou o usuário possa controlar. Isso foi estipulado na política do SELinux que é carregada na memória quando o sistema é inicializado. Em um servidor que não seja o SELinux, o usuário pode iniciar um processo alternando para uma conta mais poderosa (desde que tenha o direito de fazê-lo). No SELinux, esse acesso é controlado por políticas pré-escritas. E esse é outro motivo pelo qual o SELinux implementa o Controle de Acesso Obrigatório.</p>

<p>A transição de domínio está sujeita a três regras estritas:</p>

<p>•   O processo pai do domínio de origem deve ter a permissão de execução do aplicativo entre os dois domínios (este é o ponto de entrada).<br />
•   O contexto do arquivo para o aplicativo deve ser identificado como um ponto de entrada para o domínio de destino.<br />
•   O domínio original deve ter permissão para fazer a transição para o domínio de destino.</p>

<p>Tomando o exemplo do daemon vsftpd acima, vamos executar o comando sesearch com diferentes opções para verificar se o daemon está em conformidade com essas três regras.</p>

<p>Primeiro, o domínio de origem init_t precisa ter permissão de execução no aplicativo de ponto de entrada com o contexto ftpd_exec_t. Portanto, se executarmos o seguinte comando:</p>

<pre spellcheck="false" tabindex="0">$sesearch -s init_t -t ftpd_exec_t -c file -p execute -Ad </pre>

<p>O resultado mostra que os processos no domínio init_t podem ler, obter atributos, executar e abrir arquivos do contexto ftpd_exec_t:</p>

<pre spellcheck="false" tabindex="0"> Found 1 semantic av rules:
   allow init_t ftpd_exec_t : file { read getattr execute open } ; </pre>

<p>Em seguida, verificamos se o arquivo binário é o ponto de entrada para o domínio de destino ftpd_t:</p>

<pre spellcheck="false" tabindex="0">$ sesearch -s ftpd_t -t ftpd_exec_t -c file -p entrypoint -Ad
</pre>

<p>E de fato é:</p>

<pre spellcheck="false" tabindex="0"> Found 1 semantic av rules:
   allow ftpd_t ftpd_exec_t : file { ioctl read getattr lock execute execute_no_trans entrypoint open } ; </pre>

<p>E, finalmente, o domínio de origem init_t precisa ter permissão para fazer a transição para o domínio de destino ftpd_t:</p>

<pre spellcheck="false" tabindex="0">$ sesearch -s init_t -t ftpd_t -c process -p transition -Ad
</pre>

<p>Como podemos ver abaixo, o domínio de origem tem essa permissão:</p>

<pre spellcheck="false" tabindex="0">Found 1 semantic av rules:
   allow init_t ftpd_t : process transition ;</pre>

<p><strong>Domínios não confinados</strong></p>

<p>Quando introduzimos o conceito de domínios, o comparamos a uma bolha hipotética em torno do processo: algo que estipula o que o processo pode ou não fazer. É isso que limita o processo.</p>

<p>O SELinux também possui processos que são executados em domínios não confinados. Como você pode imaginar, processos não confinados teriam todos os tipos de acesso no sistema. Mesmo assim, esse acesso completo não é arbitrário: o acesso total também é especificado na política do SELinux.</p>

<p>O exemplo de um domínio de processo não confinado seria unconfined_t. Esse é o mesmo domínio que os usuários conectados executam seus processos por padrão. Falaremos sobre usuários e seus acessos para processar domínios nas seções subsequentes.</p>

<p><strong>Conclusão</strong></p>

<p>Cobrimos alguns conceitos muito importantes do SELinux. O gerenciamento de contexto de arquivo e processo está no centro de uma implementação bem-sucedida do SELinux. Como veremos na próxima e última parte desta série, há outra peça do quebra-cabeça restante: o usuário do SELinux.</p>

<p>Até a próxima e ultima parte do artigo.</p>
]]>
        </description>
    </item>
    <item>
        <title>Playbook - Registro de servidores Red Hat no Satellite via Ansible</title>
        <link>https://fedorabr.org/discussion/336/playbook-registro-de-servidores-red-hat-no-satellite-via-ansible</link>
        <pubDate>Tue, 19 Nov 2019 12:05:31 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>ChicoFedora</dc:creator>
        <guid isPermaLink="false">336@/discussions</guid>
        <description><![CDATA[<p>Depois de pesquisar muito e juntar vários módulos, consegui organizar uma forma de registrar vários servidores no Satellite, através do Ansible, este playbook foi criado neste intuito. <br />
Deixo aqui esse registro afim de ajudar outros usuários que por ventura venham a precisar.</p>

<pre spellcheck="false" tabindex="0">
- hosts: all
  gather_facts: no
  tasks:
   - name: Download Katello CA rpm
     get_url:
       url: <a rel="nofollow" href="/home/leaving?allowTrusted=1&amp;target=http%3A%2F%2Fsatellite.example.com%2Fpub%2Fkatello-ca-consumer-latest.noarch.rpm">http://satellite.example.com/pub/katello-ca-consumer-latest.noarch.rpm</a>
       dest: /tmp/katello-ca-consumer-latest.noarch.rpm
       mode: '0440'

   - name: install Katello CA rpm from a local file
     yum:
       name: /tmp/katello-ca-consumer-latest.noarch.rpm
       state: present

   - name: Register with activationkey
     redhat_subscription:
       state: present
       activationkey: rhel7_base
       org_id: example

   - name: Enable all RHSM repositories
     rhsm_repository:
       name: '*'
       state: enabled

   - name: Install Packages
     yum:
       name: 
         - katello-host-tools 
         - katello-host-tools-tracer 
         - katello-agent
         - insights-client
         - puppet
       state: present

   - name: Start and enabled service Puppet agent
     systemd:
       name: puppet
       state: started
       enabled: true

   - name: Start and enabled service katello agent
     systemd:
       name: goferd
       state: started
       enabled: true

   - name: upgrade all packages
     yum:
       name: '*'
       state: latest
</pre>
]]>
        </description>
    </item>
    <item>
        <title>Acesso SSH e SFTP com Virt Manager</title>
        <link>https://fedorabr.org/discussion/327/acesso-ssh-e-sftp-com-virt-manager</link>
        <pubDate>Thu, 07 Nov 2019 18:35:53 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>leandroramos</dc:creator>
        <guid isPermaLink="false">327@/discussions</guid>
        <description><![CDATA[<h2 data-id="liberando-o-acesso-ssh-ao-sistema-guest">Liberando o acesso SSH ao sistema guest</h2>

<p>Vou usar o sistema CentOS 7 para fazer a demonstração. A primeira a ser feita é liberar o acesso por SSH na máquina convidada (Guest), no caso, a máquina virtual CentOS que está rodando no virt-manager.</p>

<p>No terminal da máquina virtual, edite o arquivo <strong>/etc/ssh/sshd_config</strong><br /><strong>Obs.:</strong> eu uso sudo, mas você pode usar o login de root se preferir. E também pode usar outro editor de textos (como nano, jed ou outro que seja mais amigável para a sua necessidade). Não se prenda ao editor usado no tutorial.</p>

<p><code spellcheck="false" tabindex="0">sudo vi /etc/ssh/sshd_config</code></p>

<p><img src="https://fedorabr.org/uploads/editor/xo/lhlb1fcpcyuv.png" alt="" title="" /></p>

<p>Remova o comentário da linha "Port 22" (remova o caractere #). Você pode mudar o número da porta também, e é aconselhável que o faça a menos que tenha algum redirecionamento de portas antes de chegar à sua máquina. Salve o arquivo.</p>

<p><img src="https://fedorabr.org/uploads/editor/b8/zbqv93kbukbt.png" alt="" title="" /></p>

<h2 data-id="criando-a-rede-para-conectar-a-maquina-virtual">Criando a rede para conectar a máquina virtual</h2>

<p>Caso você não tenha criado a rede antes, desligue a máquina virtual e crie uma rede no virt-manager.</p>

<p><code spellcheck="false" tabindex="0">systemctl poweroff -i</code></p>

<p><img src="https://fedorabr.org/uploads/editor/zb/gco5raeptj9o.png" alt="" title="" /></p>

<p>Abra o virt-manager e clique no menu "Editar" -&gt; "Detalhes da conexão"</p>

<p><img src="https://fedorabr.org/uploads/editor/zx/w3cgu4395uq2.png" alt="" title="" /></p>

<p>Na aba "Redes Virtuais", clique no botão + para adicionar uma nova <br />
rede.</p>

<p><img src="https://fedorabr.org/uploads/editor/vf/qfjmso8zw0fy.png" alt="" title="" /></p>

<h3 data-id="passo-1-de-4">Passo 1 de 4</h3>

<p>Coloque o nome que desejar na nova rede e clique em "Avançar".</p>

<p><img src="https://fedorabr.org/uploads/editor/4t/yxxrzjkkmyiu.png" alt="" title="" /></p>

<h3 data-id="passo-2-de-4">Passo 2 de 4</h3>

<p>Nas definições de IPv4, as opções padrão nos servirão para o tutorial. Você pode testar algo mais detalhado se quiser se aprofundar no assunto.</p>

<p><img src="https://fedorabr.org/uploads/editor/ow/vfswkcgp77gl.png" alt="" title="" /></p>

<h3 data-id="passo-3-de-4">Passo 3 de 4</h3>

<p>Não é necessário configurar o IPv6 para o tutorial.</p>

<p><img src="https://fedorabr.org/uploads/editor/82/kdll2eptizkx.png" alt="" title="" /></p>

<h3 data-id="passo-4-de-4">Passo 4 de 4</h3>

<p>Selecione a opção "Encaminhado à rede física", o destino e o modo. <br />
Escolha o destino "Qualquer dispositivo físico" e o modo "NAT" e clique em "Concluir".</p>

<p><img src="https://fedorabr.org/uploads/editor/4h/bnignrk0wc2w.png" alt="" title="" /></p>

<h2 data-id="configurando-a-maquina-virtual-para-usar-a-nova-rede">Configurando a máquina virtual para usar a nova rede</h2>

<p>Na janela principal do virt-manager, clique no sistema centos7 (ou no sistema em que você estiver configurando) e clique no botão "Abrir".</p>

<p><img src="https://fedorabr.org/uploads/editor/vg/eiomnve9me45.png" alt="" title="" /></p>

<p>Nas configurações da máquina, clique em "NIC", escola a rede apropriada no item "Fonte de Rede" e clique em "Aplicar".</p>

<p><img src="https://fedorabr.org/uploads/editor/6i/b6hmava8pe6y.png" alt="" title="" /></p>

<p>Clique no console gráfico e no Play para iniciar a máquina virtual.</p>

<p><img src="https://fedorabr.org/uploads/editor/pr/eckp9onzudqv.png" alt="" title="" /></p>

<h2 data-id="verificando-a-rede-da-maquina-virtual">Verificando a rede da máquina virtual</h2>

<p>Faça login no console da máquina virtual e certifique-se de obter um IP via DHCP (ou configure IP Fixo se desejar, isso foge do meu escopo no momento).</p>

<p><code spellcheck="false" tabindex="0">sudo dhclient</code></p>

<p>Verifique seu IP com o comando abaixo:</p>

<p><code spellcheck="false" tabindex="0">ip a</code></p>

<p><img src="https://fedorabr.org/uploads/editor/uh/y3jms17tq6ez.png" alt="" title="" /></p>

<h2 data-id="acessando-a-vm-por-ssh">Acessando a VM por SSH</h2>

<p>No sistema Host, abra um emulador de terminal e digite o comando<br /><code spellcheck="false" tabindex="0">ssh seuusuario@192.168.100.149</code><br /><strong>Adapte o comando acima às suas necessidades</strong></p>

<p><img src="https://fedorabr.org/uploads/editor/oc/s94sgxtm9758.png" alt="" title="" /></p>

<h2 data-id="criando-um-nome-amigavel-para-o-host">Criando um nome amigável para o host</h2>

<p>Para facilitar seu login via SSH, você pode criar um nome para a máquina virtual no arquivo /etc/hosts <strong>da sua máquina Host</strong>.</p>

<p><code spellcheck="false" tabindex="0">sudo vi /etc/hosts</code><br /><strong>Obs.: use seu editor preferido</strong></p>

<p><img src="https://fedorabr.org/uploads/editor/ze/f3b19gveg13s.png" alt="" title="" /></p>

<p>Após configurar o nome no arquivo de hosts, você poderá acessar o servidor na máquina virtual usando o nome criado no lugar do IP, facilitando a digitação e possibilitando o uso da tecla TAB para autocompletar o comando:</p>

<p><code spellcheck="false" tabindex="0">ssh seuusuario@centos</code></p>

<p><img src="https://fedorabr.org/uploads/editor/6h/xbl513y0neai.png" alt="" title="" /></p>

<h2 data-id="acessando-o-servidor-virtual-pelo-gerenciador-de-arquivos">Acessando o servidor virtual pelo gerenciador de arquivos</h2>

<p>Abra seu gerenciador de arquivos preferido (vou usar o Nautilus aqui) para acessar o servidor. Para isso, digite o caminho <strong>s<a rel="nofollow" href="/home/leaving?allowTrusted=1&amp;target=ftp%3A%2F%2Fcentos">ftp://centos</a></strong> no campo de endereços do gerenciador de arquivos (você deve encontrar a opção aí no seu gerenciador preferido).</p>

<p><img src="https://fedorabr.org/uploads/editor/t7/m57yzgxvafk5.png" alt="" title="" /><br /><img src="https://fedorabr.org/uploads/editor/i8/xe1xa93yjx1l.png" alt="" title="" /></p>

<p>Você pode adicionar um marcador para o servidor no seu gerenciador de arquivos.<br /><img src="https://fedorabr.org/uploads/editor/s9/eq8iklr5qbz8.png" alt="" title="" /><br /><img src="https://fedorabr.org/uploads/editor/cx/7r2po7fz914m.png" alt="" title="" /></p>

<p>Até o próximo tutorial!</p>
]]>
        </description>
    </item>
    <item>
        <title>Instalando e configurando o MySQL no Fedora 31</title>
        <link>https://fedorabr.org/discussion/310/instalando-e-configurando-o-mysql-no-fedora-31</link>
        <pubDate>Sat, 02 Nov 2019 18:08:13 +0000</pubDate>
        <category>Servidores</category>
        <dc:creator>leandroramos</dc:creator>
        <guid isPermaLink="false">310@/discussions</guid>
        <description><![CDATA[<h2 data-id="adicionando-o-repositorio-do-mysql">Adicionando o repositório do MySQL</h2>

<p>Faça o download do repositório MySQL em <a rel="nofollow" href="/home/leaving?allowTrusted=1&amp;target=https%3A%2F%2Fdev.mysql.com%2Fdownloads%2Frepo%2Fyum%2F">https://dev.mysql.com/downloads/repo/yum/</a><br /><img src="https://fedorabr.org/uploads/editor/su/tcaioxq29e5z.png" alt="Download do repositório MySQL" title="" /></p>

<h2 data-id="instalando-o-repositorio-do-mysql">Instalando o repositório do MySQL</h2>

<p>Para instalar o repositório, abra seu gerenciador de arquivos e faça a instalação do pacote usando seu gerenciador de pacotes preferido.</p>

<p><img src="https://fedorabr.org/uploads/editor/ek/123phdm72y3h.png" alt="" title="" /><br /><img src="https://fedorabr.org/uploads/editor/a4/21q7td68bp62.png" alt="" title="" /></p>

<p>Se você preferir (meu caso), pode instalar pela linha de comando:</p>

<p><img src="https://fedorabr.org/uploads/editor/ec/sbsoemrb0tl2.png" alt="" title="" /></p>

<h2 data-id="instalando-o-mysql-server-community">Instalando o MySQL Server Community</h2>

<p>Com o seu gerenciador de pacotes predileto, busque pelo mysql-community-server e faça a instalação.</p>

<p><img src="https://fedorabr.org/uploads/editor/h0/lk9qn6dzd6tf.png" alt="" title="" /><br /><img src="https://fedorabr.org/uploads/editor/ns/m6uf1zcci98l.png" alt="" title="" /></p>

<p>Claro, se preferir, instale pela linha de comando:</p>

<p><img src="https://fedorabr.org/uploads/editor/qv/dft870or28me.png" alt="" title="" /><br /><img src="https://fedorabr.org/uploads/editor/fy/41yce3l7fok1.png" alt="" title="" /></p>

<h2 data-id="iniciando-o-servico-do-mysql">Iniciando o serviço do MySQL</h2>

<p><code spellcheck="false" tabindex="0">sudo systemctl start mysqld</code></p>

<p>Se quiser que o servidor MySQL inicie junto com o sistema, habilite-o no Systemd</p>

<p><code spellcheck="false" tabindex="0">sudo systemctl enable mysqld</code></p>

<p><img src="https://fedorabr.org/uploads/editor/pq/jm4nsfxtdnsj.png" alt="" title="" /></p>

<h2 data-id="configurando-o-mysql">Configurando o MySQL</h2>

<p>Durante a instalação do mysql-community-server, uma senha aleatória é gerada para o usuário root. Você precisa recuperar a senha inicial para poder configurar uma nova senha. Use o comando abaixo:</p>

<p><code spellcheck="false" tabindex="0">sudo grep 'A temporary password is generated' /var/log/mysqld.log | tail -1</code><br /><img src="https://fedorabr.org/uploads/editor/4f/m05lsjql6dko.png" alt="" title="" /></p>

<p>Use a senha gerada na configuração do MySQL:</p>

<p><code spellcheck="false" tabindex="0">sudo mysql_secure_installation</code></p>

<p>No campo da senha do root, coloque a senha gerada no comando anterior e altere a senha do root. Mas atenção: use uma senha forte (maiúsculas, minúsculas, números e símbolos), pois o validador de senhas do MySQL é exigente e eu NÃO RECOMENDO que você mude isso.</p>

<p><img src="https://fedorabr.org/uploads/editor/gj/zrxn5djfpn1v.png" alt="" title="" /></p>

<p>Após a configuração inicial você poderá logar no MySQL com a nova senha.</p>

<h2 data-id="criando-um-usuario-administrador">Criando um usuário administrador</h2>

<p>Faça login no MySQL com o root</p>

<p><code spellcheck="false" tabindex="0">mysql -u root -p</code></p>

<p><img src="https://fedorabr.org/uploads/editor/5j/2ngs3yv1932w.png" alt="" title="" /></p>

<p>Crie um usuário para tarefas administrativas (é melhor do que usar o root para tudo)</p>

<p><code spellcheck="false" tabindex="0">use mysql;</code><br /><code spellcheck="false" tabindex="0">create user 'leandro'@'localhost' identified by 'S3nh4@forte';</code><br /><code spellcheck="false" tabindex="0">grant all privileges on *.* to 'leandro'@'localhost';</code><br /><code spellcheck="false" tabindex="0">flush privileges;</code><br /><code spellcheck="false" tabindex="0">exit</code></p>

<p><img src="https://fedorabr.org/uploads/editor/1w/233g4angfxjj.png" alt="" title="" /></p>

<p>Faça o login com o seu usuário administrador</p>

<p><code spellcheck="false" tabindex="0">mysql -u leandro -p</code></p>

<p><img src="https://fedorabr.org/uploads/editor/wq/1oyo5d5jjmgp.png" alt="" title="" /></p>

<h2 data-id="administrando-o-servidor-com-ferramentas-graficas">Administrando o servidor com ferramentas gráficas</h2>

<p>Você pode instalar ferramentas gráficas para administrar seus bancos de dados. Minha preferida é DBeaver Community Edition - tutorial de instalação: <a href="https://fedorabr.org/index.php?p=/discussion/305/instalando-o-cliente-de-bancos-de-dados-dbeaver-community-edition/" rel="nofollow">https://fedorabr.org/index.php?p=/discussion/305/instalando-o-cliente-de-bancos-de-dados-dbeaver-community-edition/</a></p>
]]>
        </description>
    </item>
   </channel>
</rss>
