
Estoy escribiendo código compatible con SELinux. Soy nuevo en este módulo de seguridad y estoy teniendo una curva de aprendizaje pronunciada.
Para que mi código funcione en un entorno SELinux, necesito poder volver a etiquetar archivos. Por ejemplo, estoy montando sistemas de archivos temporales y quiero restaurar la etiqueta original después de realizar el montaje.
Obviamente necesito ser root (tener capacidad CAP_SYS_ADMIN) para la parte de montaje, pero ¿necesito ser root para la parte de reetiquetado?
En Fedora puedo volver a etiquetar archivos de mi propiedad, por ejemplo, puedo hacer lo siguiente como usuario sin privilegios:
$ touch /tmp/test
$ ls -Z /tmp/test
unconfined_u:object_r:user_tmp_t:s0 /tmp/test
$ chcon system_u:object_r:etc_t:s0 /tmp/test
$ ls -Z /tmp/test
system_u:object_r:etc_t:s0 /tmp/test
Parece que no hay permiso para volver a etiquetar archivos propiedad de un usuario diferente.
Pero ahora encontré lo siguiente en RedHatmanual:
La política de SELinux controla si los usuarios pueden modificar el contexto de SELinux para cualquier archivo determinado.
lo que parece indicar que este comportamiento es realmente configurable y que no puedo confiar en poder volver a etiquetar archivos de mi propiedad.
EDITAR:
Parece que Fedora implementa esto usando constraints
.
# dnf install setools-console
# seinfo --constrain
...
constrain file {relabelto create relabelfrom } (u1 == u2 or ( t1 == can_change_object_identity ));
...