Y a-t-il une raison pour laquelle des autorisations de «propriétaire» existent? Les autorisations de groupe ne sont-elles pas suffisantes?

21

Je pense que je comprends plutôt comment fonctionnent les autorisations de fichiers sous Linux. Cependant, je ne comprends pas vraiment pourquoi ils sont divisés en trois niveaux et non en deux.

J'aimerais que les problèmes suivants soient résolus:

  • Est-ce une conception délibérée ou un patch? C'est-à-dire - les autorisations du propriétaire / groupe ont-elles été conçues et créées avec une justification ou sont-elles venues l'une après l'autre pour répondre à un besoin?
  • Existe-t-il un scénario dans lequel le schéma utilisateur / groupe / autre est utile mais un schéma groupe / autre ne suffit pas?

Les réponses à la première doivent citer des manuels ou des forums de discussion officiels.

Les cas d'utilisation que j'ai envisagés sont:

  • fichiers privés - très facilement accessibles en créant un groupe par utilisateur, ce qui est souvent fait comme dans de nombreux systèmes.
  • autoriser uniquement le propriétaire (par exemple, le service système) à écrire dans un fichier, autoriser uniquement un certain groupe à lire et refuser tout autre accès - le problème avec cet exemple est qu'une fois que le groupe doit disposer d'un accès en écriture, l'utilisateur / group / other échoue avec cela. La réponse pour les deux utilise des listes de contrôle d'accès et ne justifie pas, à mon humble avis, l'existence d'autorisations de propriétaire.

NB J'ai raffiné cette question après l'avoir fermée dans superuser.com .

EDIT corrigé "mais un schéma de groupe / propriétaire ne suffira pas" à "... groupe / autre ...".

Yuval
la source
1
Je ne comprends pas vraiment pourquoi vous pensez que les autorisations de groupe seraient suffisantes. Imaginez une situation où vous souhaitez autoriser vos développeurs à avoir leurs propres fichiers privés (configurations, etc.), mais aussi leur permettre de partager du code entre eux. Avoir un devsgroupe permet cela.
Chris Down
@ChrisDown Il dit que vous feriez de l'utilisateur fooun membre des groupes fooet devs, et assigneriez des fichiers partagés au devgroupe et des fichiers privés au foogroupe
Michael Mrozek
4
Pendant que vous y êtes, pourquoi avoir des autorisations mondiales au lieu d'un groupe «tout le monde» dont tout le monde est membre? La réponse est que la configuration des autorisations utilisateur / groupe / autre a été inventée avant les ACL.
Random832

Réponses:

24

Histoire

À l'origine, Unix n'avait que des autorisations pour l'utilisateur propriétaire et pour les autres utilisateurs: il n'y avait pas de groupe. Voir notamment la documentation d'Unix version 1 chmod(1). La rétrocompatibilité, si rien d'autre, nécessite donc des autorisations pour l'utilisateur propriétaire.

Les groupes sont venus plus tard. Les listes de contrôle d'accès permettant d'impliquer plus d'un groupe dans les autorisations d'un fichier sont venues beaucoup plus tard.

Puissance expressive

Avoir trois autorisations pour un fichier permet des autorisations plus fines que d'en avoir seulement deux, à un coût très faible (beaucoup plus bas que les ACL). Par exemple, un fichier peut avoir le mode rw-r-----: accessible en écriture uniquement par l'utilisateur propriétaire, lisible par un groupe.

Un autre cas d'utilisation est les exécutables setuid qui ne sont exécutables que par un groupe. Par exemple, un programme dont le mode rwsr-x---appartient à root:adminautorise uniquement les utilisateurs du admingroupe à exécuter ce programme en tant que root.

«Il y a des autorisations que ce schéma ne peut pas exprimer» est un terrible argument contre lui. Le critère applicable est le suivant: existe-t-il suffisamment de cas exprimables communs qui justifient le coût? Dans ce cas, le coût est minime, surtout compte tenu des autres raisons du triptyque utilisateur / groupe / autre.

