在 Ubuntu 上配置 Kafka 权限,通常涉及两类:Linux 系统级权限 和 Kafka 自身的安全/ACL 权限。下面按常见场景一步一步说明。
不要用 root 跑 Kafka:
sudo useradd -m kafka
sudo passwd kafka
假设你解压在 /opt/kafka:
sudo chown -R kafka:kafka /opt/kafka
sudo chmod -R 755 /opt/kafka
sudo mkdir -p /var/lib/kafka /var/log/kafka
sudo chown -R kafka:kafka /var/lib/kafka /var/log/kafka
如果只是限制谁能访问 Kafka,可以先做网络层控制:
server.propertieslisteners=PLAINTEXT://192.168.1.10:9092
advertised.listeners=PLAINTEXT://192.168.1.10:9092
限制只能内网访问(配合防火墙):
sudo ufw allow from 192.168.1.0/24 to any port 9092
编辑 config/server.properties:
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
allow.everyone.if.no.acl.found=false
新建 config/kafka_server_jaas.conf:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret";
};
修改 bin/kafka-server-start.sh 或启动命令:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
client.properties:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="alice-secret";
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 Read \
--group test-group
kafka-acls.sh --bootstrap-server localhost:9092 --list
| 问题 | 原因 |
|---|---|
TopicAuthorizationException |
ACL 没配置 |
SASL authentication failed |
用户名/密码错误 |
| Kafka 无法启动 | JAAS 路径错误 |
| 客户端连不上 | listener 配置错误 |
SASL_PLAINTEXT + ACLSASL_SSL + ACL如果你愿意,我可以:
你现在是 单机还是集群?测试还是生产?