Série RHCSA Essentiels de contrôle d'accès obligatoire avec selinux dans RHEL 7 - Partie 13
- 2897
- 859
- Anaïs Charles
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èsBien 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:
- 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é.
- 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.
- 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 / configDé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):
- 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.
- 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.
- 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 SSHDRedé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 -1Inspecter 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éminageAlors 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 SSHDSEMANAGE 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_sendmailAutoriser 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 selinuxb). 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:
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.
- « Linux_logo - Un outil de ligne de commande pour imprimer la couleur ANSI Logos des distributions Linux
- Comment déployer Hyperviseur de virtualisation de Redhat Enterprise (RHEV-H) - Partie 2 »