Comment obtenir SELinux pour autoriser Apache et Samba sur le même dossier?

26

Dans la configuration que j'ai configurée, je souhaite autoriser samba et apache à accéder à / var / www. Je peux définir un contexte pour autoriser l'accès à samba, mais httpd n'y a pas accès. L'utilisation de setenforce à 0 élimine les problèmes, donc je sais que c'est SELinux.

En outre: Comment puis-je afficher le contexte d'un dossier et un dossier peut-il avoir plusieurs contextes?

(CentOS)

Joshua Enfield
la source
Avez-vous essayé d'utiliser l'option booléenne de system-config-selinux?

Réponses:

39

Tout d'abord, vous pouvez afficher le contexte de quelque chose avec ls en utilisant ls -Z

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

Deuxièmement, il existe deux options pour donner à Samba et Apache l'accès au même répertoire.

Le moyen le plus simple est de permettre un accès en lecture / écriture à Samba partout avec:

setsebool -P samba_export_all_rw 1

C'est simple, facile et ne dérange pas les propriétés étranges de SELinux.

Si vous souhaitez que Samba ait un accès complet à tous les répertoires et que vous souhaitez uniquement modifier / var / www, essayez:

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

Cela permettra à la fois à Samba et à Apache d'accéder en écriture à tous les répertoires avec le contexte public_content_rw_t. Notez que chcon modifie uniquement / var / www. Tout nouveau répertoire créé sous / var / www sera public_content_rw_t, mais pas les répertoires existants comme / var / www / html ou / var / www / manual. Si vous voulez tout changer, ajoutez un -R à chcon:

chcon -R -t public_content_rw_t /var/www

Vous pouvez parcourir cette page wiki CentOS pour obtenir des conseils sur d'autres booléens SELinux.

David
la source
J'ai essayé cela et il se plaint qu'un contexte est déjà défini.
Joshua Enfield
Vous avez raison, il semble que les choses ont changé depuis la dernière fois que j'ai joué avec SELinux. Je mettrai à jour ma réponse avec quelques autres options.
David
3
@Avez-vous sauvé mes fesses. Rendez-vous au travail demain.
Joel E Salas du
Je voulais mentionner que si votre racine Web est imbriquée dans un partage samba, vous devrez également définir le contexte sur les répertoires parents. Par exemple:chcon -t public_content_rw_t /mnt/share/webroot(/.*)? chcon -t public_content_rw_t /mnt/share
Greg Sheremeta
1
Merci, je me débattais avec quelque chose de similaire mais avec ftp, et tout fonctionne après l'avoir faitsetsebool -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

Par exemple:

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