本人翻譯自: http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ServiceLevelAuth.html 譯註:相對於kerberos等等而言,這個顯得簡單得多,但作用也不小。在無法知道用戶密碼或者無法接近 ...
本人翻譯自: http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ServiceLevelAuth.html
譯註:相對於kerberos等等而言,這個顯得簡單得多,但作用也不小。在無法知道用戶密碼或者無法接近主機的前提下,一個程式或者人是無法訪問特定服務的。
但在實際應用中,可能主要控制對客戶端的訪問。
1.目的
描述如何配置和管理服務級別授權
2.要求
要求hadoop已經正確安裝,並可用。
3.概覽
服務級別授權是最初的授權機制,用於確保客戶端是使用預配許可權連接到特定的hadoop服務。例如,一個MR集群可以有自己的機制,允許特定用戶/組可以連接,並提交作業。
$HADOOP_CONF_DIR/hadoop-policy.xml配置文件用於定義acl,以訪問各種hadoop服務。
服務級別授權比其它的操作更早執行,這些操作包括文件許可權檢查,job隊列存取控制等等。
4.配置
本章節描述如何配置hadoop-policy.xml來實現服務級別授權。
4.1啟用服務級別授權
預設這個功能是關閉的。設置 hadoop.security.authorization =true (文件$HADOOP_CONF_DIR/core-site.xml)。
4.2 hadoop服務和配置屬性
表1
Property | Service/可以訪問的服務 | 中文說明 |
---|---|---|
security.client.protocol.acl | ACL for ClientProtocol, which is used by user code via the DistributedFileSystem. | 用於使用分散式文件系統的用戶代碼 |
security.client.datanode.protocol.acl | ACL for ClientDatanodeProtocol, the client-to-datanode protocol for block recovery. | 客戶端到數據節點的塊恢復協議 |
security.datanode.protocol.acl | ACL for DatanodeProtocol, which is used by datanodes to communicate with the namenode. | 數據節點和名稱節點通訊的數據節點協議 |
security.inter.datanode.protocol.acl | ACL for InterDatanodeProtocol, the inter-datanode protocol for updating generation timestamp. | 數據節點之間的,用於更新時間戳 |
security.namenode.protocol.acl | ACL for NamenodeProtocol, the protocol used by the secondary namenode to communicate with the namenode. | 第二節點和主節點的協議 |
security.job.client.protocol.acl | ACL for JobSubmissionProtocol, used by job clients to communciate with the resourcemanager for job submission, querying job status etc. | 作業客戶端和資源管理器之間 |
security.job.task.protocol.acl | ACL for TaskUmbilicalProtocol, used by the map and reduce tasks to communicate with the parent nodemanager. | mr任務和節點管理器之間 |
security.refresh.policy.protocol.acl | ACL for RefreshAuthorizationPolicyProtocol, used by the dfsadmin and rmadmin commands to refresh the security policy in-effect. | dfsadmin/rmadmin刷新安全策略 |
security.ha.service.protocol.acl | ACL for HAService protocol used by HAAdmin to manage the active and stand-by states of namenode. | HAADMIN用於管理名稱節點狀態 |
譯註:以上就是用戶可以訪問的hadoop服務列表,為這些服務列表設定acl就可以通過acl控制了。
4.3acl
$HADOOP_CONF_DIR/hadoop-policy.xml defines an access control list for each Hadoop service. Every access control list has a simple format:
The list of users and groups are both comma separated list of names. The two lists are separated by a space.
$HADOOP_CONF_DIR/hadoop-policy.xml定義了每個hadoop服務的acl(存取控制列表,譯註:這個不同於文件的acl)。
acl格式簡單:用戶,組之間使用逗號分隔,不同列表使用空格分開。
例如: user1,user2 group1,group2.
如果只是組,那麼在行前面插入一個空格。
*表示所有用戶都允許訪問服務。
如果沒有為某個服務定義acl,那麼會使用 security.service.authorization.default.acl的acl(如果這個也沒有設定,那麼系統使用*,表示沒有限制)
阻擋列表-黑名單
有的時候,需要阻止一些acl(相當於使用了黑名單)。阻擋列表格式同acl.設置方式,同樣是在$HADOOP_CONF_DIR/hadoop-policy.xml。只要把表1中property後加上.blocked就可以了。
例如security.client.protocol.acl的黑名單就是 security.client.protocol.acl.block
對於特定的服務,有可能同時設定acl和黑名單。如果用戶在acl,但不在黑名單,那麼是可以訪問服務的。換言之,黑名單優先。
如果服務沒有定義黑名單,那麼會使用security.service.authorization.default.acl.blocked的值,如果它的值沒有定義,那麼就是沒有(不阻擋).
4.4刷新服務級別授權配置
刷新名稱節點和資源管理器的服務級別授權配置,不需要重啟hadoop主服務。集群管理員可以主節點上的$HADOOP_CONF_DIR/hadoop-policy.xml,然後同時名稱節點和資源管理器重載對應的配置。它們的名稱分別如下:
名稱節點
$ bin/hdfs dfsadmin -refreshServiceAcl
資源管理器
$ bin/yarn rmadmin -refreshServiceAcl
當然,用戶可以使用$HADOOP_CONF_DIR/hadoop-policy.xml中的security.refresh.policy.protocol.acl限制只有特定的用戶/組可以執行這個刷新操作。
主機訪問名單
除了控制用戶的訪問,也可以控制特定的主機對hadoop服務的訪問。
屬性名稱的定義方式同黑名單,就是在acl屬性後面添加.hosts.例如security.client.protocol.acl對應的就是security.client.protocol.acl.hosts
如果沒有為服務定義主機列表,那麼預設使用security.service.authorization.default.hosts,如果該屬性沒有設定,就是*(所有主機可以訪問)。
主機訪問黑名單
定義,不可訪問的主機,定義方式同acl黑名單,就是在主機名單後面加.blocked
例如security.service.authorization.default.hosts對應的就是security.service.authorization.default.hosts.blocked
如果沒有定義,那麼就使用security.service.authorization.default.hosts.blocked,如果這個沒有隻,就不阻擋任意主機.
4.5例子
允許用戶alice,bob mapreduce(組)可以可以提交作業給mr集群。
<property>
<name>security.job.client.protocol.acl</name>
<value>alice,bob mapreduce</value>
</property>
只有屬於datanodes組的用戶運行得datanode可以和名稱節點通訊。
<property>
<name>security.datanode.protocol.acl</name>
<value>datanodes</value>
</property>
允許任意用戶以DFS客戶端的方式和HDFS集群通訊。
<property>
<name>security.client.protocol.acl</name>
<value>*</value>
</property>