terça-feira, 13 de setembro de 2011

Colocar o Samba a funcionar com o SELinux

Antes de mais nada: SELinux é uma camada de proteção do sistema operacional. Procurem resistir à tentação de desabilita-lo!

Quando a pasta encontra-se dentro de qualquer pasta dentro do /home é tranquilo, habilite o boleano samba_enable_home_dirs.

# setsebool -P samba_enable_home_dirs 1

Porém quando é fora do /home, o SELinux bloqueará o acesso.

Por exemplo, vamos usar este /etc/samba/smb.conf:

[global]
    workgroup = GRUPO
    server string =
    security = SHARE
    max log size = 0
    load printers = No

[Arquivos]
    path = /arquivos
    read only = No
    guest ok = Yes

(ver Guia de configuração do Samba não-PDC para uma configuração mais completa)

E criar a pasta /arquivos com tudo liberado:

# mkdir -m 0777 /arquivos

Tudo aparenta certo. O Samba está rodando no modo SHARE, quando não pede autenticação para os clientes e a pasta que estamos compartilhando está com permissão 0777, de leitura, escrita e execução para dono, grupo e outros (o Samba no modo SHARE acessa o sistema de arquivos por padrão com a conta nobody). Além disso, o firewall foi corretamente configurado para liberar o Samba. Contudo, continua não funcionando.

Falta configurar o rótulo da pasta que criamos. Para liberar acesso ao Samba, existem três opções:

samba_share_t → libera acesso leitura/escrita para o Samba
public_content_t → acesso somente leitura para o Samba e outros daemons que eventualmente você queira que acessem a mesma pasta
public_content_rw_t → idem acima mas com acesso leitura/escrita

Os dois últimos rótulos são úteis quando você quer, por exemplo, que o Samba e o Apache acessem a mesma pasta. Com public_content_rw_t, é preciso configurar um boleano específico para cada daemon, como allow_smbd_anon_write (Samba), allow_httpd_anon_write (Apache/lighttpd), allow_ftpd_anon_write (servidores FTP), entre outros (getsebool -a dá a lista completa).

No meu caso, apenas o Samba acessará a pasta, então ficarei com o primeiro.

Primeiro, verifique o rótulo de cada pasta/arquivo adicionando a opção -Z ao ls:

# ls -lZ /arquivos
# ls -ldZ /arquivos

MODO TEMPORÁRIO (útil para testes)

# chcon -R -t samba_share_t /arquivos

Com o chcon, o rótulo é alterado, mas não resiste a futuros relabels.

MODO DEFINITIVO

# semanage fcontext -a -t samba_share_t '/arquivos(/.*)?'
# restorecon -FRv /arquivos

Para quem tem instalações mínimas do CentOS, Fedora, Scientific Linux, o semanage não vem instalado. Faz parte do pacote policycoreutils-python.

Com semanage fcontext, a ferramenta edita o arquivo /etc/selinux/targeted/contexts/files/file_contexts.local, adiciona o novo rótulo e associa-o ao caminho especificado.

restorecon -FRv efetua um relabel na pasta especificada aplicando a configuração personalizada que definimos acima.

RESTAURAR RÓTULO PADRÃO

# semanage fcontext -d '/arquivos(/.*)?'
# restorecon -FRv /arquivos

O arquivo file_contexts.local não deve ser editado manualmente. Use semanage fcontext -d <caminho> para remover personalizações locais (ou semanage fcontext -D para remover todas de uma vez só) e rode o restorecon para fazer novo relabel, voltando ao padrão do sistema.

Os manuais da Red Hat são uma boa fonte de informação: SELinux User's and Administrator's Guide - 4.7. SELinux Contexts – Labeling Files

Nenhum comentário:

Postar um comentário