¿Cómo consigo SELinux para permitir Apache y Samba en la misma carpeta?

26

En la configuración que tengo, deseo permitir que samba y apache accedan a / var / www. Puedo establecer un contexto para permitir el acceso a samba, pero luego httpd no tiene acceso. El uso de setenforce a 0 elimina los problemas, así que sé que es SELinux.

Además: ¿Cómo puedo ver el contexto de una carpeta, y puede una carpeta tener múltiples contextos?

(CentOS)

Joshua Enfield
fuente
¿Has intentado usar la opción booleana de system-config-selinux?

Respuestas:

39

En primer lugar, puede ver el contexto de algo con 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

En segundo lugar, hay dos opciones para dar acceso a Samba y Apache al mismo directorio.

La manera simple es permitir el acceso de lectura / escritura de samba a todas partes con:

setsebool -P samba_export_all_rw 1

Es simple, fácil y no se mete con ninguna propiedad extraña de SELinux.

Si le preocupa que Samba tenga acceso completo a todos los directorios y solo quiera cambiar / var / www, intente:

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

Esto permitirá el acceso de escritura de Samba y Apache a cualquier directorio con el contexto public_content_rw_t. Tenga en cuenta que chcon solo está modificando / var / www. Cualquier directorio nuevo creado en / var / www será public_content_rw_t, pero no los directorios existentes como / var / www / html o / var / www / manual. Si desea cambiar todo, agregue un -R a chcon:

chcon -R -t public_content_rw_t /var/www

Puede consultar esta página wiki de CentOS para obtener pistas sobre otros booleanos de SELinux.

David
fuente
Intenté esto y se queja de que un contexto ya está definido.
Joshua Enfield
Tienes razón, parece que las cosas han cambiado desde la última vez que me metí con SELinux. Actualizaré mi respuesta con algunas otras opciones.
David
3
@Dave me salvaste el trasero. Nos vemos en el trabajo mañana.
Joel E Salas
Quería mencionar que si su raíz web está anidada en un recurso compartido de samba, también necesitará establecer el contexto en los directorios principales. Por ejemplo:chcon -t public_content_rw_t /mnt/share/webroot(/.*)? chcon -t public_content_rw_t /mnt/share
Greg Sheremeta
1
Gracias, estaba luchando con algo similar pero con ftp, y todo funciona después de hacerlosetsebool -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 ejemplo:

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