Quels rôles jouent DAC (autorisations de fichiers), ACL et MAC (SELinux) dans la sécurité des fichiers Linux?

18

J'ai besoin d'une clarification / confirmation / élaboration sur les différents rôles que DAC, ACL et MAC jouent dans la sécurité des fichiers Linux.

Après quelques recherches dans la documentation, voici ma compréhension de la pile:

  1. SELinux doit vous permettre d'accéder à l'objet fichier.
  2. Si les ACLs du fichier (par exemple setfacl, getfaclpour un montage ACL) permet explicitement / refuse l' accès à l'objet, aucune autre traitement est nécessaire.
  3. Sinon, cela dépend des autorisations du fichier (modèle DAC rwxrwxrwx).

Suis-je en train de manquer quelque chose? Y a-t-il des situations où ce n'est pas le cas?

Belmin Fernandez
la source
2
Je pense que vous avez raison. Pourriez-vous signaler le problème que vous rencontrez?
Kevin M
Je m'excuse pour la question malformée. J'ai l'impression que, en ce qui concerne cela, je passe en mode "essai et erreur". J'essaie de le saisir avec confiance et j'espérais que quelqu'un pourrait partager une image plus claire des rôles joués par chaque partie de la pile.
Belmin Fernandez
Modification de la question pour clarifier ce que je recherche dans les réponses.
Belmin Fernandez

Réponses:

19

Lorsqu'un processus effectue une opération sur un fichier, le noyau Linux effectue la vérification dans l'ordre suivant:

  1. Contrôle d'accès discrétionnaire (DAC) ou contrôle d'accès dicté par l'utilisateur. Cela inclut à la fois les vérifications des autorisations de style UNIX classiques et les listes de contrôle d'accès POSIX (ACL) . Les vérifications UNIX classiques comparent l'UID et le GID du processus actuel à l'UID et au GID du fichier auquel vous accédez en fonction des modes définis (lecture / écriture / eXecute). La liste de contrôle d'accès étend les vérifications UNIX classiques pour permettre plus d'options concernant le contrôle des autorisations.

  2. Contrôle d'accès obligatoire (MAC) ou contrôle d'accès basé sur des règles. Ceci est implémenté en utilisant des modules de sécurité Linux (LSM) qui ne sont plus de vrais modules (ils l'étaient auparavant mais ils ont été abandonnés). Ils permettent des vérifications supplémentaires basées sur d'autres modèles que les vérifications de sécurité classiques de style UNIX. Tous ces modèles sont basés sur une politique décrivant quel type d'opérations est autorisé pour quel processus dans quel contexte.

Voici un exemple d'accès aux inodes (qui inclut l'accès aux fichiers) pour étayer ma réponse avec des liens vers une référence croisée Linux en ligne . Les " function_name(nom de fichier: ligne)" donnés sont pour la version 3.14 du noyau Linux.

La fonction inode_permission( fs / namei.c: 449 ) vérifie d'abord l'autorisation de lecture sur le système de fichiers lui-même ( sb_permissiondans fs / namei.c: 425 ), puis appelle __inode_permission( fs / namei.c: 394 ) pour vérifier la lecture / écriture / exécution autorisations et POSIX ACL sur un inode dans do_inode_permission( fs / namei.c: 368 ) (DAC), puis autorisations liées à LSM (MAC) dans security_inode_permission( security / security.c: 550 ).

Il n'y avait qu'une seule exception à cette commande (DAC puis MAC): c'était pour les contrôles mmap. Mais cela a été corrigé dans la version 3.15 du noyau Linux ( commit pertinent ).

Siosm
la source
Réponse parfaitement détaillée avec des sources canoniques. Merci!
Belmin Fernandez
15

DAC== Discretionary Access Control, http://en.wikipedia.org/wiki/Discretionary_access_control
MAC == Mandatory Access Control, http://en.wikipedia.org/wiki/Mandatory_access_control
ACL == Access Control List, http://en.wikipedia.org/wiki/Access_control_list

Le ACLspécifie les contrôles à appliquer par la méthode de contrôle, DACou MAC. MACest explicite, contrôlé de manière centralisée et n'autorise pas les utilisateurs à accorder des droits sur un objet à moins qu'ils ne disposent d'autorisations explicites pour le faire, alors qu'il DACpermet aux autres utilisateurs d'accéder aux objets auxquels ils peuvent accéder.

MAC ACLs sera toujours appliqué à une demande en premier, et si l'accès est refusé, le traitement s'arrête. Si l'accès est autorisé, les DAC ACLs sont appliqués, et à nouveau si l'accès est refusé, le traitement s'arrête. Ce n'est que si l'accès est accordé par les deux MACet DAC ACLs que l'utilisateur peut accéder à l'objet qu'il a demandé.

SELinuxest une MACimplémentation pour Linux (il y en a d'autres), tandis que les rwxautorisations de fichiers traditionnelles , combinées avec l'utilisateur et le groupe propriétaire forment l'intégralité DAC ACL. La SELinux«politique» est essentiellement la MAC ACL.

Mike Insch
la source
1
Où les fichiers ACL (par exemple, setfacl) entrent-ils?
Belmin Fernandez
1
setaclétend les systèmes de fichiers de base ACLpour permettre à plusieurs utilisateurs ou groupes d'être affectés à ACLdes fichiers et des répertoires. Il s'agit également d'une DACmise en œuvre et elle est donc appliquée après l'application du par SELinux MAC ACL.
Mike Insch
Merci Mike. Une autre question: pour autant que je sache via mes tests, les setfaclACL définies explicitement remplacent les autorisations traditionnelles. Est-ce vrai dans tous les cas?
Belmin Fernandez
Pour autant que je sache, oui, le setacl/ setfacl ACLs remplacera le traditionnel «simple» ACLdu fichier.
Mike Insch
1
Mike, votre note sur setfaclappartient à la réponse.
Pavel Šimerda