Simplicité

Avoir un groupe par utilisateur a une surcharge de gestion petite mais non négligeable. Il est bon que le cas extrêmement courant d'un fichier privé n'en dépende pas. Une application qui crée un fichier privé (par exemple un programme de livraison de courrier électronique) sait que tout ce qu'elle doit faire est de donner au fichier le mode 600. Elle n'a pas besoin de parcourir la base de données de groupe à la recherche du groupe qui ne contient que l'utilisateur - et que faire s'il n'y a pas un tel groupe ou plus d'un?

Venant d'une autre direction, supposons que vous voyez un fichier et que vous souhaitiez auditer ses autorisations (c'est-à-dire vérifier qu'elles sont ce qu'elles devraient être). C'est beaucoup plus facile lorsque vous pouvez aller «uniquement accessible à l'utilisateur, très bien, ensuite» que lorsque vous avez besoin de parcourir les définitions de groupe. (Une telle complexité est le fléau des systèmes qui font un usage intensif de fonctionnalités avancées telles que les listes de contrôle d'accès ou les capacités.)

Orthogonalité

Chaque processus effectue des accès au système de fichiers en tant qu'utilisateur et groupe particuliers (avec des règles plus compliquées sur les unités modernes, qui prennent en charge des groupes supplémentaires). L'utilisateur est utilisé pour beaucoup de choses, y compris pour tester la racine (uid 0) et l'autorisation de livraison de signal (basée sur l'utilisateur). Il existe une symétrie naturelle entre la distinction des utilisateurs et des groupes dans les autorisations de processus et la distinction des utilisateurs et des groupes dans les autorisations de système de fichiers.

