Administration de SELinux dans Oracle Linux

Décrit SELinux et fournit des conseils sur l'administration de SELinux dans Oracle Linux.

La sécurité Linux traditionnelle est basée sur une stratégie de contrôle d'accès discrétionnaire (DAC). Dans le modèle de sécurité du système DAC, l'accès aux ressources telles que les fichiers et les processus repose uniquement sur l'identité et la propriété de l'utilisateur. Si un logiciel malveillant ou défectueux est présent sur le système, il peut tout faire avec les fichiers et les ressources que l'utilisateur qui a démarré le processus a l'autorisation de faire. Si l'utilisateur est root ou que l'application s'exécute avec des privilèges élevés (setuid ou setgid à root), le processus dispose du contrôle d'accès root sur l'ensemble du système de fichiers.

Pour résoudre ce problème, la National Security Agency a créé Security Enhanced Linux (SELinux) pour fournir un plus grand niveau de contrôle sur les fichiers, les processus, les utilisateurs et les applications dans le système d'exploitation Linux. L'amélioration de SELinux vers le noyau Linux implémente la stratégie de contrôle d'accès obligatoire (MAC), qui vous permet de définir une stratégie de sécurité qui configure des autorisations granulaires pour tous les utilisateurs, programmes, processus, fichiers et périphériques. Les décisions de contrôle d'accès du noyau sont basées sur la sensibilité des ressources du point de vue de la sécurité, et pas uniquement sur l'identité de l'utilisateur authentifié.

Lorsqu'un accès lié à la sécurité se produit, par exemple lorsqu'un processus ouvre un fichier, SELinux intercepte l'opération dans le noyau. Si une règle de stratégie MAC autorise l'opération, elle continue. Sinon, SELinux bloque l'opération et renvoie une erreur au processus. Le noyau vérifie et applique les règles de stratégie DAC avant les règles MAC. Par conséquent, il ne vérifie pas les règles de stratégie SELinux si les règles DAC ont déjà refusé l'accès à une ressource.

Description des packages SELinux

SELinux contient plusieurs packages, chacun contenant des utilitaires spécifiques que vous pouvez utiliser pour administrer SELinux sur les systèmes Oracle Linux. Certains packages sont installés par défaut, tandis que d'autres sont facultatifs.

Le tableau suivant répertorie les packages SELinux installés par défaut avec Oracle Linux.

Package

Description

policycoreutils

Fournit des utilitaires tels que load_policy, restorecon, secon, setfiles, semodule, sestatus et setsebool pour l'exploitation et la gestion de SELinux.

libselinux

Fournit l'API que les applications SELinux utilisent pour obtenir et définir des contextes de sécurité des processus et des fichiers, et pour obtenir des décisions de stratégie de sécurité.

python3-libselinux

Contient des liaisons Python pour le développement d'applications SELinux.

selinux-policy

Fournit la stratégie de référence SELinux, qui sert de base à d'autres stratégies, telles que la stratégie ciblée SELinux.

selinux-policy-targeted

Fournit la stratégie ciblée SELinux, où les objets en dehors des domaines ciblés s'exécutent sous DAC.

libselinux-utils

Fournit les utilitaires avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled et setenforce.

Le tableau suivant répertorie les packages SELinux utiles qui ne sont pas installés par défaut. Installez tous les packages requis à l'aide de la commande dnf.

Package

Description

mcstrans

Convertit les niveaux SELinux, tels que s0-s0:c0.c1023, en un formulaire plus facile à lire, tel que SystemLow-SystemHigh.

policycoreutils-python-utils

Fournit des utilitaires Python pour l'exploitation de SELinux, tels que audit2allow, audit2why, chcat et semanage.

policycoreutils-sandbox

Fournit l'utilitaire Sandbox permettant de créer des modèles d'environnement restreint SELinux pour exécuter des commandes dans un domaine SELinux étroitement confiné.

selinux-policy-mls

Fournit une stratégie de sécurité multiniveau (MLS) stricte comme alternative à la stratégie ciblée SELinux.

selinux-policy-doc Fournit des pages manuelles pour de nombreux éléments de stratégie SELinux.

setroubleshoot

Permet d'afficher les messages setroubleshoot-server à l'aide de la commande sealert.

setroubleshoot-server

Convertit les messages de refus d'accès de SELinux en descriptions détaillées que vous pouvez afficher sur la ligne de commande à l'aide de la commande sealert.

setools-console

Fournit la distribution des outils et des bibliothèques Tresys Technology SETools, que vous pouvez utiliser pour analyser et interroger les stratégies, surveiller et générer des rapports sur les journaux d'audit et gérer le contexte des fichiers.

Pour plus d'informations, reportez-vous au Wiki de projet SELinux pour la documentation de la communauté et aux pages de manuel de commande selinux(8) et autres SELinux.

Utilitaires SELinux

Le tableau suivant décrit les principaux utilitaires que vous pouvez utiliser pour administrer SELinux et les packages qui les contiennent.

Services publics

Package

Description

audit2allow

policycoreutils-python-utils

Génère des règles allow de stratégie SELinux (et des entrées dontaudit facultatives) à partir des journaux d'audit des opérations refusées.

audit2why

policycoreutils-python-utils

Analyse les journaux de refus pour expliquer pourquoi l'accès a été bloqué et recommande les ajustements SELinux pertinents.

avcstat

libselinux-utils

Affiche les statistiques du cache vectoriel d'accès SELinux (AVC).

chcat

policycoreutils-python-utils

Modifie ou supprime la catégorie de sécurité pour un fichier ou un utilisateur.

chcon

coreutils

Modifie le contexte SELinux des fichiers et répertoires.

fixfiles

policycoreutils

Corrige le contexte de sécurité des systèmes de fichiers.

