為隔離Hadoop操作權限,避免使用root賬戶,需創建專用用戶和用戶組:
# 創建hadoop用戶組
sudo groupadd hadoop
# 創建hadoop用戶(-r表示系統用戶,-g指定所屬組)
sudo useradd -r -g hadoop hadoop
# 設置hadoop用戶密碼(可選)
sudo passwd hadoop
說明:后續Hadoop相關操作均使用hadoop
用戶執行,提升安全性。
將Hadoop安裝目錄(如/opt/hadoop
)及關鍵文件的所有權賦予hadoop
用戶,確保其有足夠權限執行操作:
# 創建Hadoop安裝目錄(若未安裝)
sudo mkdir -p /opt/hadoop
# 設置目錄所有者及權限(755:所有者可讀寫執行,其他用戶可讀執行)
sudo chown -R hadoop:hadoop /opt/hadoop
sudo chmod -R 755 /opt/hadoop
注意:若Hadoop通過包管理器(如apt
)安裝,默認路徑可能為/usr/local/hadoop
,需調整命令中的路徑。
為方便Hadoop用戶執行管理員操作(如啟動集群、修改系統配置),需將其加入sudo
組:
# 將hadoop用戶添加到sudo組
sudo usermod -aG sudo hadoop
驗證:切換至hadoop
用戶,執行sudo ls /root
,若無需密碼即可列出內容,則配置成功。
Hadoop集群節點間需通過SSH無密碼通信(如NameNode與DataNode),步驟如下:
# 切換至hadoop用戶
su - hadoop
# 生成RSA密鑰對(無密碼)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 將公鑰復制到本地authorized_keys(實現本地免密)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 設置authorized_keys權限(600:僅所有者可讀寫)
chmod 600 ~/.ssh/authorized_keys
驗證:執行ssh localhost
,若無需輸入密碼即可登錄,則配置成功。
為hadoop
用戶設置Hadoop相關環境變量,確保命令全局可用:
# 編輯hadoop用戶的bash配置文件
su - hadoop
vim ~/.bashrc
在文件末尾添加以下內容(根據實際安裝路徑調整):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替換為你的JDK路徑
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
保存后執行source ~/.bashrc
使配置生效。
通過修改Hadoop配置文件,啟用HDFS權限檢查及ACL(訪問控制列表)功能:
# 編輯core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
添加以下內容:
<property>
<name>hadoop.security.authentication</name>
<value>simple</value> <!-- 簡單認證(生產環境建議用kerberos) -->
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>true</value> <!-- 開啟HDFS權限檢查 -->
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value> <!-- 開啟Namenode ACL -->
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value> <!-- 開啟Datanode ACL -->
</property>
# 編輯hdfs-site.xml
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
添加以下內容:
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value> <!-- 指定超級用戶組(hadoop組用戶擁有超級權限) -->
</property>
重啟HDFS使配置生效:
stop-dfs.sh && start-dfs.sh
通過hdfs dfs
命令設置文件/目錄權限及所有權:
# 查看HDFS根目錄權限
hdfs dfs -ls /
# 創建目錄并設置權限(755:所有者可讀寫執行,組和其他用戶可讀執行)
hdfs dfs -mkdir -p /user/hadoop/data
hdfs dfs -chmod 755 /user/hadoop/data
# 修改目錄所有者(將data目錄所有者設為hadoop用戶,組設為hadoop組)
hdfs dfs -chown hadoop:hadoop /user/hadoop/data
# 設置文件權限(644:所有者可讀寫,其他用戶可讀)
hdfs dfs -chmod 644 /user/hadoop/data/test.txt
說明:HDFS權限模型與Linux類似,采用UGO
(用戶、組、其他)模式,權限值對應:r
=4、w
=2、x
=1。
若需為特定用戶或組設置額外權限,可使用ACL(訪問控制列表):
# 為用戶hadoop1添加目錄讀寫執行權限
hdfs dfs -setfacl -m user:hadoop1:rwx /user/hadoop/data
# 為組analytics添加目錄讀權限
hdfs dfs -setfacl -m group:analytics:r /user/hadoop/data
# 刪除用戶hadoop1的所有權限
hdfs dfs -setfacl -x user:hadoop1 /user/hadoop/data
# 查看目錄ACL信息
hdfs dfs -getfacl /user/hadoop/data
說明:ACL適用于需要更靈活權限的場景(如允許特定用戶訪問某目錄),但需確保dfs.namenode.acls.enabled
已開啟。
777
),應根據實際需求分配最小必要權限;hdfs dfs -ls
和hdfs dfs -getfacl
檢查權限設置,防止未授權訪問。