Quelles sont les différentes façons de définir les autorisations de fichiers, etc. sur GNU / Linux

19

Sur Unix, il y a longtemps, j'ai appris chmod: la façon traditionnelle de définir des autorisations, sur Unix (et de permettre aux programmes d'obtenir des privilèges, en utilisant setuid, setgid).

J'ai récemment découvert quelques commandes plus récentes, sur GNU / Linux:

  • setfaclétend les ugo:rwxbits traditionnels et le tbit de chmod.
  • setcapdonne un contrôle plus fin du grain que des ug:sbits de chmod.
  • chattr Permet quelques autres contrôles (un peu mélangés) du fichier.

Y en a-t-il d'autres?

ctrl-alt-delor
la source
voir aussi unix.stackexchange.com/q/183994/4778 pour plus de détails surchmod
ctrl-alt-delor
voir aussi unix.stackexchange.com/q/246606/4778 pour les ACL étendues (richACL).
ctrl-alt-delor

Réponses:

28

chmod: changer les bits du mode fichier

Utilisation (mode octal):

    chmod <octal-mode> files...

Utilisation (mode symbolique):

    chmod <references><operator><modes> files..

referencesest une combinaison des lettres ugoa, qui spécifient quel utilisateur l'accès au filessera modifié:

  • u l'utilisateur qui le possède
  • gautres utilisateurs dans le filegroupe de
  • o autres utilisateurs n'appartenant pas au groupe du fichier
  • a tous les utilisateurs

    S'il est omis, il s'applique par défaut à tous les utilisateurs, mais seules les autorisations autorisées par le umasksont modifiées.

    operatorest l'un des personnages +-=:

    • + ajouter les bits de mode de fichier spécifiés aux bits de mode de fichier existants de chaque file
    • - supprime les bits de mode de fichier spécifiés aux bits de mode de fichier existants de chaque file
    • =ajoute les bits spécifiés et supprime les bits non spécifiés, à l'exception des bits setuidet setgiddéfinis pour les répertoires, sauf indication contraire explicite.

    modese compose d'une combinaison de lettres rwxXst, qui spécifient quel bit d'autorisation doit être modifié:

    • r lis
    • w écrire
    • x exécuter (ou rechercher des répertoires)
    • X exécuter / rechercher uniquement si le fichier est un répertoire ou si le bit d'exécution est déjà défini pour un utilisateur
    • ssetuid ou setgid (selon le spécifié references)
    • t indicateur de suppression restreinte ou bit collant

    Alternativement, le modepeut consister en l'une des lettres ugo, auquel cas le mode correspond aux autorisations actuellement accordées au propriétaire ( u), au membre du filegroupe ( g) ou aux autorisations des utilisateurs dans aucune des catégories précédentes ( o).

