HBase与CentOS安全设置指南
定期通过sudo yum update命令更新CentOS系统及所有已安装软件包,及时修补已知安全漏洞,降低被攻击风险。
使用firewalld(CentOS默认防火墙)限制对HBase相关端口的访问,仅允许可信IP地址连接。例如:
# 允许SSH(22端口)、HBase Master(16000)、RegionServer(16020)等端口
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-port=16000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=16020/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
awk -F: '($2=="")' /etc/shadow检查空口令账号,使用passwd <用户名>设置密码;修改/etc/ssh/sshd_config,将PermitRootLogin yes改为PermitRootLogin no,禁止root用户直接SSH登录。/etc/pam.d/system-auth,添加password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=14 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root,要求密码长度≥14位,包含大小写字母、数字和特殊字符。/etc/pam.d/su,添加auth required pam_wheel.so group=admin,仅允许admin组用户使用su切换到root。若无需SELinux的强制访问控制,可将其设为disabled(需重启系统):
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo reboot
Kerberos是HBase安全的核心认证机制,需完成以下步骤:
sudo yum install krb5-workstation krb5-libs/etc/krb5.conf,添加Realm和KDC信息(替换YOUR-REALM.COM、kdc.yourdomain.com):[libdefaults]
default_realm = YOUR-REALM.COM
[realms]
YOUR-REALM.COM = {
kdc = kdc.yourdomain.com:88
admin_server = kdc.yourdomain.com:749
}
[domain_realm]
.yourdomain.com = YOUR-REALM.COM
yourdomain.com = YOUR-REALM.COM
kadmin.local工具创建HBase服务的Principal(hbase/_HOST@YOUR-REALM.COM),并导出Keytab文件:kadmin.local -q "addprinc -randkey hbase/_HOST@YOUR-REALM.COM"
kadmin.local -q "ktadd -k /etc/security/keytabs/hbase.service.keytab hbase/_HOST@YOUR-REALM.COM"
chmod 600 /etc/security/keytabs/hbase.service.keytab # 限制Keytab文件权限
编辑/etc/hbase/conf/hbase-site.xml,启用认证、授权及Kerberos:
<property>
<name>hbase.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.master.kerberos.principal</name>
<value>hbase/_HOST@YOUR-REALM.COM</value>
</property>
<property>
<name>hbase.regionserver.kerberos.principal</name>
<value>hbase/_HOST@YOUR-REALM.COM</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
重启HBase服务使配置生效:
sudo systemctl restart hbase-master
sudo systemctl restart hbase-regionserver
通过HBase Shell或API设置细粒度的表级权限:
# 授权用户user1对table1的读权限
hbase> grant 'user1', 'R', 'table1'
# 授权用户user2对table2的读写权限
hbase> grant 'user2', 'RW', 'table2'
# 撤销用户user1对table1的权限
hbase> revoke 'user1', 'R', 'table1'
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
AccessControlList acl = new AccessControlList("table2");
acl.addPermission(new Permission(TableName.valueOf("table2"), "user2", "RW"));
admin.setAccessControlList(acl, "default");
admin.close();
connection.close();
hbase-site.xml:<property>
<name>hbase.ssl.enabled</name>
<value>true</value>
</property>
<property>
<name>hbase.ssl.keystore.path</name>
<value>/path/to/keystore.jks</value>
</property>
<property>
<name>hbase.ssl.keystore.password</name>
<value>your_keystore_password</value>
</property>
hbase-site.xml:<property>
<name>hbase.regionserver.thrift.http.ssl.enabled</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.token.TokenAuthenticationProvider</value>
</property>
启用HBase审计日志,记录用户操作(如读、写、授权),便于事后追溯。编辑hbase-site.xml:
<property>
<name>hbase.security.audit.log.enabled</name>
<value>true</value>
</property>
<property>
<name>hbase.security.audit.log.file</name>
<value>/var/log/hbase/audit.log</value>
</property>
<property>
<name>hbase.security.audit.log.maxfilesize</name>
<value>1073741824</value> <!-- 1GB -->
</property>
<property>
<name>hbase.security.audit.log.maxbackupindex</name>
<value>10</value>
</property>
确保/var/log/hbase目录权限正确(chown -R hbase:hbase /var/log/hbase),避免日志被篡改。
定期备份HBase数据(如使用hbase snapshot命令)及配置文件(hbase-site.xml、krb5.conf),存储到异地或云存储,防止数据丢失。
使用Prometheus+Granafa监控HBase集群状态(如RegionServer内存、请求延迟),设置异常告警(如认证失败次数激增),及时发现安全威胁。
通过以上步骤,可实现CentOS系统与HBase的全面安全防护,覆盖认证、授权、加密、审计等关键环节,保障数据的安全性与完整性。