Vérification des autorisations du noyau HDFS (ACL)

12 0 0 0

1. Introduction à ACL


La liste de contrôle d'accès (ACL) de HDFS est similaire à la liste de contrôle d'accès POSIX. (Les serveurs exécutant le système d'exploitation Linux peuvent également utiliser ACL pour gérer les autorisations de fichiers). Outre le mécanisme de contrôle des autorisations traditionnel du système de fichiers Linux, HDFS ACL fournit un contrôle des autorisations de fichiers plus précis. Dans le système d'exploitation Linux, un fichier contient trois groupes de bits de contrôle des autorisations, correspondant au propriétaire , au groupe et autres . Vous pouvez définir les autorisations de lecture, d'écriture et d'exécution pour les utilisateurs des trois groupes. Toutefois, si vous souhaitez définir des utilisateurs spéciaux qui n'appartiennent pas à un groupe connu, vous devez utiliser ACL. Pour utiliser ACL dans HDFS, définissez dfs.namenode.acls.enabled et dfs.permissions.enabled sur true .


2. Autres connaissances sur ACL


2.1. Autorisation de répertoire


Si vous ne spécifiez pas l'autorisation d'un répertoire lors de sa création, l'autorisation sur le sous-répertoire est déterminée par les méthodes suivantes:


1. Si l'autorisation du répertoire parent contient l'autorisation par défaut, le sous-répertoire hérite de l'autorisation ACL du répertoire parent.


100235hdlb50le95pj9zil.png? 1.png

 

2 Si le répertoire parent n'a pas l'autorisation par défaut, l'autorisation du sous-répertoire est l'autorisation par défaut 777 soustraite par la valeur de umask .


Par exemple, si l'autorisation du répertoire parent / test est 777 et que la valeur de umask est 077, celle du sous - répertoire / test / test1 est 700 (777 - 077 = 700).


100256u11u1outte5zoekz.png? 2.png

 

2.2. Permission de fichier


Si vous ne spécifiez pas l'autorisation d'un fichier lors de sa création, l'autorisation sur le fichier est déterminée par les méthodes suivantes:


1.        Si l'autorisation du répertoire parent contient l'autorisation par défaut, le fichier créé hérite de l'autorisation par défaut.


2        Si le répertoire parent n'a pas l'autorisation par défaut, l'autorisation du fichier est l'autorisation par défaut 666 soustraite par la valeur de umask .


100408bx0w4xzzeetpwpgx.png? 3.png

 

2.3. Calcul de la valeur de masque


Le masque indique la permission la plus élevée de l'utilisateur et du groupe d'utilisateurs, à l'exception du propriétaire du fichier cible (ou du répertoire).


l    La valeur de masque du répertoire en cours est l'union de toutes les autorisations ACL avec le nom acl spécifié et des autorisations ACL de tous les groupes.


org.apache.hadoop.hdfs.server.namenode.AclTransformation # CalculateMasks


100425xffca0fgiledzc01.png? 4.png


La figure suivante montre les droits d'accès ACL du répertoire / test3 / test2 .


100534f1h73ot161499x13.png? 5.png

 

La liste de contrôle d'accès qui répond aux exigences est la suivante:


utilisateur: admin: rwx // entry.getName ()! = null

utilisateur: test: rwx // entry.getName ()! = null

group :: rx // entry.getType () == GROUP

group: testacl_1537923511934: rwx // entry.getType () == GROUP & entry.getName ()! = null


La valeur de masque du répertoire est la suivante: rwx (union de rwx, rwx, rx et rwx)


l    La valeur de masque est calculée en fonction de l'autorisation ACL et affecte l'autorisation valide.


Si vous exécutez la commande chmod ou hdfs dfs -setfacl -m mask :: --- / test3 / test2 pour définir l'autorisation sur / test3 / test2 sur 700 , les autorisations valides des autorisations ACL avec le nom acl spécifié et les autorisations ACL de tous les groupes sont affectés.


org.apache.hadoop.fs.permission.AclStatus # getEffectivePermission (org.apache.hadoop.fs.permission.AclEntry,

org.apache.hadoop.fs.permission.FsPermission)


100600fj2xs0mk25zj232v.png? 6.png


100624jdw4dkgb7wgcck7r.png? 7.png


2.4. Umask


La valeur par défaut de fs.permissions.umask-mode est 022 .


l    Un répertoire ne dispose pas de l'autorisation ACL lors de la création.


1. Si l'autorisation de répertoire n'est pas spécifiée lors de la création du répertoire à l'aide de la commande mkdir , l'autorisation par défaut est utilisée.