getenforce

libselinux-utils

Indique le mode SELinux actuel.

getsebool

libselinux-utils

Affiche les valeurs booléennes de SELinux.

load_policy

policycoreutils

Charge une nouvelle stratégie SELinux dans le noyau.

matchpathcon

libselinux-utils

Interroge la stratégie système et affiche le contexte de sécurité par défaut associé au chemin du fichier.

restorecon

policycoreutils

Réinitialise le contexte de sécurité sur un ou plusieurs fichiers.

restorecond

policycoreutils

Démon qui surveille la création de fichier et définit le contexte du fichier par défaut.

runcon

coreutils

Exécute une commande dans le contexte spécifié.

sandbox

policycoreutils-sandbox

Exécute une commande dans un modèle d'environnement restreint SELinux.

sealert

setroubleshoot-server, setroubleshoot

Agit en tant qu'interface utilisateur du système setroubleshoot pour diagnostiquer et expliquer les refus de SELinux AVC et fournir des recommandations sur la façon de prévenir ces refus.

sechecker

setools-console

Vérifie les stratégies SELinux.

secon

policycoreutils

Affiche le contexte SELinux à partir d'un fichier, d'un programme ou d'une entrée utilisateur.

sediff

setools-console

Compare les stratégies SELinux.

seinfo

setools-console

Interroge les stratégies SELinux.

selinuxconlist

libselinux-utils

Affiche tous les contextes SELinux accessibles par un utilisateur.

selinuxdefcon

libselinux-utils

Affiche le contexte SELinux par défaut pour un utilisateur.

selinuxenabled

libselinux-utils

Indique si SELinux est activé.

semanage

policycoreutils-python-utils

Gère les stratégies SELinux.

semodule

policycoreutils

Gère les modules de stratégie SELinux.

semodule_deps

policycoreutils

Affiche les dépendances entre les packages de stratégie SELinux.

semodule_expand

policycoreutils

Développe un package de module de stratégie SELinux.

semodule_link

policycoreutils

Relie les packages du module de stratégie SELinux.

semodule_package

policycoreutils

Crée un package de module de stratégie SELinux.

sesearch

setools-console

Interroge les stratégies SELinux.

sestatus

policycoreutils

Affiche le mode SELinux et la stratégie SELinux en cours d'utilisation.

setenforce

libselinux-utils

Modifie le mode SELinux.

setsebool

policycoreutils

Définit les valeurs booléennes de SELinux.

setfiles

policycoreutils

Définit le contexte de sécurité pour un ou plusieurs fichiers.

Définition des modes SELinux

SELinux s'exécute en mode enforcing ou permissive :

enforcing

Le noyau refuse l'accès aux utilisateurs et aux programmes s'ils ne sont pas autorisés par les règles de stratégie de sécurité SELinux. Tous les messages de refus sont consignés en tant que refus AVC (Access Vector Cache). Il s'agit du mode par défaut.

permissive

Le noyau n'applique pas de règles de stratégie de sécurité, mais SELinux envoie des messages de refus à un fichier journal. Cela vous permet de voir quelles actions seraient refusées si SELinux était exécuté en mode enforcing. Utilisez ce mode pour vous aider à implémenter efficacement SELinux dans un système.

Pour afficher le mode SELinux actuel, exécutez la commande suivante :

getenforce

Pour définir le mode actuel sur enforcing, exécutez la commande suivante :

sudo setenforce enforcing

Pour définir le mode actuel sur permissive, exécutez la commande suivante :

sudo setenforce permissive
Remarque

La valeur que vous définissez pour un mode à l'aide de setenforce ne persiste pas après les réinitialisations. Pour configurer le mode SELinux par défaut, modifiez le fichier de configuration de SELinux, /etc/selinux/config et définissez la valeur de la directive SELINUX sur enforcing ou permissive.

Désactivation de SELinux

Vous pouvez désactiver complètement SELinux en définissant le paramètre de noyau selinux sur zéro.

Important

Oracle ne recommande pas de désactiver SELinux dans les systèmes de production. Utilisez plutôt le mode permissive.

  1. Définissez le paramètre de noyau requis.

    Utilisez l'utilitaire grubby pour définir le paramètre selinux sur zéro :

    sudo grubby --update-kernel ALL --args selinux=0
  2. Redémarrez le système.
  3. Vérifiez que SELinux est désactivé.

    Exécutez la commande getenforce et vérifiez que la sortie est Disabled :

    getenforce
    Disabled
  4. (Facultatif) Réactivation de SELinux

    Pour réactiver SELinux, entrez la commande suivante et redémarrez le système :

    sudo grubby --update-kernel ALL --remove-args selinux

Installation de la documentation de stratégie

SELinux est complexe, avec de nombreuses options pour configurer l'accès, à l'aide de stratégies. Vous pouvez obtenir des informations détaillées sur les stratégies disponibles à partir des pages manuelles fournies par le package selinux-policy-doc. Cette tâche vous indique comment accéder à ces informations.

La documentation relative aux stratégies contient également des informations sur les utilisateurs et les rôles. Par exemple, vous pouvez en savoir plus sur l'utilisateur SELinux sans privilège user_u et le rôle user_r dans la page de manuel user_selinux(8). La documentation sur les stratégies décrit les restrictions qui s'appliquent à différents contextes de sécurité et les options booléennes disponibles pour personnaliser la stratégie pour un environnement.

  1. Installez le package :
    sudo dnf install -y selinux-policy-doc
  2. Mettez à jour la base de données des pages manuelles :
    sudo mandb
  3. Parcourez les pages du manuel de stratégie SELinux. Pour obtenir la liste complète de toute la documentation manuelle de SELinux, exécutez la commande suivante :
    man -k _selinux