Les différents morceaux chmodexpliqués:

  • Contrôle d'accès (voir aussi setfacl)
    • rwx - lire (r), écrire (w) et exécuter / croiser (x) les autorisations.
      • La lecture (r) affecte si un fichier peut être lu ou si un répertoire peut être répertorié.
      • L'écriture (w) affecte si un fichier peut être écrit ou si un répertoire peut être modifié (fichiers ajoutés, supprimés, renommés).
      • Execute (x) affecte si un fichier peut être exécuté, utilisez-le pour les scripts (voir #!) et d'autres fichiers exécutables.
      • Cross (x) affecte si un répertoire peut être parcouru.
    • set t- sticky bit (t), et setgid (s) sur les répertoires
      • Le bit collant affecte uniquement les répertoires. Empêche quiconque, sauf le propriétaire du fichier et root, de supprimer des fichiers dans le répertoire.
      • le bit setgid sur les répertoires, les nouveaux fichiers et répertoires auront le groupe défini sur le même groupe, et les nouveaux répertoires auront leur bit setgid défini (voir également les valeurs par défaut dans setfacl).
    • s - setuid, setgid, sur les fichiers exécutables.
      • Cela peut nuire à la sécurité si vous ne savez pas ce que vous faites.
      • Lorsqu'un exécutable est exécuté, si l'un de ces bits est défini, l'utilisateur / groupe effectif de l'exécutable deviendra celui du fichier. Ainsi, le programme s'exécute en tant que cet utilisateur. voir setcappour une façon plus moderne de le faire.

chown chgrp:


chattr: modifier les attributs de fichier

Usage:

    chattr <operator><attribute> files...

operatorest l'un des caractères +-=: * +ajoute les attributs sélectionnés pour être à l'existant attributesdes files * -supprime les sélectionnés attributes * =écrase l'ensemble actuel des attributs des fichiers avec les spécifiés attributes.

attributeest une combinaison des lettres acdeijstuADST, qui correspondent aux attributs:

  • a ajouter seulement
  • c comprimé
  • d pas de vidage
  • e format d'étendue
  • i immuable
  • j journalisation des données
  • s suppression sécurisée
  • t pas de fusion de queue
  • u undeletable
  • Apas de atimemises à jour
  • D mises à jour d'annuaire synchrones
  • S mises à jour synchrones
  • T haut de la hiérarchie des répertoires

setfattr: modifier les attributs de fichier étendus

Utilisation (attribut défini):

    setfattr -n <name> -v <value> files...

Utilisation (supprimer):

    setfattr -x <name> files...

name est le nom de l'attribut étendu à définir ou à supprimer

value est la nouvelle valeur de l'attribut étendu


setfacl: modifier les listes de contrôle d'accès aux fichiers

Usage:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option doit comprendre l'un des éléments suivants:

  • --set définir l'ACL d'un fichier ou d'un répertoire, en remplaçant l'ACL précédente
  • -m| --modifymodifier l'ACL d'un fichier ou d'un répertoire
  • -x| --remove supprimer les entrées ACL d'un fichier ou d'un répertoire

    targetest l'une des lettres ugmo(ou la forme plus longue illustrée ci-dessous):

  • u, usersautorisation d'un utilisateur nommé identifié par param, par défaut le propriétaire du fichier uids'il est omis

  • g, groupautorisation d'un groupe nommé identifié par param, par défaut au groupe propriétaire uidsi omis
  • m, maskmasque des droits effectifs
  • o, otherautorisations d'autrui

    permsest une combinaison des lettres rwxX, qui correspondent aux autorisations:

  • r lis

  • w écrire
  • x exécuter
  • X exécuter uniquement si le fichier est un répertoire ou dispose déjà d'une autorisation d'exécution pour un utilisateur

    Il permspeut également s'agir d'un chiffre octal ( 0- 7) indiquant l'ensemble des autorisations.


setcap: modifier les capacités d'un fichier

Usage:

    setcap <capability-clause> file 

A se capability-clausecompose d'une liste de noms de capacités séparés par des virgules, suivie d'une liste de paires d'indicateurs-opérateurs.

Les opérateurs disponibles sont =, +et -. Les indicateurs disponibles sont e, iet pqui correspondent aux ensembles de capacités effectifs , héritables et autorisés .

L' =opérateur augmentera les ensembles de capacités spécifiés et réinitialisera les autres. Si aucun indicateur n'est donné conjointement avec l' =opérateur, tous les ensembles de capacités seront réinitialisés. Les opérateurs +et -augmenteront ou diminueront respectivement le ou les ensembles de capacités spécifiés.


chcon: changer le contexte de sécurité du fichier SELinux

Usage:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

utilisateur est l'utilisateur SELinux, tel que user_u, system_uou root.

le rôle est le rôle SELinux (toujours object_rpour les fichiers)

type est le type de sujet SELinux


chsmack: modifier les attributs étendus SMACK

Usage:

    chsmack -a <value> file

valueest le libellé SMACK à définir pour l' SMACK64attribut de fichier étendu


setrichacl : changer la liste de contrôle d'accès riche.

Les richacl sont une fonctionnalité qui ajoutera des listes de contrôle d'accès plus avancées.

Actuellement un travail en cours, je ne peux donc pas vous en dire beaucoup à leur sujet. Je ne les ai pas utilisés.

Voir aussi cette question. Existe-t-il des ACL de système de fichiers plus avancés que les ACL «rwx» et POSIX traditionnels? et la page de manuel

Thomas Nyman
la source
5
+1 Si vous avez ajouté des exemples d'utilisation de chaque cmd, cette réponse serait extrêmement utile, en tant que réponse canonique, nous pouvons faire référence sur la route!
slm
1
@slm Merci pour la suggestion. J'ai ajouté une brève explication d'utilisation pour chaque commande.
Thomas Nyman
Un avertissement à toute personne souhaitant aller plus loin que ce qui est montré ici. J'ai utilisé la capacité décrite ici. Cependant, essayer de les hériter (utilement) sur fork et exec semble impossible. Je pense qu'il y a un bug voir unix.stackexchange.com/questions/196483/…
ctrl-alt-delor
Le bogue que j'ai mentionné dans le commentaire précédent, c'était un bogue de conception et a été corrigé dans le noyau 4.3 avec l'ajout de capacités ambiantes, voir man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor
1
J'adorerais voir des exemples sur tout cela, cela deviendrait une réponse canonique!
statquant le
1

d'un haut niveau:

  • les autorisations de base du système de fichiers prises en charge par tous les systèmes linux et tous les systèmes de fichiers qui sont -rwxrwxrwxgérés par chmod, ainsi que les identificateurs de propriétaire et de groupe liés à chaque fichier ou dossier du système de fichiers géré par chownet chgrp; tout le monde connaît fondamentalement cette pièce.
  • Attributs de fichier étendus abrégés ou connus par xattr . Ce sont des fonctionnalités du système de fichiers qui permettent aux utilisateurs d'associer des fichiers informatiques à des métadonnées non interprétées par le système de fichiers, tandis que les attributs normaux ont un objectif strictement défini par le système de fichiers; les attributs sont des paires nom: valeur associées en permanence à des fichiers et des répertoires, similaires aux chaînes d'environnement associées à un processus. Il existe des commandes Linux spécifiques liées à la simple définition de ces métadonnées dans divers fichiers / dossiers.
  • SELINUX dit linux sécurisé . Vous pouvez rechercher sur Internet l'historique. Sachez également qu'il existe des alternatives à SELINUX comme AppArmor, et il y en a probablement d'autres. À ce stade, ce sont des modules du noyau qui fournissent des fonctionnalités et des mécanismes pour faire du MAC (contrôle d'accès obligatoire) en utilisant xattr; selinux stocke les étiquettes de sécurité des fichiers dans xattrs . Et il existe des commandes spécifiques à selinux.