Par défaut, l'autorisation de répertoire est 777 et l'autorisation de fichier est 666.


org.apache.hadoop.fs.permission.FsPermission # getDirDefault


100740n9ai0ip3dn4dw8tq.png? 8.png

 

2 Lors de la création d'un répertoire, calculez l'autorisation réelle sur celui-ci en fonction de l'autorisation du répertoire ou du fichier et de la valeur d' Umask , puis créez un répertoire ou un fichier en fonction des informations relatives à l'autorisation réelle.


org.apache.hadoop.hdfs.DFSClient # mkdirs (java.lang.String, org.apache.hadoop.fs.permission.FsPermission, booléen)


100759fatxpx9kpax5ecel.png? 9.png

 

org.apache.hadoop.hdfs.DFSClient # applyUMaskDir


100815yc73ccn4n3cxmg5n.png? 10.png

 

org.apache.hadoop.fs.permission.FsCreateModes # applyUMask


100837fw4cdbfqdkc7ag4n.png? 11.png

 

org.apache.hadoop.fs.permission.FsPermission # applyUMask


100917qhl8m1jgjbpajgrv.png? 12.png

 

l    Si le répertoire parent dispose de l'autorisation par défaut lorsqu'un répertoire est créé, Umask devient invalide.


Le système calcule l'autorisation réelle du répertoire en fonction de l'autorisation et d' Umask , puis appelle primitiveMkdir pour créer un répertoire basé sur l'autorisation réelle.


org.apache.hadoop.hdfs.DFSClient # mkdirs (java.lang.String, org.apache.hadoop.fs.permission.FsPermission, booléen)


100940a0tl8h083s80atsh.png? 13.png

 

La méthode primitiveMkdir appelle la méthode unrotectedMkdir. Dans cette méthode, un INodeDirectory est créé en fonction de l'autorisation réelle du répertoire, et INodeDirectory est ajouté au fsd.addLastINode dans INodesInPath. Au cours du processus addLastINode, le système vérifie s'il existe un répertoire parent. Si tel est le cas, le système ajoute le nœud à l'enfant du répertoire parent et copie les informations par défaut du répertoire parent.


org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp # unrotectedMkdir


100950muohfrurfn9rzu2f.png? 14.png

 

org.apache.hadoop.hdfs.server.namenode.FSDirectory # addLastINode


101011l2o5x2x12pnugp5n.png? 15.png

 

org.apache.hadoop.hdfs.server.namenode.FSDirectory # copyINodeDefaultAcl


Dans cette méthode:


