創建專用用戶和組,避免使用root運行Kafka,降低系統風險。
# 創建kafka組和用戶(-r表示系統用戶,-m自動創建家目錄)
sudo groupadd kafka
sudo useradd -m -r -g kafka kafka
將Kafka安裝目錄(如/usr/local/kafka
)的所有權賦予kafka
用戶和組,設置750
權限(所有者可讀寫執行,組可讀執行,其他用戶無權限):
sudo chown -R kafka:kafka /usr/local/kafka
sudo chmod -R 750 /usr/local/kafka
Kafka數據目錄(如/var/lib/kafka
,存儲消息日志)需嚴格限制為kafka
用戶專屬訪問:
sudo chown -R kafka:kafka /var/lib/kafka
sudo chmod -R 750 /var/lib/kafka
Kafka日志目錄(如/var/log/kafka
,存儲服務運行日志)同樣需隔離權限:
sudo chown -R kafka:kafka /var/log/kafka
sudo chmod -R 750 /var/log/kafka
配置文件(如/etc/kafka/server.properties
)需限制為root和kafka
組可讀,防止未授權修改:
sudo chown root:kafka /etc/kafka/server.properties
sudo chmod 640 /etc/kafka/server.properties
編輯server.properties
,添加以下關鍵配置以提升權限安全性:
listeners=PLAINTEXT://your_server_ip:9092
advertised.listeners=PLAINTEXT://your_server_ip:9092
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
ssl.keystore.location=/path/to/kafka.server.jks
ssl.keystore.password=your_keystore_password
authorizer.class.name=org.apache.kafka.common.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=false # 禁止無ACL時的默認訪問
super.users=User:admin # 定義超級用戶(如admin),用于管理ACL
通過systemd單元文件配置Kafka以kafka
用戶身份啟動,避免權限提升風險。
編輯/etc/systemd/system/kafka.service
(若不存在則創建),添加以下內容:
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service
[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
加載并啟動服務:
sudo systemctl daemon-reload
sudo systemctl start kafka
sudo systemctl enable kafka
通過防火墻(如iptables)僅允許可信IP訪問Kafka端口(默認9092):
# 允許特定IP(如192.168.1.100)訪問9092端口
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 9092 -j ACCEPT
# 拒絕其他IP訪問9092端口
sudo iptables -A INPUT -p tcp --dport 9092 -j DROP
# 保存規則(根據系統選擇對應命令)
sudo service iptables save # CentOS 6
sudo iptables-save > /etc/iptables/rules.v4 # Ubuntu/Debian
生成自簽名證書并導入Keystore(用于Broker間加密):
# 生成私鑰和證書
sudo openssl req -newkey rsa:2048 -nodes -keyout kafka.server.key -x509 -days 365 -out kafka.server.crt
# 轉換為Java Keystore格式
sudo keytool -import -alias kafka -file kafka.server.crt -keystore kafka.server.jks -storepass your_password -noprompt
# 設置證書權限(僅kafka用戶可訪問)
sudo chown kafka:kafka kafka.server.jks
sudo chmod 600 kafka.server.jks
創建JAAS配置文件(如/etc/kafka/kafka_server_jaas.conf
),定義Broker認證信息:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"; # 超級用戶密碼
};
啟動Kafka時指定JAAS文件路徑:
export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
sudo systemctl restart kafka
使用kafka-acls.sh
工具為Topic分配權限,例如授予用戶alice
對test_topic
的讀寫權限:
# 添加ACL(--bootstrap-server指定Broker地址)
kafka-acls.sh --bootstrap-server localhost:9092 \
--add --allow-principal User:alice --operation Read --topic test_topic
kafka-acls.sh --bootstrap-server localhost:9092 \
--add --allow-principal User:alice --operation Write --topic test_topic
查看Topic的ACL列表:
kafka-acls.sh --bootstrap-server localhost:9092 --list --topic test_topic
通過以上步驟,可實現Kafka在Linux環境下的權限精細化管理,覆蓋用戶隔離、文件保護、網絡控制、加密認證及訪問授權等全流程安全需求。