autres points clés:

  • l'ère et la version de gnu / linux sont importantes pour xattr et selinux pour ce qui est disponible et ce qui est fonctionnel.
  • il est rapporté que tous les systèmes de fichiers ne prennent pas en charge xattr; il vaut mieux laisser à la recherche individuelle basée sur la distribution et la version de linux utilisée (rhel / suse / debian, irix, solaris, aix, unix des années 1960)
  • ce sont vraiment les autorisations de base inhérentes aux fichiers / dossiers avec uid / gid et xattr qui rendent tout possible; SELinux utilise les xattr pour stocker les étiquettes de sécurité des fichiers / dossiers ... avec selinux tout le travail de bas niveau est quelque peu fait / défini dans les xattr pour que vous puissiez l'utiliser. Donc, si votre ancien système de fichiers ne prend pas en charge xattr, vous n'utiliserez pas selinux.
  • vous pouvez activer ou désactiver selinux (ou apparmor ou tout autre module du noyau)
  • selon votre version de linux, peut être en mesure d'activer ou de désactiver les xattr pour un système de fichiers monté donné; Je me souviens dans SLES 11 l'option de montage fstab de user_xattret je pouvais choisir de ne pas avoir xattr disponible sur le système de fichiers racine au moment de l'installation; je pense maintenant avec RHEL / CentOS 7 que xattr est là par défaut et vous ne pouvez pas l'avoir.
  • lorsque vous faites un lssi vous voyez -rwxrwxrwx+cela +indique qu'un attribut de fichier étendu est présent sur cet objet .
  • Liste de contrôle d'accès (ACL): est une liste d'autorisations attachées à un objet. Une ACL spécifie quels utilisateurs ou processus système ont accès aux objets, ainsi que les opérations autorisées sur des objets donnés.
  • de centos wiki selinux: selinux est un mécanisme de sécurité MAC implémenté dans le noyau; sans SELinux activé, seules les méthodes traditionnelles de contrôle d'accès discrétionnaire (DAC) telles que les autorisations de fichiers ou les listes de contrôle d'accès (ACL) sont utilisées pour contrôler l'accès aux fichiers des utilisateurs; Les utilisateurs et les programmes sont autorisés à accorder des autorisations de fichiers non sécurisés à d'autres ou, à l'inverse, à accéder à des parties du système qui ne devraient pas autrement être nécessaires pour un fonctionnement normal; Essentiellement, sous le modèle DAC traditionnel, il existe deux niveaux de privilège, root et utilisateur, et aucun moyen facile d'appliquer un modèle de moindre privilège. De nombreux processus lancés par root abandonnent plus tard leurs droits pour s'exécuter en tant qu'utilisateur restreint
  • vaut la peine de lire pour mettre en perspective l'utilisation des xattr et des ACL, car linux [noyau] traite tout comme un fichier (blocs de périphériques ou ports réseau), vous pouvez étiqueter presque n'importe quoi avec un xattr et appliquer une sorte de contrôle d'accès via selinux, c'est pas seulement des fichiers / dossiers. https://wiki.centos.org/HowTos/SELinux
  • xattr peut causer des problèmes avec le déplacement des données entre les systèmes et les systèmes de fichiers, et NFS, où un [plus récent] système ayant une prise en charge plus complète de xattr par rapport aux systèmes plus anciens qui pourraient ne pas reconnaître tous ces attributs étendus [le cas échéant]. N'oubliez pas d'utiliser tarsur des trucs avec xattr, s'il reste sur ce système pas de problème mais s'il va ailleurs peut être problématique si les xattr sont importants (ie samba et copie entre win10 ntfs et linux ext3 / 4, btrfs, xfs; ou retour) entre les périphériques de stockage connectés au réseau)
  • s'il n'y a pas de selinux ou autre mécanisme appliquant les ACL par ce qui est défini dans xattrs, alors xattrs ne peut théoriquement rien signifier et être abandonné ou dépouillé parce qu'à ce moment-là, ce ne sont que des bagages supplémentaires.
  • attention invalidante SELinux maintenant dans RHEL / CentOS 7 parce que si le système de fichiers lables via xattr sont perdus , il causera des problèmes lors de retour de SELinux à l' application ou permissive ; encore une fois, cela dépend de votre version de linux et de la façon dont il utilise xattr via selinux.

