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
Porém quando é fora do
Por exemplo, vamos usar este
(ver Guia de configuração do Samba não-PDC para uma configuração mais completa)
E criar a pasta
Aparenta estar certo. Acessos não autenticados usarão a conta
Falta configurar o rótulo da pasta que criamos. Para liberar acesso ao Samba, existem três opções:
Os dois últimos rótulos são úteis quando você quer, por exemplo, que o Samba e o Apache acessem a mesma pasta. Com
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
MODO TEMPORÁRIO (útil para testes)
Com o
MODO DEFINITIVO
Para quem tem instalações mínimas do CentOS ou Fedora,
Com
RESTAURAR RÓTULO PADRÃO
O arquivo
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
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 = logging = systemd map to guest = Bad User 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
Aparenta estar certo. Acessos não autenticados usarão a conta
nobody
, que poderá escrever em /arquivos
. 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 Sambapublic_content_t
→ acesso somente leitura para o Samba e outros daemons que eventualmente você queira que acessem a mesma pastapublic_content_rw_t
→ idem acima mas com acesso leitura/escritaOs 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 ou Fedora,
semanage
não vem instalado. Faz parte dos pacotes policycoreutils-python
(até CentOS 7) ou policycoreutils-python-utils
(CentOS 8+ e Fedora).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
Fantastico, muito obrigado pelo post, muito útil!
ResponderExcluir