在 Debian 上部署 Kafka 时,“权限”通常涉及 3 个层面:
下面按常见场景给你一套「从基础到安全」的配置说明。
sudo useradd -r -m -s /bin/bash kafka
sudo mkdir -p /data/kafka
sudo chown -R kafka:kafka /data/kafka
sudo chmod 750 /data/kafka
server.properties 中:
log.dirs=/data/kafka
sudo chown -R kafka:kafka /opt/kafka
sudo -u kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
allow.everyone.if.no.acl.found=false
⚠️ 生产环境一定要
false
kafka_server_jaas.conf:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_producer="prod-secret"
user_consumer="cons-secret";
};
授权 producer
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:producer \
--producer \
--topic test-topic
授权 consumer
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:consumer \
--consumer \
--topic test-topic \
--group test-group
查看 ACL
kafka-acls.sh --bootstrap-server localhost:9092 --list
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="producer" password="prod-secret";
sudo ufw allow 9092/tcp
仅允许内网:
sudo ufw allow from 10.0.0.0/8 to any port 9092
allow.everyone.if.no.acl.found=falselog.dirs 写权限Kafka 3.x 可弃用 ZK(KRaft),否则 ZK 也要限制端口。
✅ 非 root 用户
✅ SASL_PLAINTEXT 或 SASL_SSL
✅ ACL 开启
✅ 防火墙限制 IP
✅ 单独 admin 账号
如果你愿意,可以告诉我:
我可以直接给你 一份可直接用的 Debian 配置示例。