« LINUX:SELinux » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(15 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 14 : | Ligne 14 : | ||
* <nowiki>https://debian-handbook.info/browse/fr-FR/stable/sect.selinux.html</nowiki> | * <nowiki>https://debian-handbook.info/browse/fr-FR/stable/sect.selinux.html</nowiki> | ||
* <nowiki>https://documentation.suse.com/sles/12-SP5/html/SLES-all/cha-selinux.html</nowiki> | * <nowiki>https://documentation.suse.com/sles/12-SP5/html/SLES-all/cha-selinux.html</nowiki> | ||
Et si vous voulez aller plus loin: | |||
* <nowiki>https://selinuxproject.org/page/Main_Page</nowiki> | |||
* <nowiki>https://edu.anarcho-copy.org/GNU%20Linux%20-%20Unix-Like/SELINUX_SYSTEM_ADMINISTRATION_SECOND_EDITION.pdf</nowiki> | |||
Il en existe bien d'autres. | Il en existe bien d'autres. | ||
Ligne 50 : | Ligne 53 : | ||
Le fichier de configuration central est "/etc/selinux/config". | Le fichier de configuration central est "/etc/selinux/config". | ||
L'option "SELINUX" possède trois états: | |||
* '''disable''' : SELinux est désactivé, non opérationnel; c'est l'état que j'ai longtemps utilisé comme de nombreux autres administrateurs afin d'éviter les difficultés de mise en oeuvre. | * '''disable''' : SELinux est désactivé, non opérationnel; c'est l'état que j'ai longtemps utilisé comme de nombreux autres administrateurs afin d'éviter les difficultés de mise en oeuvre. | ||
* '''permissive''' : SELinux est activé, les règles sont testées mais non appliquées. Si une règle n'est pas respectée, un message d'erreur est ajoutée aux journaux mais aucun blocage n'est effectué. | * '''permissive''' : SELinux est activé, les règles sont testées mais non appliquées. Si une règle n'est pas respectée, un message d'erreur est ajoutée aux journaux mais aucun blocage n'est effectué. | ||
Ligne 56 : | Ligne 59 : | ||
Dans un premier temps, nous utiliserons l'état "'''permissive'''" afin de nous familiariser avec SELinux et de régler à notre aise les différents problèmes. Quand le système nous semblera stable, on passera à l'état "enforcing". | Dans un premier temps, nous utiliserons l'état "'''permissive'''" afin de nous familiariser avec SELinux et de régler à notre aise les différents problèmes. Quand le système nous semblera stable, on passera à l'état "enforcing". | ||
Ligne 67 : | Ligne 67 : | ||
Nous laissons le niveau par défaut "'''targeted'''", installé par défaut, qui permet sur nos serveurs de surveiller les différents services. Notre but n'est pas de créer une politique de sécurité complète mais d'utiliser celles mise en place par la distribution et d'adapter certaines règles découlant d'imperfections ou de nos personnalisations de la configuration de base. | Nous laissons le niveau par défaut "'''targeted'''", installé par défaut, qui permet sur nos serveurs de surveiller les différents services. Notre but n'est pas de créer une politique de sécurité complète mais d'utiliser celles mise en place par la distribution et d'adapter certaines règles découlant d'imperfections ou de nos personnalisations de la configuration de base. | ||
Toute autre modification du paramétrage devra se faire au travers de commandes de ligne et jamais dans d'autres fichiers. | |||
Pour information, on peut trouver diverses informations sur SELinux dans les répertoires "/etc/selinux", "/var/lib/selinux" et "/sys/fs/selinux". | |||
Ligne 77 : | Ligne 81 : | ||
systemctl start rsyslog.service | systemctl start rsyslog.service | ||
systemctl status rsyslog.service | systemctl status rsyslog.service | ||
Ces services sont cruciaux, ce sont eux qui vont recueillir les messages et alertes. | |||
Ligne 85 : | Ligne 90 : | ||
On | On doit redémarrer la machine. Ce n'est qu'à cette condition que l'on pourra effectuer les commandes suivantes. C'est pour cette raison que nous n'avons pas commencé par une explication succincte de quelques base de SELinux car nous n'aurions pu les montrer par l'exemple. | ||
=Changement d'état à la volée= | |||
Au démarrage l'état "permissive" ou "enforcing" est défini selon le fichier de configuration "/etc/selinux/config". Mais il est possible de passer de l'un à l'autre interactivement sans devoir redémarrer le système. | |||
La commande suivante permet de passer à l'état "permissive": | |||
setenforce 0 | |||
Et inversement pour passer à l'état "enforcing": | |||
setenforce 1 | |||
A tout moment, il est possible de connaitre l'état de SELinux via la commande: | |||
sestatus | |||
qui donne: | |||
---- | |||
SELinux status: enabled | |||
SELinuxfs mount: /sys/fs/selinux | |||
SELinux root directory: /etc/selinux | |||
Loaded policy name: targeted | |||
Current mode: enforcing | |||
Mode from config file: enforcing | |||
Policy MLS status: enabled | |||
Policy deny_unknown status: allowed | |||
Memory protection checking: actual (secure) | |||
Max kernel policy version: 33 | |||
---- | |||
On peut faire ce changement d'état au travers l'interface de Cockpit. Dans le menu de gauche, on passe au point "SELinux". Au dessus de l'écran, un bouton basculant permet de passer de l'un à l'autre. | |||
[[FILE:LINUX:Selinux.cockpit3.png|center|800px]] | |||
Ligne 100 : | Ligne 134 : | ||
= | =[[LINUX:SELinux-Alertes et Journaux|Alertes et Journaux]]= | ||
Quand une règle est enfreinte, outre que l'accès demandé est refusé, une alerte est déclenchée et un message est envoyé aux journaux. | |||
SELinux | =[[LINUX:SELinux-Module|Module]]= | ||
Un module est un ensemble cohérent des différentes composantes de SELinux: Types, règles, Fcontext,... | |||
Il se présente sous une forme ayant beaucoup d'analogie avec un programme. | |||
=[[LINUX:SELinux-Méthode de première mise en route|Méthode de première mise en route]]= | |||
Je ne conseille pas de suivre aveuglément les conseils données par Cockpit ou les messages du service setroubleshootd.service. Je présente ici l'approche que j'ai utilisée. | |||
=[[LINUX:SELinux-Exercice de création d'un module personnel|Exercice de création d'un module personnel]]= | |||
J'ai voulu essayer de créer un module pour une application personnelle élémentaire. | |||
=Problème= | |||
* la | Suite à une mise à jour classique sous Fedora 41, Selinux était en erreur. Plusieurs problèmes apparaissent de façon répétitives dont voici quelques cas: | ||
* Lors d'un redémarrage, nombre de services ne démarrent plus comme SSHD, Fail2Ban,... | |||
* Plusieurs accès sont refusés | |||
* L'ajout et l'élimination de modules personnels sont impossibles avec des messages d'erreurs liés à la base des modules | |||
* La recompilation de la base de modules s'avère impossible. Voici un extrait des messages d'erreur. | |||
---- | ---- | ||
Found conflicting filecon rules | |||
Problems processing filecon rules | |||
Failed post db handling | |||
Post process failed | |||
semodule: Failed! | |||
---- | ---- | ||
On remarque que parmi les modules, celui nommé "extra_binsbin" (classe 400) pose problème et est nouveau mais il est impossible de le retirer. | |||
Une solution proposée est d'éliminer Selinux du système et toutes ses traces et ensuite de recommencer la réinstallation et la configuration à partir de rien. Mais ceci s'avère impossible car il est protégé. | |||
dnf remove selinux-policy-targeted | |||
La solution trouvée est de réinstaller Selinux: | |||
* On se met en mode permissif ou on le désactive. | |||
* On le réinstalle. | |||
dnf reinstall selinux-policy-targeted | |||
* Eventuellement on recompile la base des modules | |||
semodule -B -v | |||
* Par sécurité, on active la labellisation à nouveau des fichiers. | |||
touch /.autorelabel | |||
* On réactive Selinux ou au moins on le met en mode permissif pour tester en modifiant le fichier "/etc/selinux/config". | |||
* On redémarre la machine. | |||
Ligne 208 : | Ligne 190 : | ||
---- | ---- | ||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
[[Category:LINUX]] | [[Category:LINUX]] |