Gilles 'SO- arrête d'être méchant'
la source
Excellente réponse, et j'ai apprécié d'apprendre sur l'homme plus âgé. Cependant, j'ai quelques réserves sur ce que vous avez dit. Un système plus simple, qui peut en fait faire presque (sinon exactement) autant de listes de contrôle d'accès, permet à chacune des autorisations «rwx» de transporter un groupe (plutôt que l'inverse). Autrement dit, vous aurez un groupe de lecture, un groupe d'écriture et un groupe d'exécution. Si vous en avez vraiment besoin à des fins de système d'exploitation, vous pouvez attacher un propriétaire au fichier. De cette façon, vous pouvez également spécifier un groupe spécial «propriétaire» et un groupe «tout le monde». À part la hiérarchie, je pense que cela couvre tout, y compris la simplicité et l'orthogonalité.
Yuval
1
@Yuval Ce que vous décrivez est un système ACL - le même que Linux, sauf sans la possibilité directe d'attribuer des autorisations à un utilisateur.
Gilles 'SO- arrête d'être méchant'
C'est possible. Ce que j'ai essayé de souligner, c'est qu'actuellement, chaque enregistrement de fichier contient deux identifiants (groupe, propriétaire) et un masque de bits. Ne serait-il pas plus efficace (encore une fois, l'argument coût / gain) de ne conserver que quatre identifiants? (exécuter un groupe, lire un groupe, écrire un groupe, propriétaire)
Yuval
@Yuval Pourquoi quatre identifiants? Ce serait beaucoup plus restrictif que les listes de contrôle d'accès (car vous auriez besoin de root pour définir un groupe pour chaque ensemble), et à peine plus flexible que les autorisations Unix actuelles (distinguer la lecture de l'exécution est extrêmement rare, et pour l'écriture, vous voudriez souvent l'union du groupe de lecture et du groupe d'écriture). Si vous autorisez une liste de groupes pour chaque autorisation et une liste d'utilisateurs pour faire bonne mesure (car il n'y a pas toujours le bon groupe, tous les systèmes n'ont pas de groupe par utilisateur), vous avez essentiellement des listes de contrôle d'accès Solaris / Linux.
Gilles 'SO- arrête d'être méchant'
Vous soutenez que ce que j'ai décrit est une ACL, mais cela signifie que le schéma d'autorisation Linux actuel est une ACL handicapée, qui ne peut avoir qu'un seul enregistrement utilisateur, un enregistrement de groupe et un enregistrement pour Tout le monde (pour utiliser le jargon Windows). J'ai suggéré de modifier le handicap en réorganisant la sémantique. Plutôt que de prescrire des entités, prescrire des autorisations. C'est peut-être ainsi que les listes de contrôle d'accès traditionnelles sont implémentées - je ne sais pas. Le fait est qu'il s'agit d'un coût minimal, en termes de stockage et de simplicité, par rapport à l'état actuel, toujours orthogonal, mais avec toute la puissance expressive des ACL.
Yuval
10

Est-ce une conception délibérée ou un patch? C'est-à-dire - les autorisations du propriétaire / groupe ont-elles été conçues et créées avec une justification ou sont-elles venues l'une après l'autre pour répondre à un besoin?

Les autorisations utilisateur / groupe / autres sur un fichier font partie de la conception Unix originale.

Existe-t-il un scénario dans lequel le schéma utilisateur / groupe / autre est utile mais un schéma groupe / propriétaire ne suffira pas?

Oui, pratiquement tous les scénarios que je pourrais imaginer où la sécurité et le contrôle d'accès sont importants.

Exemple: vous souhaiterez peut-être donner à certains binaires / scripts sur un système un accès en exécution uniquement à other, et limiter l'accès en lecture / écriture à root.

Je ne sais pas ce que vous avez en tête pour un modèle d'autorisation de système de fichiers qui n'a que des autorisations de propriétaire / groupe. Je ne sais pas comment vous pourriez avoir un système d'exploitation sécurisé sans l'existence d'une othercatégorie.

EDIT: Supposons que vous vouliez dire ici que les group/otherautorisations sont tout ce qui serait nécessaire, alors je suggère de concevoir un moyen de gérer les clés cryptographiques ou un moyen que seuls les bons utilisateurs peuvent accéder à leur file d'attente de messagerie. Il existe des cas où une clé privée peut nécessiter strictement la user:userpropriété, mais d'autres cas où il est logique de lui donner la user:grouppropriété.

fichiers privés - très facilement accessibles en créant un groupe par utilisateur, ce qui est souvent fait comme dans de nombreux systèmes.

Certes, cela se fait facilement, mais c'est tout aussi facile avec l'existence d'un othergroupe ...

autoriser uniquement le propriétaire (par exemple, le service système) à écrire dans un fichier, autoriser uniquement un certain groupe à lire et refuser tout autre accès - le problème avec cet exemple est qu'une fois que le groupe doit disposer d'un accès en écriture, l'utilisateur / group / other échoue avec cela. La réponse pour les deux utilise des listes de contrôle d'accès et ne justifie pas, à mon humble avis, l'existence d'autorisations de propriétaire.

J'ai mis en évidence la partie de votre déclaration qui semble réitérer mon point sur la nécessité logique d'une othercatégorie dans les autorisations du système de fichiers Unix.

Une telle conception de système de fichiers que vous semblez envisager (d'après ce que je peux dire) serait soit peu sûre, soit lourde. Unix a été conçu par des gens très intelligents, et je pense que leur modèle offre le meilleur équilibre possible entre sécurité et flexibilité.

Charles Boyd
la source
1
Je pense que "groupe / propriétaire" était une faute de frappe destinée à être "groupe / autre"
Random832
Ah, vous avez probablement raison! Dans ce cas, j'ajouterai un autre contre-exemple.
Charles Boyd
3
Comme vous pouvez le lire The UNIX Time-Sharing System, écrit par Dennis M. Ritchie et Ken Thomson en 1974, à l'origine, il y avait 7 bits pour les autorisations:Also given for new files is a set of seven protection bits. Six of these specify independently read, write, and execute permission for the owner of the file and for all other users. (Le septième bit était le setuidbit).
Carlos Campderrós
4

Est-ce une conception délibérée ou un patch? C'est-à-dire - les autorisations du propriétaire / groupe ont-elles été conçues et créées avec une justification ou sont-elles venues l'une après l'autre pour répondre à un besoin?

Oui, c'est une conception délibérée qui est présente sous UNIX depuis les premiers jours. Il a été implémenté sur des systèmes où la mémoire était mesurée en Ko et les processeurs étaient extrêmement lents par rapport aux normes actuelles. La taille et la vitesse de ces recherches étaient importantes. Les listes de contrôle d'accès auraient nécessité plus d'espace et auraient été plus lentes. Fonctionnellement, le everyonegroupe est représenté par les autres drapeaux de sécurité.

Existe-t-il un scénario dans lequel le schéma utilisateur / groupe / autre est utile mais un schéma groupe / propriétaire ne suffira pas?

Les autorisations que j'utilise couramment pour accéder aux fichiers sont les suivantes: (J'utilise des valeurs binaires pour des raisons de simplicité et parce que c'est ainsi que je les définis habituellement.)

  • 600ou 400: Accès utilisateur uniquement (et oui, j'accorde un accès en lecture seule à l'utilisateur).
  • 640ou 660: Accès utilisateur et groupe.
  • 644, 666Ou 664: utilisateur, groupe et autres accès. Tout schéma d'autorisation à deux niveaux ne peut gérer que deux de ces trois cas. Le troisième nécessiterait des ACL.

Pour les répertoires et programmes que j'utilise couramment:

  • 700 ou 500 : Accès utilisateur uniquement
  • 750 ou 710 : Accès en groupe uniquement
  • 755, 777, 775Ou751 : utilisateur, groupe et autres accès. Les mêmes commentaires s'appliquent que pour les fichiers.

Les éléments ci-dessus sont les plus couramment utilisés, mais pas une liste exhaustive des paramètres d'autorisation que j'utilise. Les autorisations ci-dessus combinées avec un groupe (parfois avec un bit de groupe collant sur les répertoires) ont suffi dans tous les cas où j'aurais pu utiliser une ACL.

Comme cela a été noté ci-dessus, il est très facile de répertorier l'autorisation dans une liste de répertoires. Si les listes de contrôle d'accès ne sont pas utilisées, je peux auditer les autorisations d'accès avec uniquement une liste de répertoires. Lorsque je travaille avec des systèmes basés sur ACL, je trouve très difficile de vérifier ou d'auditer les autorisations.

BillThor
la source
3

Le système d'autorisation utilisateur / groupe / autre a été conçu avant l'invention des listes de contrôle d'accès. Cela remonte aux premiers jours d'UNIX, vous ne pouvez donc pas dire que le problème devrait être résolu avec les ACL. Même si le concept d'une ACL semble évident, il aurait impliqué une quantité importante [pour la journée] de frais supplémentaires pour stocker et gérer une quantité variable d'informations d'autorisation avec chaque fichier, plutôt qu'un montant fixe.

L'utilisation d'ACL pour tout signifie également que vous ne disposez pas d'un sous-ensemble bien défini des informations d'autorisation qui peuvent être affichées «en un coup d'œil». La sortie pour ls -laffiche les autorisations standard (utilisateur / groupe / autre), le nom de l'utilisateur et du groupe, et une notation supplémentaire (par exemple +ou @signe) sur les entrées auxquelles une ACL est associée, le tout sur une seule ligne. Votre système exigerait qu'il identifie les «deux premiers» groupes dans la liste de contrôle d'accès pour fournir des fonctionnalités équivalentes.

Comme point supplémentaire, un fichier doit toujours avoir un propriétaire dans le modèle UNIX car les ACL UNIX ne prévoient pas qui est autorisé à modifier l'ACL.

Aléatoire832
la source