Implémentation de contrôle d'accès obligatoire avec selinux ou Apparmor à Linux

Implémentation de contrôle d'accès obligatoire avec selinux ou Apparmor à Linux

Pour surmonter les limites et augmenter les mécanismes de sécurité fournis par la norme UGO / RWX Autorisations et listes de contrôle d'accès, le Agence de sécurité nationale des États-Unis (NSA) a conçu un flexible Contrôle d'accès obligatoire (Mac) Méthode connue sous le nom Selinux (court pour Sécurité améliorée Linux) Afin de restreindre entre autres choses, la capacité des processus à 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.) à la moindre autorisation possible, tout en permettant des modifications ultérieures à ce modèle.

Selinux
et Apparmor Security Hardening Linux

Un autre Mac populaire et largement utilisé est Apparmor, qui en plus des fonctionnalités fournies par Selinux, Comprend un mode d'apprentissage qui permet au système de «apprendre«Comment une application spécifique se comporte et pour définir des limites en configurant les profils pour une utilisation en toute sécurité de l'application.

Dans Centos 7, Selinux est incorporé dans le noyau lui-même et est activé dans Application mode par défaut (plus à ce sujet dans la section suivante), par opposition à ouverte et Ubuntu quelle utilisation Apparmor.

Dans cet article, nous expliquerons les éléments essentiels de Selinux et Apparmor et comment utiliser l'un de ces outils à votre avantage en fonction de votre distribution choisie.

Introduction à selinux et comment l'utiliser sur Centos 7

Linux amélioré par la sécurité peut fonctionner de deux 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.

Selinux peut également être désactivé. Bien que ce ne soit pas un mode de fonctionnement lui-même, c'est toujours une option. Cependant, apprendre à utiliser cet outil est mieux que de l'ignorer. Garde le en mémoire!

Pour afficher le mode actuel de Selinux, utiliser Gettenforce. Si vous souhaitez basculer le mode de fonctionnement, utilisez setenforce 0 (Pour le régler sur Permissif) ou setenforce 1 (Application).

Puisque ce changement ne survivra pas à un redémarrer, vous devrez modifier le / etc / selinux / config fichier et définir le Selinux variable à soit application, permissif, ou désactivé Afin d'atteindre la persistance à travers les redémarrages:

Comment activer et désactiver le mode selinux

Sur une note latérale, si Gettenforce retourne handicapé, vous devrez modifier / etc / selinux / config avec le mode de fonctionnement souhaité et redémarrer. Sinon, vous ne pourrez pas définir (ou basculer) le mode de fonctionnement avec setenforce.

L'une des utilisations typiques de setenforce consiste à basculer entre les modes selinux (de application pour permissif ou l'inverse) pour dépanner une application qui se comporte mal ou ne fonctionne pas comme prévu. Si cela fonctionne après avoir défini Selinux sur Permissif Mode, vous pouvez être convaincu que vous envisagez un problème d'autorisations SELINUX.

Deux cas classiques où nous devrons très probablement faire face à Selinux sont:

  1. Modification du port par défaut où un démon écoute.
  2. Définition du Document de document directive pour un hôte virtuel en dehors de / var / www / html.

Jetons un œil à ces deux cas en utilisant les exemples suivants.

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

L'une des premières choses que la plupart des administrateurs système font pour sécuriser leurs serveurs est de modifier le port où le démon SSH écoute, principalement pour décourager les scanners de port et les attaquants externes. Pour ce faire, nous utilisons la directive portuaire dans / etc / ssh / sshd_config suivi du nouveau numéro de port comme suit (nous utiliserons le port 9999 dans ce cas):

Port 9999 

Après avoir tenté de redémarrer le service et de vérifier son statut, nous verrons qu'il n'a pas commencé:

# SystemCTL Redémarrer SSHD # Statut SystemCTL SSHD 
Vérifiez l'état du service SSH

Si nous jetons un œil à / var / log / audit / audit.enregistrer, Nous verrons que SSHD a été empêché de commencer sur le port 9999 par Selinux parce que c'est un port réservé pour le Gestion de JBOSS Service (les messages de journal selinux incluent le mot "AVC" afin qu'ils puissent être facilement identifiés à partir d'autres messages):

# CAT / VAR / LOG / Audit / Audit.Journal | grep avc | queue -1 
Vérifiez les journaux d'audit Linux

À ce stade Selinux Mais nous ne le ferons pas. Nous verrons qu'il y a un moyen pour Selinux et que SSHD écoute sur un port différent, de vivre en harmonie ensemble. Assurez-vous que vous avez le Policycoréutils-python Package installé et exécuté:

# yum installer la politique de la politique-python 

Pour afficher une liste des ports où Selinux permet à SSHD d'écouter. Dans l'image suivante, nous pouvons également voir ce port 9999 était réservé à un autre service et nous ne pouvons donc pas l'utiliser pour exécuter un autre service pour le moment:

# SEMANAGE PORT -L | grep ssh 

Bien sûr, nous pourrions choisir un autre port pour SSH, mais si nous sommes certains que nous n'aurons pas besoin d'utiliser cette machine spécifique pour des services liés à JBOSS, nous pouvons ensuite modifier la règle SELINUX existante et attribuer ce port à SSH à la place:

# PORT DE SEMANAGE -M -T SSH_PORT_T -P TCP 9999 

Après cela, nous pouvons utiliser le premier sémanage commande pour vérifier si le port a été correctement attribué, ou le -LC Options (abréviation pour la liste des personnalités):

# SEMANAGE PORT -LC # PORT DE SEMANAGE -L | grep ssh 
Affecter le port à SSH

Nous pouvons maintenant redémarrer SSH et nous connecter au service à l'aide du port 9999. Notez que ce changement survivra à un redémarrage.

Exemple 2: Choisir un documentroot en dehors / var / www / html pour un hôte virtuel

Si vous devez configurer un hôte virtuel Apache à l'aide d'un répertoire autre que / var / www / html comme Document de document (Dites, par exemple, / websrv / sites / gabriel / public_html):

DocumentRoot «/ Websrv / Sites / Gabriel / public_html» 

Apache refusera de servir le contenu car le indice.html a été étiqueté avec le default_t selinux type, à quoi Apache ne peut pas accéder:

# wget http: // localhost / index.html # ls -lz / websrv / sites / gabriel / public_html / index.html 
Étiqueté comme default_t SELINUX

Comme pour l'exemple précédent, vous pouvez utiliser la commande suivante pour vérifier qu'il s'agit bien d'un problème lié à Selinux:

# CAT / VAR / LOG / Audit / Audit.Journal | grep avc | queue -1 
Vérifiez les journaux pour les problèmes de selinux

Pour changer l'étiquette de / websrv / sites / gabriel / public_html récursivement à httpd_sys_content_t, faire:

# SEMANAGE FContext -a -t httpd_sys_content_t "/ websrv / sites / gabriel / public_html (/.*)?" 

La commande ci-dessus accordera à Apache un accès en lecture seule à ce répertoire et à son contenu.

Enfin, pour appliquer la politique (et rendre l'étiquette change en vigueur immédiatement), faites:

# restorecon -r -v / websrv / sites / gabriel / public_html 

Vous devriez maintenant pouvoir accéder au répertoire:

# wget http: // localhost / index.html 
Accédez à répertoire Apache

Pour plus d'informations sur SELINUX, reportez-vous au Guide Fedora 22 SELINUX ET ADMINISTRATEUR.

Pages: 1 2