Corriger un contexte SELinux pour Samba


J’utilise un service Samba de partage de fichiers qui tourne sur un serveur CentOS 8.2 dans un container avec Podman 1.6.4.

Serveur CentOS 8.2 :

[moore@neuralux stackdata]$ cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core) 

Kernel:

[moore@neuralux stackdata]$ uname -a
Linux neuralux.lan.moore.com 4.18.0-193.19.1.el8_2.x86_64 #1 SMP Sat Sep 12 14:37:00 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Tout cela fonctionnait correctement mais j’ai été bloqué un jour sur un fichier qui refusait de s’écrire avec Samba:

Unable to save /Volumes/git/stackdata/name.html
Error: Permission denied

J’utilise un éditeur Sublime Text sous Mac OS qui accès via le réseau au service de partage de fichiers Samba sur mon serveur Linux.

Erreur Sublime text avec Samba
Erreur Sublime text avec Samba

Analyse

Allons regarder les droits sur le serveur. Les permissions, utilisateurs et groupe sont bons :

[moore@neuralux stackdata]$ ls -la *.html
-rw-rw-r--. 1 moore moore  165 Sep  9 21:09 about.html
-rw-rw-r--. 1 moore moore  825 Oct  4 15:38 name.html
-rw-rw-r--. 1 moore moore  763 Sep  9 21:09 search.html

Pas d’attribut unwritable :

[moore@neuralux stackdata]$ lsattr *.html
-------------------- about.html
-------------------- name.html
-------------------- search.html

Controllons maintenant le context SELinux:

[moore@neuralux stackdata]$ ls -laZ *.html
-rw-rw-r--. 1 moore moore unconfined_u:object_r:samba_share_t:s0  165 Sep  9 21:09 about.html
-rw-rw-r--. 1 moore moore unconfined_u:object_r:user_tmp_t:s0     825 Oct  4 15:38 name.html
-rw-rw-r--. 1 moore moore unconfined_u:object_r:samba_share_t:s0  763 Sep  9 21:09 search.html

Bingo, le problème vient de SELinux. Je me rappelle avoir copier ce fichier à partir du dossier /tmp. Lorsque l’on créé un fichier dans le dossier /tmp, il hérite du contexte “user_tmp_t” par défaut.

Vérifions que SELinux est bien activé sur ce système :

[moore@neuralux stackdata]$ getenforce
Enforcing

[moore@neuralux stackdata]$  grep SELINUX= /etc/selinux/config
# SELINUX= can take one of these three values:
SELINUX=enforcing

Correction du problème

Nous allons lancer la commande “semanage fcontext -a -t samba_share_t” afin de changer le type en “samba_share_t”. L’option -a va ajouter une nouvelle entrée et l’option -t option va définir le type “samba_share_t”. Cette commande ne va pas directement changer le type :

[moore@neuralux stackdata]$ sudo semanage fcontext -a -t samba_share_t  /opt/git/stackdata/name.html

La commande semanage fcontext ajoute une entrée dans le fichier de contexte local /etc/selinux/targeted/contexts/files/file_contexts.local :

[moore@neuralux stackdata]$ sudo cat /etc/selinux/targeted/contexts/files/file_contexts.local 
# This file is auto-generated by libsemanage
# Do not edit directly.
/opt/git/stackdata/name.html    system_u:object_r:samba_share_t:s0

Changeons maintenant le type avec la commande restorecon :

[moore@neuralux stackdata]$ restorecon -v name.html 
Relabeled /opt/git/stackdata/name.html from unconfined_u:object_r:user_tmp_t:s0 to unconfined_u:object_r:samba_share_t:s0

Vérifions le nouveau contexte :

[moore@neuralux stackdata]$ ls -Zla *.html
-rw-rw-r--. 1 moore moore unconfined_u:object_r:samba_share_t:s0  165 Sep  9 21:09 about.html
-rw-rw-r--. 1 moore moore unconfined_u:object_r:samba_share_t:s0  825 Oct  4 15:51 name.html
-rw-rw-r--. 1 moore moore unconfined_u:object_r:samba_share_t:s0  763 Sep  9 21:09 search.html

Le problème est traité, Samba peut maintenant écrire sans erreur \o/


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

EN | FR | ES

Recherche