Le partage Samba de base ne fonctionne pas dans RHEL / CentOS 7 ... car selinux par défaut est défini sur la mise en application; selinux a tout refusé jusqu'à ce que vous l'autorisiez, désactivez donc selinux (mauvais) ou définissez-le sur permissif. Si vous laissez selinux comme force obligatoire, vous devez étiqueter le dossier que vous souhaitez partager avec un attribut étendu, afin que selinux reconnaisse et autorise le partage. Donc, si vous laissez selinux appliquer alors avec toutes les commandes selinux (qui définiront alors les xattrs nécessaires ):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

vous utilisez en outre selinux, sur le système linux avec ce partage samba, pour appliquer des restrictions sur les fichiers / dossiers sous ce partage samba (en utilisant n'importe quel attribut étendu). Étant donné que ces fichiers / dossiers sont partagés, un utilisateur en copie légitimement sur son ordinateur win10 puis les copie en arrière, perdant l'attribut étendu. Maintenant, après cette copie de va-et-vient, sur ce système linux, selinux restreindra l'accès auxdits fichiers parce que le xattr nécessaire n'est plus présent, et les utilisateurs / administrateurs frappent la tête en se demandant pourquoi les choses ont bien fonctionné maintenant, cela ne fonctionne pas ... set selinux pour permettre et reconnaître le problème des xattrs perdus apparaissant dans les journaux d'audit, mais cela n'indiquera pas directement qu'il s'agit d'un résultat de la copie aller-retour de la perte du xattr. Tenez également compte de la sauvegarde et de la restauration des données et des travaux potentiels à retenirxattrs en plus de uid / gid si vous souhaitez appliquer la sécurité basée sur le bon xattrs.

Ron
la source