2016-05-24 3 views
1

В Hadoop я включил авторизацию. Я установил несколько acl для каталога.Значение маски, не показанное в GETFACL, с использованием webhdfs

Когда я выполняю команду getfacl в bin-bin, я могу увидеть значение маски в этом.

hadoop fs -getfacl /Kumar 

# file: /Kumar 
# owner: Kumar 
# group: Hadoop 
user::rwx 
user:Babu:rwx 
group::r-x 
mask::rwx 
other::r-x 

Если я выполняю ту же команду, используя webhdfs, значение маски не отображается.

http://localhost:50070/webhdfs/v1/Kumar?op=GETACLSTATUS 

{ 
    "AclStatus": { 
    "entries": [ 
     "user:Babu:rwx", 
     "group::r-x" 
    ], 
    "group": "Hadoop", 
    "owner": "Kumar", 
    "permission": "775", 
    "stickyBit": false 
    } 
} 

Какая причина не показывает значение маски в webhdfs для команды GETFACL.

Помогите мне разобраться.

ответ

2

HDFS реализует модель POSIX ACL. Связанная документация объясняет, что запись маски сохраняется в битах разрешения группы классической модели разрешения POSIX. Это делается для поддержки требований ACL POSIX, а также поддерживает обратную совместимость с существующими инструментами, такими как chmod, которые не знают о расширенных записях ACL. Цитирование этого документа:

В минимальных списках ACL разрешения группового класса идентичны разрешениям группы . В расширенных списках ACL класс группы может содержать записи для дополнительных пользователей или групп. В результате возникает проблема : некоторые из этих дополнительных записей могут содержать разрешения, которые не содержатся в записи группы владения, поэтому права доступа группы владельца могут отличаться от разрешений группового класса.

Эта проблема решена благодаря вводу маски. С минимальными списками ACL разрешения группового класса сопоставляются с правами доступа группы . С расширенными списками ACL разрешения класса группы сопоставляются с разрешениями доступа к маскам, тогда как запись группы владения определяет права доступа к группе.

...

Когда приложение изменяет любой из владельца, группы или другого класса разрешений (например, с помощью команды CHMOD), соответствующая запись ACL изменения, а также. Аналогично, когда приложение изменяет разрешения записи ACL, которая сопоставляется с одним из классов пользователя, разрешения изменения класса.

Это относится к вашему вопросу, поскольку это означает, что на самом деле маску не сохраняют как расширенную запись ACL. Вместо этого он находится в битах разрешения. При запросе WebHDFS вы сделали «сырой» вызов API для получения информации об ACL. При запуске getfacl вы запустили приложение, которое добавляет дополнительную логику отображения поверх этого вызова API. getfacl знает, что для файла с ACL биты разрешения группы интерпретируются как маска, и поэтому они отображаются соответствующим образом.

Это не относится к WebHDFS. Если приложение должно было вызвать getAclStatus через RPC-протокол NameNode, тогда он увидит эквивалент ответа WebHDFS. Кроме того, если вы должны использовать команду getfacl на URI webhdfs://, тогда команда все равно отобразит маску, потому что приложение знает, как применять эту логику, независимо от реализации FileSystem.

+0

Благодарим вас за подробную информацию. – Kumar