Série RHCSA Essentiels de contrôle d'accès obligatoire avec selinux dans RHEL 7 - Partie 13

Série RHCSA Essentiels de contrôle d'accès obligatoire avec selinux dans RHEL 7 - Partie 13

Au cours de cette série, nous avons exploré en détail au moins deux méthodes de contrôle d'accès: Standard ugo/ /rwx Autorisations (gérer les utilisateurs et les groupes - partie 3) et les listes de contrôle d'accès (configurer les ACL sur les systèmes de fichiers - partie 7).

Examen RHCSA: SELINUX Essentials and Control FileSystem Accès

Bien que nécessaires en tant qu'autorisations de premier niveau et mécanismes de contrôle d'accès, ils ont certaines limites qui sont traitées par Sécurité améliorée Linux (alias Selinux pour faire court).

L'une de ces limitations est qu'un utilisateur peut exposer un fichier ou un répertoire à une violation de sécurité par le biais d'un peu élaboré chod commander et donc provoquer une propagation inattendue des droits d'accès. En conséquence, tout processus démarré par cet utilisateur peut le faire comme il se comporte avec les fichiers appartenant à l'utilisateur, où finalement un logiciel malveillant ou autrement compromis peut atteindre un accès au niveau de la racine à l'ensemble du système.

Avec ces limites à l'esprit, le Agence de sécurité nationale des États-Unis (NSA) d'abord conçu Selinux, Une méthode de contrôle d'accès obligatoire flexible, pour restreindre la capacité des processus pour accéder ou effectuer d'autres opérations sur des objets système (tels que les fichiers, les répertoires, les ports réseau, etc.) au modèle d'autorisation, qui peut être modifié ultérieure. En quelques mots, chaque élément du système ne reçoit que l'accès requis pour fonctionner.

Dans Rhel 7, Selinux est incorporé dans le noyau lui-même et est activé dans Application Mode par défaut. Dans cet article, nous expliquerons brièvement les concepts de base associés Selinux et son fonctionnement.

Modes selinux

Selinux peut fonctionner de trois manières différentes:

  1. Application: Selinux nie l'accès basé sur les règles de la politique SELINUX, un ensemble de directives qui contrôlent le moteur de sécurité.
  2. Permissif: Selinux ne nie pas l'accès, mais les refus sont enregistrés pour des actions qui auraient été refusées si l'exécution en mode exécution.
  3. Désactivé (Explicite).

