Como obtenho o SELinux para permitir o Apache e o Samba na mesma pasta?

26

Na configuração que eu configurei, desejo permitir que o samba e o apache acessem / var / www. Sou capaz de definir um contexto para permitir o acesso ao samba, mas o httpd não tem acesso. Usar setenforce como 0 elimina problemas, então eu sei que é o SELinux.

Além disso: como posso visualizar o contexto de uma pasta e uma pasta pode ter vários contextos?

(CentOS)

Joshua Enfield
fonte
Você já tentou usar a opção booleana de system-config-selinux?

Respostas:

39

Primeiro, você pode ver o contexto de algo com ls usando ls -Z

[root@servername www]# ls -dZ /var/www
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www

Segundo, existem duas opções para conceder acesso ao Samba e Apache no mesmo diretório.

A maneira mais simples é permitir apenas o acesso de leitura / gravação do samba em qualquer lugar com:

setsebool -P samba_export_all_rw 1

É simples, fácil e não mexe com nenhuma propriedade estranha do SELinux.

Se você está preocupado com o Samba ter acesso total a todos os diretórios e só deseja alterar / var / www, tente:

chcon -t public_content_rw_t /var/www
setsebool -P allow_smbd_anon_write 1
setsebool -P allow_httpd_anon_write 1

Isso permitirá que o Samba e o Apache gravem acesso a qualquer diretório com o contexto public_content_rw_t. Note que o chcon está apenas modificando / var / www. Quaisquer novos diretórios criados em / var / www serão public_content_rw_t, mas não os diretórios existentes como / var / www / html ou / var / www / manual. Se você quiser mudar tudo, adicione -R ao chcon:

chcon -R -t public_content_rw_t /var/www

Você pode consultar esta página wiki do CentOS para obter dicas sobre outros booleanos do SELinux.

David
fonte
Eu tentei isso e reclama que um contexto já está definido.
Joshua Enfield
Você está certo, parece que as coisas mudaram desde a última vez que eu brinquei com o SELinux. Vou atualizar minha resposta com algumas outras opções.
David
3
@Dave você salvou minha bunda. Vejo você no trabalho amanhã.
Joel E Salas
Queria mencionar que, se o seu webroot estiver aninhado em um compartilhamento de samba, você também precisará definir o contexto nos diretórios pai. Por exemplo:chcon -t public_content_rw_t /mnt/share/webroot(/.*)? chcon -t public_content_rw_t /mnt/share
Greg Sheremeta
11
Obrigado, eu estava lutando com algo semelhante, mas com ftp, e tudo funciona depois de fazersetsebool -P ftpd_full_access=1
giorgiline
9
SHARING FILES
   If you want to share files with multiple domains (Apache,  FTP,  rsync,
   Samba),  you can set a file context of public_content_t and public_content_rw_t.
   These context allow any of the above domains  to  read  the
   content.   If  you want a particular domain to write to the public_con‐
   tent_rw_t   domain,   you   must   set   the    appropriate    boolean.
   allow_DOMAIN_anon_write.  So for samba you would execute:

       setsebool -P allow_smbd_anon_write=1

Por exemplo:

semanage fcontext -a -t public_content_rw_t '/var/www(/.*)?'
restorecon -R /var/www
setsebool -P allow_smbd_anon_write 1
hm2k
fonte