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