Le Gettenforce La commande affiche le mode actuel de selinux, alors que setenforce (suivi d'un 1 ou un 0) est utilisé pour changer le mode en Application ou Permissif, respectivement, pendant la session en cours uniquement.

Afin d'atteindre la persistance à travers les déconnexions et les redémarrages, vous devrez modifier le / etc / selinux / config fichier et définir la variable selinux sur soit application, permissif, ou désactivé:

# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # cat / etc / selinux / config 
Définir le mode SELINUX

En règle générale, vous utiliserez setenforce Pour basculer entre les modes SELINUX (appliquer à la permissive et au dos) comme première étape de dépannage. Si Selinux est actuellement défini sur application Pendant que vous rencontrez un certain problème, et il en va de même lorsque vous le réglez sur permissif, Vous pouvez être convaincu que vous envisagez un problème d'autorisations SELINUX.

Contextes selinux

Un contexte Selinux se compose d'un environnement de contrôle d'accès où les décisions sont prises sur la base de l'utilisateur de Selinux, du rôle et du type (et éventuellement un niveau):

  1. Un utilisateur de Selinux complète un compte d'utilisateur Linux régulier en le mappant à un compte utilisateur de Selinux, qui à son tour est utilisé dans le contexte SELINUX pour les processus de cette session, afin de définir explicitement leurs rôles et niveaux autorisés.
  2. Le concept de rôle agit comme un intermédiaire entre les domaines et les utilisateurs de Selinux en ce qu'il définit quels domaines de processus et types de fichiers peuvent être accessibles. Cela protégera votre système contre la vulnérabilité aux attaques d'escalade des privilèges.
  3. Un type définit un type de fichier selinux ou un domaine de processus selinux. Dans des circonstances normales, les processus sont empêchés d'accéder à des fichiers que d'autres processus utilisent, et d'accès à d'autres processus, donc l'accès n'est autorisé que si une règle de stratégie de Selinux spécifique existe qui lui permet.

Voyons comment tout cela fonctionne à travers les exemples suivants.

Exemple 1: Modification du port par défaut pour le démon sshd

En sécurisant SSH - Partie 8, nous avons expliqué que la modification du port par défaut où SSHD Écoute l'une des premières mesures de sécurité pour sécuriser votre serveur contre les attaques externes. Montons le / etc / ssh / sshd_config fichier et définir le port sur 9999:

Port 9999 

Enregistrez les modifications et redémarrez SSHD:

# SystemCTL Redémarrer SSHD # Statut SystemCTL SSHD 
Redémarrer le service SSH

Comme vous pouvez le voir, SSHD n'a pas réussi à commencer. Mais que s'est-il passé?

Une inspection rapide de / var / log / audit / audit.enregistrer indique que SSHD s'est vu refuser des autorisations pour commencer le port 9999 (Les messages de journal selinux incluent le mot "AVC«Afin qu'ils puissent être facilement identifiés à partir d'autres messages) car c'est un port réservé pour le Gestion de JBOSS service:

# CAT / VAR / LOG / Audit / Audit.Journal | grep avc | queue -1 
Inspecter les journaux SSH

À ce stade, vous pourriez désactiver Selinux (Mais pas!) comme expliqué plus tôt et essayer de commencer SSHD encore, et ça devrait fonctionner. Cependant, le sémanage L'utilitaire peut nous dire ce que nous devons changer pour que nous puissions démarrer SSHD dans le port que nous choisissons sans problèmes.

Courir,

# SEMANAGE PORT -L | grep ssh 

Pour obtenir une liste des ports où Selinux permet à SSHD d'écouter.

Outil de séminage

Alors changeons le port dans / etc / ssh / sshd_config au port 9998, Ajouter le port au Contexte SSH_PORT_T, puis redémarrer le service:

# PORT DE SEMANAGE -A -T SSH_PORT_T -P TCP 9998 # SystemCTL Restart SSHD # SystemCTL IS-ACTIVE SSHD 
SEMANAGE Ajouter le port

Comme vous pouvez le voir, le service a été lancé avec succès cette fois. Cet exemple illustre le fait que Selinux contrôle le numéro de port TCP à son propre type de port définitions internes.

Exemple 2: Permettre à Httpd d'envoyer un accès Sendmail

Ceci est un exemple de SELINUX Gérer un processus accès à un autre processus. Si vous deviez implémenter MOD_SECURITY et MOD_EVASIVE avec Apache dans votre serveur Rhel 7, vous devez autoriser httpd accéder envoyer un mail Afin d'envoyer une notification par courrier à la suite d'un (D) DOS attaque. Dans la commande suivante, omettez le -P Flag Si vous ne voulez pas que le changement soit persistant à travers les redémarrages.

# SEMANAGE BOOLEAN -1 | grep httpd_can_sendmail # setSebool -p httpd_can_sendmail 1 # SEMANAGE BOOLEAN -1 | grep httpd_can_sendmail 
Autoriser Apache à envoyer des courriers

Comme vous pouvez le voir à partir de l'exemple ci-dessus, SELINUX BOOLEAN Les paramètres (ou simplement les booléens) sont des règles vraies / fausses intégrées dans les politiques SELINUX. Vous pouvez répertorier tous les booléens avec SEMANAGE BOOLEAN -L, et alternativement le tuyau sur grep afin de filtrer la sortie.

Exemple 3: Servir un site statique à partir d'un répertoire autre que celui par défaut

Supposons que vous servez un site Web statique en utilisant un répertoire différent de celui par défaut (/ var / www / html), dire /sites Internet (Cela pourrait être le cas si vous stockez vos fichiers Web dans un lecteur réseau partagé, par exemple, et que vous devez le monter à /sites Internet).

un). Créé un indice.html dossier à l'intérieur /sites Internet avec le contenu suivant:

 

Test de Selinux

Si tu fais,

# ls -lz / sites Web / index.html 

vous verrez que le indice.html Le fichier a été étiqueté avec le default_t selinux type, à quoi Apache ne peut pas accéder:

Vérifiez l'autorisation du fichier selinux

b). Changer la Document de document directive dans / etc / httpd / conf / httpd.confli pour /sites Internet Et n'oubliez pas de mettre à jour le bloc d'annuaire correspondant. Ensuite, redémarrez Apache.

c). Parcourir http: //, Et vous devriez obtenir une réponse HTTP interdite 503.

d). Ensuite, changez l'étiquette de /sites Internet, récursivement, au httpd_sys_content_t Tapez afin d'accorder un accès en lecture seule à Apache à ce répertoire et son contenu:

# SEMANAGE FContext -a -t httpd_sys_content_t "/ sites Web (/ /.*)?" 

e). Enfin, appliquez la stratégie SELINUX créée dans d):

# restorecon -r -v / sites Web 

Redémarrez maintenant Apache et parcourez http: // Encore une fois et vous verrez le fichier HTML affiché correctement:

Vérifiez la page Apache

Résumé

Dans cet article, nous avons traversé les bases de Selinux. Notez qu'en raison de l'immensité du sujet, une explication détaillée complète n'est pas possible dans un seul article, mais nous pensons que les principes décrits dans ce guide vous aideront à passer à des sujets plus avancés si vous souhaitez le faire.

Si je peux, permettez-moi de recommander deux ressources essentielles pour commencer: la page NSA Selinux et le Guide de l'utilisateur et de l'administrateur de Rhel 7 SELINUX.

N'hésitez pas à nous faire savoir si vous avez des questions ou des commentaires.