- Définissez l'autorisation du répertoire sur l'autorisation par défaut 777 (l'autorisation non calculée avec Umask ).


- Si le répertoire parent ne contient pas l'autorisation ACL par défaut, définissez l'autorisation sur le répertoire sur l'autorisation calculée à l'aide d' Umask .


- Si le répertoire parent dispose d'une autorisation ACL par défaut, définissez l'autorisation ACL du répertoire sur l'autorisation ACL par défaut du répertoire parent.


101023haaqb2u2j4zoj2iw.png? 16.png

 

org.apache.hadoop.hdfs.server.namenode.AclStorage # copyINodeDefaultAcl


101204ez0hfzznvwwwgzsy.png? 17.png

 

2.5. Les commandes


l    Commande pour interroger l'autorisation ACL: hdfs dfs -getfacl / test3 / test2 / test / test


l    Commande permettant de définir ou de modifier l'autorisation de la liste de contrôle d'accès: hdfs dfs -setfacl -m utilisateur: super: rwx / test3 / test2 / test


l    Commande pour annuler toutes les autorisations ACL: hdfs dfs -setfacl -k / test3 / test2 / test / test


l    Commande de suppression d'une autorisation ACL: hdfs dfs -setfacl -x groupe: test / test3 / test2 / test / test


2.6 Information supplémentaire


l    Le journal d'audit de l'exécution de la commande chmod est imprimé sous la forme setPermission.


Par exemple: hdfs dfs –chmod 700 / test3 / test2 / testacl / testacl6


101241t29gkfkhxisssizk.png? 18.png

 

l    La commande utilisée pour forcer le masquage des journaux d'audit est imprimée en tant que modifyAclEntries . Si masque est défini sur ---, seules les autorisations de groupe et les autorisations des utilisateurs avec le nom spécifié sont affectées. Pour la commande perm , l'autorisation de groupe est ---.


Par exemple: hdfs dfs –setfacl –m masque :: --- / test3 / test2 / testacl / testacl5


101319i3pvvom7mvevgmu6.png? 19.png

 

l    La figure suivante illustre le journal d'audit imprimé de la création du répertoire à l'aide de la commande mkdir .


Par exemple: hdfs dfs –mkdir / test3 / test2 / test / testacl2


101330wnvpbv3svkn01f30.png? 20.png

 

Lorsque vous exécutez la commande mkdir pour afficher les autorisations dans les journaux d'audit, faites attention aux points suivants:


-      Si le répertoire en cours ne contient pas l'autorisation ACL avec le nom spécifié et que seul l' utilisateur: groupe: autre existe, l'autorisation de l' utilisateur: groupe: autre est imprimée.


-      Si le répertoire en cours contient l'autorisation ACL avec le nom spécifié, l'autorisation de l' utilisateur: masque: autre est imprimée.


org.apache.hadoop.hdfs.server.namenode.AclStorage # copyINodeDefaultAcl


101343ptvx1d03sezve7e1.png? 21.png

 

org.apache.hadoop.hdfs.server.namenode.AclStorage # createFsPermissionForExtendedAcl


101358v5v3q3br355zqq5o.png? 22.png

 

3. Traitement des autorisations non ACL


Lors des opérations de lecture / écriture HDFS, le système vérifie si HDFS est autorisé. Le processus de vérification est le suivant:


1. Le système vérifie si l'utilisateur actuel est un super utilisateur. Si c'est le cas, aucune vérification d'autorisation n'est effectuée.


org.apache.hadoop.hdfs.server.namenode.FSDirectory # checkPermission (org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker, org.apache.hadoop.hdfs.server.namenode.INodesInPath, boolean, org.apache. hadoop.fs.permission.FsAction, org.apache.hadoop.fs.permission.FsAction, org.apache.hadoop.fs.permission.FsAction, org.apache.hadoop.fs.permission.FsAction, booléen)


101411hmn53w3mtwbip5qw.png? 23.png

 

La logique permettant de déterminer si un utilisateur est un super utilisateur est la suivante:


Vérifiez si l'utilisateur actuel est un utilisateur connecté au serveur (utilisateur hdfs par défaut) ou si le groupe de propriétaires de l'utilisateur actuel contient le groupe de supergroupe . Dans la figure suivante, utilisateur et groupes indiquent le groupe d'utilisateurs et de propriétaires de l'utilisateur et fsowner indique l'utilisateur connecté au serveur.


org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker # isSuperUser


101422idf9a45vd334usdu.png? 24.png


L'utilisateur pour la connexion au serveur HDFS est l'utilisateur défini dans dfs.namenode.kerberos.principal dans le fichier de configuration, qui est hdfs par défaut pour FusionInsight.


org.apache.hadoop.hdfs.server.namenode.NameNode # loginAsNameNodeUser


102221fifa3kx95ktxk96m.png? 25.png

 

2 Vérifiez si l' utilisateur , le groupe et les autres disposent des autorisations correspondantes. Si les autorisations sont insuffisantes, une erreur est signalée indiquant que les autorisations sont anormales.


l    Pour créer un répertoire ou écrire un fichier, vous devez disposer de l'autorisation -wx sur le répertoire parent.


l    Pour supprimer un répertoire ou un fichier, vous devez disposer de l'autorisation -wx sur le répertoire parent.


l    Pour répertorier les fichiers dans un répertoire, vous devez disposer de l'autorisation rx.


org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker # hasPermission


102045l6k708ve5epa8n3k.png? 26.png


  • x
  • Standard:

Responder

envoyer
Connectez-vous pour répondre. Se connecter | Enregistrer

Remarque Remarque : Afin de protéger vos droits et intérêts légitimes, ceux de la communauté et des tiers, ne divulguez aucun contenu qui pourrait présenter des risques juridiques pour toutes les parties. Le contenu interdit comprend, sans toutefois s'y limiter, le contenu politiquement sensible, le contenu lié à la pornographie, aux jeux d'argent, à l'abus et au trafic de drogues, le contenu qui peut divulguer ou enfreindre la propriété intellectuelle d'autrui, y compris les secrets professionnels, les marques commerciales, les droits d'auteur et les brevets, ainsi que la vie privée personnelle. Ne partagez pas votre nom d'utilisateur ou votre mot de passe avec d'autres personnes. Toutes les opérations effectuées à partir de votre compte seront considérées comme vos propres actions, et toutes les conséquences en découlant vous seront imputées. Pour plus de détails, voir « Politique de confidentialité ».
Si le bouton de la pièce-jointe n'est pas disponible, mettez à jour Adobe Flash Player à la dernière version.
Connectez-vous pour participer à la communication et au partage

Connectez-vous pour participer à la communication et au partage

S'identifier